固定 UDP 連接埠、決定斷線之後的工作階段還能等多久、讓腳本在 shell 之前先跑。
「UDP 連接埠或範圍(選填)」留空時,mosh-server 會在自己預設的 60000–61000 裡挑一個連接埠。平時沒問題,但若所在的網絡只放行少數幾個 UDP 連接埠,就會變成「SSH 登入成功、UDP 封包卻過不來」。
把這一欄填上,Term 會原樣交給 mosh-server -p:可以是單一連接埠(60000),也可以是一段範圍(60000:61000)。填防火牆真正放行的那幾個,伺服器就只在裡面挑。這一欄在主機編輯頁的「連線方式」裡,選了 Mosh 才會出現。
60000:60010,等於給這台主機留了 11 個連接埠。上面那行是應用自帶的提示:主機上要裝 mosh-server,登入仍然走 SSH。兩端都要是 1–65535 之間的連接埠,而且前一個不能大於後一個。寫錯了當場攔下:輸入框下面直接給出提示,改對或清空之前這台主機儲存不了。
60000:60010:9 不是合法範圍,輸入框下面直接回答「請輸入連接埠(1–65535)或範圍,如 60000:61000」;改成連接埠、範圍或者留空之前,儲存都是灰的。mosh 工作階段比應用活得久:關掉 Term、斷網、把手機收起來,主機上的 mosh-server 還在那裡等客戶端回來。這正是 mosh 的價值所在 —— 同時也是主機上會累積一堆再沒人連回去的 mosh-server 的原因。
設定 → 終端機 → Mosh 工作階段逾時 決定這個「失聯窗口」有多長:1 天、3 天、5 天、1 週(預設)、1 個月,或者永不。Term 會把它作為 MOSH_SERVER_NETWORK_TMOUT 交給伺服器,超過這個時長沒收到客戶端的消息,mosh-server 自己結束。選「永不」就回到 mosh 原本一直等下去的行為。這項設定對之後新開的工作階段生效。
走 SSH 時,主機的啟動腳本是在第一個提示符出現之後「打」進去的,老辦法。走 Mosh 時它根本不用打:它被寫進 mosh-server 的啟動參數,作為 mosh 初始化指令碼,由伺服器在 shell 啟動之前執行。
這帶來三點實際差別。它不會再跟登入橫幅、MOTD 搶時機,因為它根本不跟提示符打交道。一行 cd /srv/app 或 export EDITOR=vim 會留在你隨後進入的那個 shell 裡,而不是在一個已經印出提示符的 shell 裡跑一次。至於 tmux new -A -s main 這樣的腳本,連上就自動接回工作階段 —— 連線交給 mosh,工作交給 tmux。
這一項沒有開關,但值得知道。終端機裡的 TUI 程式靠問終端機「你的背景色是什麼」(OSC 11)來判斷深色還是淺色,而 mosh 會把這個查詢丟掉 —— 它傳的是一個畫面,不是位元組串流,問出去沒有回音。所以在原本的 mosh 工作階段裡,vim 之類只能靠猜,還常常猜反。
於是 Term 索性主動告訴它:連線時把 COLORFGBG 與 COLORTERM=truecolor 寫進工作階段的環境變數,認這兩個變數的程式自己就能選對背景。這個值是連線那一刻取的 —— 之後再切換應用的深淺色,要重新連線才會帶上新值。
這兩項設定在工作階段裡都看得見:pgrep 能看到 mosh-server 實際是用什麼命令列起來的,-p 就在裡面;逾時在環境變數裡,單位是秒 —— 604800 就是一週。
# mosh-server 實際的啟動命令列 pgrep -af mosh-server | tail -1 # Term 交給伺服器的逾時(秒) echo TM=[$MOSH_SERVER_NETWORK_TMOUT]
mosh-server new -s -c 256 -p 60000:60010 … 裡的正是主機編輯頁填的範圍,TM=[604800] 就是 1 週換算成秒。參考: 常見問題 —— 怎麼連 mosh · mosh.org