跳转到内容
moshpit

使用 tmux

主机上要有 tmux,而且在 PATH 里;或者在连接表单的自定义 tmux 路径里填一个路径。别的不需要。装 hooks是可选项,和连接本身无关。

没有 tmux 时,连接不会失败,只会降级:一个纯 SSH 的单窗格,加一条横幅「此主机未安装 tmux —— 已使用纯 SSH 会话。」,旁边的安装 tmux 会按你的包管理器给出命令,你点了才执行。Moshpit 不会悄悄换成另一个多路复用器,tmux 和 herdr 的会话互不相干。填了自定义 tmux 路径,这项检查整个跳过,因为探测只看 PATH。

终端上方那条面包屑是导航,不是标签。点会话名,看到服务器上的全部会话并切换;点窗口那一段,看到这个会话里的所有窗口。

会话切换面板:服务器上的每个 tmux 会话,各自的窗口数,以及是否在别处连着

窗口切换面板:一个会话里的每个窗口,各自的窗格数、当前命令,以及哪个在等你

Moshpit 不把 tmux 自己的文字界面缩到手机上。它以控制客户端的身份接入,也就是 tmux -CC,和 iTerm2 用的是同一套控制模式,然后自己渲染结果。连上那一刻写进去的就是这一行:

Terminal window
tmux set -g history-limit 50000 2>/dev/null; tmux -CC attach

attach 不带 -t,接的是你最近用过的那个已有会话。Moshpit 自己从不执行 tmux new。服务器上一个会话都没有时,你看到的是一个把情况说清楚的空状态,和一个要你自己按的创建会话按钮。

发现会话靠同一条通道上的三条命令,树一变就重跑。-a 表示服务器上的全部会话,所以主页能同时展开好几个:

list-sessions -F '#{session_id} #{session_attached} #{session_name}'
list-windows -a -F '#{session_id} #{window_id} #{window_index} #{window_layout} …'
list-panes -a -F '#{pane_id} #{window_id} #{pane_index} … #{pane_current_command}'
  • 接入有 22 秒的期限。tmux 一直不确认,主页卡片就显示停滞,给出「附加未完成——tmux 始终没有确认。」和一个重试按钮。这时 SSH 本身还活着,没接上的是 tmux 这一步握手。
  • 控制模式跑不了 mosh。mosh 传的是屏幕差异,不是按行分帧的协议。所以走 mosh + tmux 时,Moshpit 在 mosh 里渲染 tmux 原本的全屏界面,同时另开一条辅助的 SSH 连接跑 -CC,只为了给面包屑和面板供数据。这条 SSH 连不上,你拿到的就是一个光秃秃的 tmux attach,没有原生面板。