Zellij Web 客户端与 Shell 集成

本文分为两个部分:第一部分介绍 Zellij 的 Web 客户端功能,让你通过浏览器远程访问和管理终端会话;第二部分介绍 Zellij 的 Shell 集成技巧,包括环境变量、自动启动和实用脚本,让 Zellij 更好地融入你的日常工作流。

Web 客户端部分

一、启动 Web 服务

Zellij 内置了 Web 服务器功能,通过 zellij web 命令启动:

# 使用默认配置启动 Web 服务
zellij web

启动后,你可以通过浏览器访问 Zellij 会话,获得完整的终端体验。

config.kdl 配置

在配置文件中可以自定义 Web 服务器的行为:

// config.kdl
web_server true              // 启用 Web 服务器
web_server_ip "0.0.0.0"      // 监听地址,0.0.0.0 表示所有接口
web_server_port 8080          // 监听端口

SSL 证书配置

为了安全传输,建议配置 SSL 证书以启用 HTTPS:

// config.kdl
web_server true
web_server_ip "0.0.0.0"
web_server_port 443

// SSL 证书路径
web_server_ssl_cert "/path/to/cert.pem"
web_server_ssl_key "/path/to/key.pem"

HTTPS 支持和 URL 方案

Web 客户端支持 https://wss://(安全 WebSocket)方案。在配置了 SSL 证书后,所有通信将自动加密。即使不配置 SSL,也可以通过反向代理(如 Nginx)来添加 HTTPS 支持。

base_url 反向代理支持

如果你通过反向代理(如 Nginx 或 Caddy)部署 Zellij Web,可以设置 base_url 来确保资源路径正确:

// config.kdl
web_server true
base_url "https://terminal.example.com/zellij/"

Web 客户端终端配置

Web 客户端支持自定义终端外观:

  • 字体:在 Web 客户端设置中选择等宽字体(推荐 JetBrains Mono、Fira Code 等)
  • 光标样式:块状、下划线或竖线
  • 主题:支持亮色和暗色主题

服务器状态查询

# 查看 Web 服务器状态
zellij web-status

二、认证与权限

Web 客户端支持通过令牌(Token)进行认证,控制谁可以访问你的 Zellij 会话。

创建访问令牌

# 创建读写令牌(完全控制权限)
zellij web-token create --read-write

# 创建只读令牌(只能查看,不能操作)
zellij web-token create --read-only

# 创建命名令牌(便于管理)
zellij web-token create --read-write --name "my-laptop"

创建成功后会输出一个令牌字符串,将其保存在安全的地方。

管理令牌

# 列出所有活跃令牌
zellij web-token list

# 吊销指定令牌
zellij web-token revoke <token-id>

# 吊销所有令牌
zellij web-token revoke-all

令牌安全说明

  • 令牌具有长期有效性,请妥善保管,不要泄露给他人
  • 为不同设备创建不同的命名令牌,便于追踪和单独吊销
  • 定期轮换令牌,吊销不再使用的旧令牌
  • 如果令牌泄露,立即使用 revoke 命令吊销

三、远程连接

浏览器访问

在浏览器中打开 Web 服务器的地址即可访问:

https://your-server:8080/?token=YOUR_TOKEN

首次访问时需要提供有效的访问令牌进行认证。

终端远程附加

除了浏览器,也可以从终端远程附加到 Web 服务:

# 远程附加到 Web 服务器上的会话
zellij attach https://your-server:8080/session-name --token YOUR_TOKEN

保存凭证

使用 --remember 选项保存凭证,避免每次都输入令牌:

# 保存凭证,后续连接不需要再次输入令牌
zellij attach https://your-server:8080/my-session --token YOUR_TOKEN --remember

安全考虑

  • 始终使用 HTTPS,避免明文传输终端数据
  • 使用防火墙限制 Web 服务器端口的访问范围
  • 为只读查看者使用只读令牌
  • 不要将 Web 服务器暴露在公共网络上,除非有适当的安全措施

移动端支持

Web 客户端对移动端浏览器有基本的支持。在手机或平板上访问同样的 URL,即可获得精简的终端体验。注意移动端的触屏操作和物理键盘有差异,某些快捷键功能可能不可用。

Shell 集成部分

四、环境变量

Zellij 在运行时会设置一些环境变量,脚本和插件可以利用这些变量来检测和适配 Zellij 环境。

变量名说明示例值
ZELLIJ如果当前在 Zellij 会话中则为 11
ZELLIJ_SESSION_NAME当前会话的名称my-session
ZELLIJ_PANE_ID当前面板的 ID42

自定义环境变量

在配置文件的 env 块中可以设置自定义环境变量,这些变量会在 Zellij 会话中生效:

// config.kdl
env {
    EDITOR "vim"
    PROJECT_ROOT "/home/user/projects"
    MY_TOOL_FLAG "enabled"
}

在脚本中检测 Zellij

#!/bin/bash
if [ -n "$ZELLIJ" ]; then
    echo "运行在 Zellij 中 (会话: $ZELLIJ_SESSION_NAME, 面板: $ZELLIJ_PANE_ID)"
else
    echo "不在 Zellij 环境中"
fi

五、自动启动

Zellij 支持在终端启动时自动附加到现有会话或创建新会话。

Bash 配置

~/.bashrc 中添加:

# 自动启动 Zellij
eval "$(zellij setup --generate-auto-start bash)"

Zsh 配置

~/.zshrc 中添加:

# 自动启动 Zellij
eval "$(zellij setup --generate-auto-start zsh)"

Fish 配置

~/.config/fish/config.fish 中添加:

# 自动启动 Zellij
zellij setup --generate-auto-start fish | source

环境变量控制

自动启动行为可以通过环境变量进行精细控制:

变量说明用法
ZELLIJ_AUTO_ATTACH设为 true 时,自动附加到最近的现有会话export ZELLIJ_AUTO_ATTACH=true
ZELLIJ_AUTO_EXIT设为 true 时,退出 Zellij 后自动关闭终端窗口export ZELLIJ_AUTO_EXIT=true

六、自动补全

Zellij 可以为 Bash、Zsh 和 Fish 生成 shell 补全脚本:

# Bash — 添加到 ~/.bashrc
eval "$(zellij setup --generate-completion bash)"

# Zsh — 添加到 ~/.zshrc
eval "$(zellij setup --generate-completion zsh)"

# Fish — 生成补全文件
zellij setup --generate-completion fish > ~/.config/fish/completions/zellij.fish

安装补全后,在命令行输入 zellij 后按 Tab 键即可自动补全子命令和选项。

七、实用集成脚本

以下脚本展示了如何将 Zellij 更好地集成到日常工作中。

使用 skim 选择会话

使用 skim(或 fzf)交互式选择要附加的会话:

#!/bin/bash
# zellij-session-picker.sh
SESSION=$(zellij list-sessions 2>/dev/null | \
    sed 's/ (created.*//' | \
    sk --height 40% --prompt "选择会话: ")

if [ -n "$SESSION" ]; then
    zellij attach "$SESSION"
else
    echo "没有选择会话"
fi

使用 skim 列出布局

交互式选择布局并创建新会话:

#!/bin/bash
# zellij-layout-picker.sh
LAYOUT=$(zellij setup --check | \
    grep -oP '(?<=layout: ).*' | \
    xargs -I{} ls {}/*.kdl 2>/dev/null | \
    xargs -n1 basename | \
    sed 's/\.kdl$//' | \
    sort -u | \
    sk --height 40% --prompt "选择布局: ")

if [ -n "$LAYOUT" ]; then
    SESSION_NAME="work-$(date +%H%M)"
    zellij -s "$SESSION_NAME" -l "$LAYOUT"
else
    zellij
fi

一键附加或创建

如果会话存在则附加,否则创建新会话:

#!/bin/bash
# zellij-smart-attach.sh
SESSION_NAME="${1:-main}"

if zellij list-sessions 2>/dev/null | grep -q "^$SESSION_NAME"; then
    echo "附加到现有会话: $SESSION_NAME"
    zellij attach "$SESSION_NAME"
else
    echo "创建新会话: $SESSION_NAME"
    zellij -s "$SESSION_NAME"
fi

将这个脚本添加到 shell 别名中,使用更方便:

# 添加到 ~/.bashrc 或 ~/.zshrc
alias zs='~/scripts/zellij-smart-attach.sh'
alias zsp='~/scripts/zellij-session-picker.sh'
alias zlp='~/scripts/zellij-layout-picker.sh'

通过 Web 客户端和 Shell 集成的组合使用,Zellij 不仅能作为本地终端多路复用器,还能成为一个强大的远程终端解决方案。无论你是在办公室、家里还是移动中,都可以无缝地访问和管理你的终端工作环境。

返回博客列表