WezTerm 多路复用:3 个场景讲透会话持久化与 SSH 远程
【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm
关上笔记本去开会,回来发现终端里那个跑了两个小时的任务还活着——这就是多路复用最朴素的价值。WezTerm 把这套机制做进了终端本身,靠一个常驻后台的进程托管你的会话:窗口关不关,工作都不丢。
WezTerm 里的多路复用围绕一个核心概念:域(Domain)。一个域就是一组窗口和标签页的集合,背后由一个叫 wezterm-mux-server 的常驻进程打理。本地域(local domain)默认就存在,管理你眼前的窗口;除此之外,WezTerm 还能通过 SSH 隧道或 Unix 套接字,连到跑在别处的域。连上之后,窗口和标签页会"附着"回本地原生界面上,鼠标、剪贴板、回滚缓冲区用起来跟本地终端没区别。
关掉终端再打开,工作还在
本地持久化的全部配置就写在 .wezterm.lua 里。下面这段在干什么:声明一个名叫 unix 的 Unix 域(走本地套接字的连接),再让 WezTerm 启动时自动执行等价于wezterm connect unix的动作。
config.unix_domains = { { name = 'unix' }, } config.default_gui_startup_args = { 'connect', 'unix' }想自己掌控连接时机,就把第二行删掉,改在命令行里敲wezterm connect unix。配置存盘后重开 WezTerm,从这一刻起所有标签页都挂在这个域上。
接下来发生的事就是多路复用的本体:你可以把窗口全部关掉,wezterm-mux-server 还在后台跑,标签页和它们里面的进程原封不动。下次再启动 WezTerm 连回这个域,屏幕恢复原样。配合wezterm cli spawn --domain-name unix,还能在当前窗口里新开一个标签页接到同一个域——相当于把"窗口"当成本地标签页来管,这正是 多路复用文档 里描述的工作方式。
一条命令连上远程服务器
SSH 域(SSH domain)指的是走 SSH 通道去连远端主机上的多路复用器。有个硬前提:远端得装一个版本兼容的 WezTerm,因为连接建立后客户端会在远端拉起一个 wezterm-mux-server,再通过套接字跟它对话。
在 .wezterm.lua 里给这台服务器起个名字。下面这段就是给远程域登记地址和登录名:
config.ssh_domains = { { name = 'prod', remote_address = '192.168.1.100', username = 'dev', }, }配好之后,连上去就一条命令:
$ wezterm connect prod首次连接可能会弹 SSH 认证,配好密钥后便一路直通。连上后,远端的标签页和会话同样能持久化:断网、关窗都不影响,重新 connect 即恢复。
如果你不想给每台机器都写一遍配置,还有条捷径:WezTerm 会自动读取~/.ssh/config,为里面每台主机生成一个带SSHMUX:前缀的域。也就是说,只要主机在 SSH 配置里存在,就能直接wezterm connect SSHMUX:staging,一行配置都不用加。
Windows 里直接跑 Linux 终端
Windows 用户可以用 Unix 域,把 WSL 容器里的 Linux 终端接进原生窗口。但有个限制要先知道:这条路只支持 WSL 1,因为 WSL 2 不支持 AF_UNIX 套接字互操作。
WSL 里面,先让服务器把套接字挂到 Windows 摸得到的 NTFS 路径上;NTFS 的权限总是"不对",顺手把权限检查关掉:
config.unix_domains = { { name = 'wsl', socket_path = '/mnt/c/Users/USERNAME/.local/share/wezterm/sock', skip_permissions_check = true, }, }Windows 这边,则让 WezTerm 通过 wsl 命令去拉起服务,并默认连上它:
config.unix_domains = { { name = 'wsl', serve_command = { 'wsl', 'wezterm-mux-server', '--daemonize' } }, } config.default_gui_startup_args = { 'connect', 'wsl' }配好之后从开始菜单启动 WezTerm,打开的就是一个 WSL 标签页;新开的标签页也默认落在 WSL 里,不用再手动切环境。
让体验更顺手的几个参数
- local_echo_threshold_ms:往返延迟超过这个毫秒数时,客户端会本地预测并回显你的按键,把延迟藏起来,远程域上特别好用。
- skip_permissions_check:跳过对套接字属主的安全检查;多用户机器上别动它,只有 WSL + NTFS 这种场景才需要开。
- proxy_command:用 nc / socat 之类的命令中转连接,可以借它给套接字"打洞"。
命令行侧还有几个顺手的小工具:wezterm cli spawn在指定域新开标签页,wezterm cli send-text能往目标窗格里直接发一段文本,wezterm cli get-text把窗格内容取成纯文本,比手动选中复制干净得多。
快捷键上,CTRL+SHIFT+T会在"当前窗格所属的域"里开新标签页,SUPER+SHIFT+T则在默认域里开;完整对照见 默认键位文档。
配置落盘之后,下次重开终端时,那个还在跑的任务会安静地等你回来——现在就给你的 .wezterm.lua 加上第一段配置吧。
【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考