<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Zellij on Tarragon</title><link>https://tarrragon.github.io/blog/tags/zellij/</link><description>Recent content in Zellij on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 29 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/zellij/index.xml" rel="self" type="application/rss+xml"/><item><title>Multiplexer：tmux vs zellij</title><link>https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/multiplexer-tmux-zellij/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/multiplexer-tmux-zellij/</guid><description>&lt;p>Multiplexer 在一個終端機視窗裡切分多個 pane、管理多個 session、SSH 斷線後保持 session 存活。&lt;/p>
&lt;h2 id="tmux">tmux&lt;/h2>
&lt;p>tmux 是最成熟、生態最廣的選擇。配置在 &lt;code>~/.config/tmux/tmux.conf&lt;/code>（新版）或 &lt;code>~/.tmux.conf&lt;/code>（傳統位置）。&lt;/p>
&lt;h3 id="核心配置項目">核心配置項目&lt;/h3>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c1"># prefix key（預設是 Ctrl-b，很多人改成 Ctrl-a）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">unbind C-b
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g prefix C-a
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="nb">bind&lt;/span> C-a send-prefix
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="c1"># 分割 pane 的快捷鍵（預設不直覺，改成 | 和 -）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="nb">bind&lt;/span> &lt;span class="p">|&lt;/span> split-window -h -c &lt;span class="s2">&amp;#34;#{pane_current_path}&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="nb">bind&lt;/span> - split-window -v -c &lt;span class="s2">&amp;#34;#{pane_current_path}&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="c1"># 用 vim 風格的 hjkl 切換 pane&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="nb">bind&lt;/span> h &lt;span class="k">select&lt;/span>-pane -L
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="nb">bind&lt;/span> j &lt;span class="k">select&lt;/span>-pane -D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="nb">bind&lt;/span> k &lt;span class="k">select&lt;/span>-pane -U
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="nb">bind&lt;/span> l &lt;span class="k">select&lt;/span>-pane -R
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="c1"># 啟用滑鼠支援&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g mouse on
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="c1"># 256 色支援&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g default-terminal &lt;span class="s2">&amp;#34;tmux-256color&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="nb">set&lt;/span> -ag terminal-overrides &lt;span class="s2">&amp;#34;,xterm-256color:RGB&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl">&lt;span class="c1"># status bar 位置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g status-position top&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="tmux-plugin">tmux plugin&lt;/h3>
&lt;p>用 TPM（Tmux Plugin Manager）管理，常用：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>tmux-sensible&lt;/strong>：合理的預設值&lt;/li>
&lt;li>&lt;strong>tmux-resurrect&lt;/strong>：重開機後還原 session 佈局&lt;/li>
&lt;li>&lt;strong>tmux-continuum&lt;/strong>：自動儲存 session&lt;/li>
&lt;/ul>
&lt;h2 id="zellij">zellij&lt;/h2>
&lt;p>zellij 是較新的替代品，Rust 寫的，內建佈局系統、tab 命名、浮動 pane。配置在 &lt;code>~/.config/zellij/config.kdl&lt;/code>（KDL 格式）。&lt;/p>
&lt;p>跟 tmux 的主要差異：&lt;/p>
&lt;ul>
&lt;li>開箱即用的 UI 提示（底部顯示可用快捷鍵），學習曲線較低&lt;/li>
&lt;li>佈局用 KDL 宣告式描述，比 tmux 的 script 式設定更容易管理&lt;/li>
&lt;li>Plugin 系統用 WASM，跟 tmux 的 bash script 式 plugin 不同&lt;/li>
&lt;li>生態較新、plugin 和整合沒有 tmux 多&lt;/li>
&lt;/ul>
&lt;h2 id="選型判讀">選型判讀&lt;/h2>
&lt;p>已經熟 tmux 的人通常沒有強烈理由遷移；從零開始的人 zellij 的上手成本更低。&lt;/p>
&lt;h2 id="深入">深入&lt;/h2>
&lt;p>這篇是多工器的概覽（在終端機生態裡的定位、tmux 與 zellij 的取捨）。把它們當「遠端工作工具」深入用——session 持久化的核心概念、遠端斷線接回、瀏覽器連遠端 session——見工具選單的深度頁：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 持久化與基礎&lt;/a>——session 持久化怎麼保住遠端工作。&lt;/li>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/zellij-pane/" data-link-title="Zellij 多終端機操作指南" data-link-desc="Zellij pane 的佈局查看、內容讀取、大小調整等 CLI 操作方式，適合搭配 AI 工具使用。">zellij 分頁與 pane&lt;/a>——內建佈局的操作深入。&lt;/li>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/zellij-remote-web-client/" data-link-title="Zellij Web Client 外網連線教學" data-link-desc="讓他人透過瀏覽器連線到指定的 Zellij session，包含 SSL 憑證申請、防火牆設定、Token 管理等完整步驟。">zellij 遠端 web 客戶端&lt;/a>——從瀏覽器連遠端 session。&lt;/li>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/linux/tools/remote/connection-and-sync-tools/" data-link-title="遠端連線與同步工具選型：連得穩、斷得起、檔案一致" data-link-desc="遠端工作要挑連線與檔案同步工具、在 ssh/mosh/autossh 之間、或 rsync/sshfs/mutagen 之間拿不定、想知道各自解哪個問題與代價時回來讀">遠端連線與同步工具選型&lt;/a>——多工器之外的連線（mosh/autossh）與同步（rsync/sshfs/mutagen）。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>Multiplexer 在一個終端機視窗裡切分多個 pane、管理多個 session、SSH 斷線後保持 session 存活。</p>
<h2 id="tmux">tmux</h2>
<p>tmux 是最成熟、生態最廣的選擇。配置在 <code>~/.config/tmux/tmux.conf</code>（新版）或 <code>~/.tmux.conf</code>（傳統位置）。</p>
<h3 id="核心配置項目">核心配置項目</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1"># prefix key（預設是 Ctrl-b，很多人改成 Ctrl-a）</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">unbind C-b
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nb">set</span> -g prefix C-a
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="nb">bind</span> C-a send-prefix
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="c1"># 分割 pane 的快捷鍵（預設不直覺，改成 | 和 -）</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="nb">bind</span> <span class="p">|</span> split-window -h -c <span class="s2">&#34;#{pane_current_path}&#34;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="nb">bind</span> - split-window -v -c <span class="s2">&#34;#{pane_current_path}&#34;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="c1"># 用 vim 風格的 hjkl 切換 pane</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="nb">bind</span> h <span class="k">select</span>-pane -L
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="nb">bind</span> j <span class="k">select</span>-pane -D
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="nb">bind</span> k <span class="k">select</span>-pane -U
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="nb">bind</span> l <span class="k">select</span>-pane -R
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="c1"># 啟用滑鼠支援</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="nb">set</span> -g mouse on
</span></span><span class="line"><span class="ln">18</span><span class="cl">
</span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="c1"># 256 色支援</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl"><span class="nb">set</span> -g default-terminal <span class="s2">&#34;tmux-256color&#34;</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="nb">set</span> -ag terminal-overrides <span class="s2">&#34;,xterm-256color:RGB&#34;</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">
</span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="c1"># status bar 位置</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="nb">set</span> -g status-position top</span></span></code></pre></div><h3 id="tmux-plugin">tmux plugin</h3>
<p>用 TPM（Tmux Plugin Manager）管理，常用：</p>
<ul>
<li><strong>tmux-sensible</strong>：合理的預設值</li>
<li><strong>tmux-resurrect</strong>：重開機後還原 session 佈局</li>
<li><strong>tmux-continuum</strong>：自動儲存 session</li>
</ul>
<h2 id="zellij">zellij</h2>
<p>zellij 是較新的替代品，Rust 寫的，內建佈局系統、tab 命名、浮動 pane。配置在 <code>~/.config/zellij/config.kdl</code>（KDL 格式）。</p>
<p>跟 tmux 的主要差異：</p>
<ul>
<li>開箱即用的 UI 提示（底部顯示可用快捷鍵），學習曲線較低</li>
<li>佈局用 KDL 宣告式描述，比 tmux 的 script 式設定更容易管理</li>
<li>Plugin 系統用 WASM，跟 tmux 的 bash script 式 plugin 不同</li>
<li>生態較新、plugin 和整合沒有 tmux 多</li>
</ul>
<h2 id="選型判讀">選型判讀</h2>
<p>已經熟 tmux 的人通常沒有強烈理由遷移；從零開始的人 zellij 的上手成本更低。</p>
<h2 id="深入">深入</h2>
<p>這篇是多工器的概覽（在終端機生態裡的定位、tmux 與 zellij 的取捨）。把它們當「遠端工作工具」深入用——session 持久化的核心概念、遠端斷線接回、瀏覽器連遠端 session——見工具選單的深度頁：</p>
<ul>
<li><a href="/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 持久化與基礎</a>——session 持久化怎麼保住遠端工作。</li>
<li><a href="/blog/linux/tools/cli/zellij-pane/" data-link-title="Zellij 多終端機操作指南" data-link-desc="Zellij pane 的佈局查看、內容讀取、大小調整等 CLI 操作方式，適合搭配 AI 工具使用。">zellij 分頁與 pane</a>——內建佈局的操作深入。</li>
<li><a href="/blog/linux/tools/cli/zellij-remote-web-client/" data-link-title="Zellij Web Client 外網連線教學" data-link-desc="讓他人透過瀏覽器連線到指定的 Zellij session，包含 SSL 憑證申請、防火牆設定、Token 管理等完整步驟。">zellij 遠端 web 客戶端</a>——從瀏覽器連遠端 session。</li>
<li><a href="/blog/linux/tools/remote/connection-and-sync-tools/" data-link-title="遠端連線與同步工具選型：連得穩、斷得起、檔案一致" data-link-desc="遠端工作要挑連線與檔案同步工具、在 ssh/mosh/autossh 之間、或 rsync/sshfs/mutagen 之間拿不定、想知道各自解哪個問題與代價時回來讀">遠端連線與同步工具選型</a>——多工器之外的連線（mosh/autossh）與同步（rsync/sshfs/mutagen）。</li>
</ul>
]]></content:encoded></item><item><title>tmux 基礎：遠端 session 持久化與基本操作</title><link>https://tarrragon.github.io/blog/linux/tools/cli/tmux-persistence-and-basics/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/cli/tmux-persistence-and-basics/</guid><description>&lt;p>tmux 是終端機多工器，核心責任是把終端機 session 的生命週期與連線本身脫鉤，並在單一連線裡分割出多個工作區。在遠端 SSH 開發下，它解決最痛的一個問題：連線斷了，伺服器上跑的東西不會跟著消失。把工作放進 tmux，連線中斷後 session 仍在伺服器上運作，重連 attach 回去就接續原狀。&lt;/p>
&lt;p>遠端伺服器優先選 tmux 的理由是可用性。它幾乎是事實標準，多數 Linux 發行版的套件庫都有、很多伺服器甚至預裝。&lt;code>zellij&lt;/code> 功能新、畫面提示友善，但通常要自行安裝；在不能隨意裝套件的機器上，tmux 處處可用就是決定性優勢。兩者的取捨在最後一節展開。&lt;/p>
&lt;p>本文承接 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽&lt;/a> 的多工器分類，聚焦 tmux 在遠端情境的實際操作。&lt;/p>
&lt;h2 id="持久化工作流detach-與-reattach">持久化工作流：detach 與 reattach&lt;/h2>
&lt;p>tmux 對遠端最重要的能力是 session 持久化：session 跑在伺服器上，跟當前這條 SSH 連線無關，所以主動離開或被動斷線後它都還在。這條工作流由四個指令構成。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>動作&lt;/th>
 &lt;th>指令&lt;/th>
 &lt;th>說明&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>開新具名 session&lt;/td>
 &lt;td>&lt;code>tmux new -s work&lt;/code>&lt;/td>
 &lt;td>用名字開，之後好辨識&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>主動離開&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按 &lt;code>d&lt;/code>&lt;/td>
 &lt;td>detach，session 留在背景繼續跑&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>列出現有 session&lt;/td>
 &lt;td>&lt;code>tmux ls&lt;/code>&lt;/td>
 &lt;td>看伺服器上有哪些 session&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>接回&lt;/td>
 &lt;td>&lt;code>tmux attach -t work&lt;/code>&lt;/td>
 &lt;td>reattach，回到離開時的狀態（可簡寫 &lt;code>tmux a -t work&lt;/code>）&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>關鍵在於被動斷線與主動 detach 的結果相同：手機從 Wi-Fi 切到行動網路、SSH 連線逾時、筆電闔上，這些情況下 tmux session 都留在伺服器上，重連後 &lt;code>tmux a&lt;/code> 就接回去。判讀訊號很單純：任何超過幾秒、不想因斷線重來的工作（build、資料遷移、&lt;code>tail -f&lt;/code> 追 log、跑測試），開始前先進 tmux。&lt;/p>
&lt;h2 id="prefix-keytmux-操作的入口">prefix key：tmux 操作的入口&lt;/h2>
&lt;p>tmux 的所有指令都以 prefix key 起手，預設是 &lt;code>Ctrl-b&lt;/code>。操作方式是按下 &lt;code>Ctrl-b&lt;/code> 放開、再按功能鍵，而不是同時按住。理解這個「兩段式」是上手 tmux 的第一道門檻；若按住不放或間隔太久而沒反應，多半是兩段式沒按對，重來一次即可。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>操作&lt;/th>
 &lt;th>按鍵&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>開新 window&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按 &lt;code>c&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>切換上一個 / 下一個 window&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按 &lt;code>p&lt;/code> / &lt;code>n&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>跳到第 N 個 window&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按數字&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>垂直分割（左右兩個 pane）&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按 &lt;code>%&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>水平分割（上下兩個 pane）&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按 &lt;code>&amp;quot;&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>在 pane 間移動&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按方向鍵&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>關閉當前 pane&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按 &lt;code>x&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>單一 pane 全螢幕放大 / 還原&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按 &lt;code>z&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>進 copy mode（往回捲歷史）&lt;/td>
 &lt;td>&lt;code>prefix&lt;/code> 後按 &lt;code>[&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>window 與 pane 是兩個層級：window 是整頁工作區（類似分頁），pane 是一個 window 內切出的子區塊。遠端開發常見的佈局是一個 window 切成數個 pane，一個跑編輯器、一個跑 &lt;code>tail -f&lt;/code>、一個留著敲指令。捲動歷史要先進 copy mode（&lt;code>prefix&lt;/code> 後按 &lt;code>[&lt;/code>），用方向鍵或 &lt;code>PageUp&lt;/code> 往回看，按 &lt;code>q&lt;/code> 離開 — 這是初學最容易卡住的點，因為進了 tmux 後終端機原本的捲動行為改由 tmux 接管。&lt;/p>
&lt;h2 id="遠端與手機的調校">遠端與手機的調校&lt;/h2>
&lt;p>tmux 預設設定對手機與慢速連線不夠順，幾項調整能明顯改善體感，全部寫在 &lt;code>~/.tmux.conf&lt;/code>。&lt;/p>
&lt;p>prefix key &lt;code>Ctrl-b&lt;/code> 在手機虛擬鍵盤上難按，常見的調整是改綁成 &lt;code>Ctrl-a&lt;/code>（更靠近鍵盤左側）：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="c1"># ~/.tmux.conf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">unbind C-b
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g prefix C-a
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="nb">bind&lt;/span> C-a send-prefix&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>滑鼠支援讓觸控裝置能直接點選 pane 與捲動，在手機與平板特別有用：&lt;/p></description><content:encoded><![CDATA[<p>tmux 是終端機多工器，核心責任是把終端機 session 的生命週期與連線本身脫鉤，並在單一連線裡分割出多個工作區。在遠端 SSH 開發下，它解決最痛的一個問題：連線斷了，伺服器上跑的東西不會跟著消失。把工作放進 tmux，連線中斷後 session 仍在伺服器上運作，重連 attach 回去就接續原狀。</p>
<p>遠端伺服器優先選 tmux 的理由是可用性。它幾乎是事實標準，多數 Linux 發行版的套件庫都有、很多伺服器甚至預裝。<code>zellij</code> 功能新、畫面提示友善，但通常要自行安裝；在不能隨意裝套件的機器上，tmux 處處可用就是決定性優勢。兩者的取捨在最後一節展開。</p>
<p>本文承接 <a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a> 的多工器分類，聚焦 tmux 在遠端情境的實際操作。</p>
<h2 id="持久化工作流detach-與-reattach">持久化工作流：detach 與 reattach</h2>
<p>tmux 對遠端最重要的能力是 session 持久化：session 跑在伺服器上，跟當前這條 SSH 連線無關，所以主動離開或被動斷線後它都還在。這條工作流由四個指令構成。</p>
<table>
  <thead>
      <tr>
          <th>動作</th>
          <th>指令</th>
          <th>說明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>開新具名 session</td>
          <td><code>tmux new -s work</code></td>
          <td>用名字開，之後好辨識</td>
      </tr>
      <tr>
          <td>主動離開</td>
          <td><code>prefix</code> 後按 <code>d</code></td>
          <td>detach，session 留在背景繼續跑</td>
      </tr>
      <tr>
          <td>列出現有 session</td>
          <td><code>tmux ls</code></td>
          <td>看伺服器上有哪些 session</td>
      </tr>
      <tr>
          <td>接回</td>
          <td><code>tmux attach -t work</code></td>
          <td>reattach，回到離開時的狀態（可簡寫 <code>tmux a -t work</code>）</td>
      </tr>
  </tbody>
</table>
<p>關鍵在於被動斷線與主動 detach 的結果相同：手機從 Wi-Fi 切到行動網路、SSH 連線逾時、筆電闔上，這些情況下 tmux session 都留在伺服器上，重連後 <code>tmux a</code> 就接回去。判讀訊號很單純：任何超過幾秒、不想因斷線重來的工作（build、資料遷移、<code>tail -f</code> 追 log、跑測試），開始前先進 tmux。</p>
<h2 id="prefix-keytmux-操作的入口">prefix key：tmux 操作的入口</h2>
<p>tmux 的所有指令都以 prefix key 起手，預設是 <code>Ctrl-b</code>。操作方式是按下 <code>Ctrl-b</code> 放開、再按功能鍵，而不是同時按住。理解這個「兩段式」是上手 tmux 的第一道門檻；若按住不放或間隔太久而沒反應，多半是兩段式沒按對，重來一次即可。</p>
<table>
  <thead>
      <tr>
          <th>操作</th>
          <th>按鍵</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>開新 window</td>
          <td><code>prefix</code> 後按 <code>c</code></td>
      </tr>
      <tr>
          <td>切換上一個 / 下一個 window</td>
          <td><code>prefix</code> 後按 <code>p</code> / <code>n</code></td>
      </tr>
      <tr>
          <td>跳到第 N 個 window</td>
          <td><code>prefix</code> 後按數字</td>
      </tr>
      <tr>
          <td>垂直分割（左右兩個 pane）</td>
          <td><code>prefix</code> 後按 <code>%</code></td>
      </tr>
      <tr>
          <td>水平分割（上下兩個 pane）</td>
          <td><code>prefix</code> 後按 <code>&quot;</code></td>
      </tr>
      <tr>
          <td>在 pane 間移動</td>
          <td><code>prefix</code> 後按方向鍵</td>
      </tr>
      <tr>
          <td>關閉當前 pane</td>
          <td><code>prefix</code> 後按 <code>x</code></td>
      </tr>
      <tr>
          <td>單一 pane 全螢幕放大 / 還原</td>
          <td><code>prefix</code> 後按 <code>z</code></td>
      </tr>
      <tr>
          <td>進 copy mode（往回捲歷史）</td>
          <td><code>prefix</code> 後按 <code>[</code></td>
      </tr>
  </tbody>
</table>
<p>window 與 pane 是兩個層級：window 是整頁工作區（類似分頁），pane 是一個 window 內切出的子區塊。遠端開發常見的佈局是一個 window 切成數個 pane，一個跑編輯器、一個跑 <code>tail -f</code>、一個留著敲指令。捲動歷史要先進 copy mode（<code>prefix</code> 後按 <code>[</code>），用方向鍵或 <code>PageUp</code> 往回看，按 <code>q</code> 離開 — 這是初學最容易卡住的點，因為進了 tmux 後終端機原本的捲動行為改由 tmux 接管。</p>
<h2 id="遠端與手機的調校">遠端與手機的調校</h2>
<p>tmux 預設設定對手機與慢速連線不夠順，幾項調整能明顯改善體感，全部寫在 <code>~/.tmux.conf</code>。</p>
<p>prefix key <code>Ctrl-b</code> 在手機虛擬鍵盤上難按，常見的調整是改綁成 <code>Ctrl-a</code>（更靠近鍵盤左側）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># ~/.tmux.conf</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">unbind C-b
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nb">set</span> -g prefix C-a
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nb">bind</span> C-a send-prefix</span></span></code></pre></div><p>滑鼠支援讓觸控裝置能直接點選 pane 與捲動，在手機與平板特別有用：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># ~/.tmux.conf</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">set</span> -g mouse on</span></span></code></pre></div><p>頻寬層面，tmux 本身傳輸的是純文字、量很低，斷線重連的成本也小。真正吃頻寬的是跑在 tmux 裡的全螢幕 TUI（例如 <code>btop</code>）的高頻重畫 — 這要調的是那個工具自己的刷新率，而非 tmux。改完設定檔後，在既有 session 內用 <code>prefix</code> 後按 <code>:</code> 輸入 <code>source-file ~/.tmux.conf</code> 重新載入。</p>
<h2 id="tmux-與-zellij-的選型對照">tmux 與 zellij 的選型對照</h2>
<p>tmux 與 zellij 解決同一類問題，session 持久化是兩者共有的基本能力（zellij 甚至內建 resurrection），真正的選擇依據是可用性與上手成本。</p>
<table>
  <thead>
      <tr>
          <th>面向</th>
          <th>tmux</th>
          <th>zellij</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>預設可用性</td>
          <td>多數伺服器預裝或套件庫直接有</td>
          <td>通常需要自行安裝</td>
      </tr>
      <tr>
          <td>上手成本</td>
          <td>需記快捷鍵</td>
          <td>畫面有提示列，操作邊看邊學</td>
      </tr>
      <tr>
          <td>session 持久化</td>
          <td>有（detach / reattach）</td>
          <td>有，另內建 resurrection（結束後重建）</td>
      </tr>
      <tr>
          <td>設定生態</td>
          <td>成熟、範例與設定檔分享多</td>
          <td>內建 layout、設定較直覺</td>
      </tr>
      <tr>
          <td>資源佔用</td>
          <td>低</td>
          <td>略高但仍輕量（差在閒置記憶體、與傳輸頻寬無關）</td>
      </tr>
  </tbody>
</table>
<p>選型分界很清楚：受限或陌生的伺服器、要求處處可用，選 tmux；自己掌控的機器、想要友善的上手體驗與內建 layout，選 zellij。對 prefix 快捷鍵還不熟的人，這條分界仍成立：在別人的伺服器上工作優先學 tmux，因為無法保證對方裝了 zellij，可用性約束高於上手體驗；zellij 的友善體驗留給自己能掌控安裝的機器。兩者的指令心智模型相近（都靠一個 prefix/modifier 起手），學會一個再換另一個成本不高。zellij 路線的實際操作在本資料夾另有兩篇：pane 的 CLI 操作見 <a href="/blog/linux/tools/cli/zellij-pane/" data-link-title="Zellij 多終端機操作指南" data-link-desc="Zellij pane 的佈局查看、內容讀取、大小調整等 CLI 操作方式，適合搭配 AI 工具使用。">Zellij 多終端機操作指南</a>、瀏覽器遠端連線見 <a href="/blog/linux/tools/cli/zellij-remote-web-client/" data-link-title="Zellij Web Client 外網連線教學" data-link-desc="讓他人透過瀏覽器連線到指定的 Zellij session，包含 SSL 憑證申請、防火牆設定、Token 管理等完整步驟。">Zellij Web Client 外網連線教學</a>。</p>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>在多工器的 pane 裡擺即時監控：見 <a href="/blog/linux/tools/cli/tui-monitoring-tools/" data-link-title="TUI 監控工具：btop、htop、k9s 的遠端使用與刷新率調校" data-link-desc="全螢幕 TUI 監控工具在遠端 SSH 情境的使用：htop 進程操作、btop 多資源儀表板、k9s 管 Kubernetes，以及慢速連線下刷新率與頻寬的取捨。">TUI 監控工具</a>。</li>
<li>zellij 的進階用法：<a href="/blog/linux/tools/cli/zellij-pane/" data-link-title="Zellij 多終端機操作指南" data-link-desc="Zellij pane 的佈局查看、內容讀取、大小調整等 CLI 操作方式，適合搭配 AI 工具使用。">Zellij 多終端機操作指南</a> 與 <a href="/blog/linux/tools/cli/zellij-remote-web-client/" data-link-title="Zellij Web Client 外網連線教學" data-link-desc="讓他人透過瀏覽器連線到指定的 Zellij session，包含 SSL 憑證申請、防火牆設定、Token 管理等完整步驟。">Zellij Web Client 外網連線教學</a>。</li>
<li>多工器在三類遠端工具中的定位：<a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a>。</li>
</ul>
]]></content:encoded></item><item><title>終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器</title><link>https://tarrragon.github.io/blog/linux/tools/cli/cli-graphical-tools-overview/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/cli/cli-graphical-tools-overview/</guid><description>&lt;p>終端機圖形化工具，是用純文字字元（ASCII 與 Unicode 製圖字元）在終端機裡畫出可讀介面的一類程式，承擔的責任是讓遠端操作不必依賴桌面圖形環境就能監控系統、判讀資料與管理多個工作流。它們傳輸的全是文字，所以在頻寬低、連線不穩、只有一支手機的情境下，反而比真正的圖形介面更可靠。&lt;/p>
&lt;p>這類工具常被誤解成「把圖片塞進終端機」。那是另一條技術路線（sixel、kitty 影像協定、&lt;code>chafa&lt;/code> 把 PNG 轉成色塊），依賴特定終端機支援、傳輸量大，在低頻寬遠端會卡。本篇談的是另一條路線：用 &lt;code>─│┌┐└┘&lt;/code> 這類製圖字元、用半形與全形方塊堆出長條圖、用 sparkline 點陣畫趨勢線。畫面本質仍是一段文字，任何能顯示文字的終端機都能呈現。&lt;/p>
&lt;h2 id="為什麼遠端操作特別需要這條路線">為什麼遠端操作特別需要這條路線&lt;/h2>
&lt;p>遠端操作的核心限制是頻寬與連線穩定度，而純文字介面正好把這兩個成本壓到最低。一個全螢幕的監控介面，每次刷新送出的是一整片字元矩陣；若改用影像協定，送出的是一張壓縮點陣圖，資料量通常相差一個量級以上（實際視壓縮率而定）。連線中斷時，文字介面只要重連就能重畫，影像協定則可能因終端機狀態錯亂而花屏。&lt;/p>
&lt;p>這條路線也避開了環境依賴。遠端伺服器通常沒有桌面環境，X11 forwarding 設定繁瑣又吃頻寬；手機上的 SSH app（Termius、Blink、JuiceSSH）能穩定顯示的就是文字。把操作介面建立在文字之上，等於把「能不能用」的前提降到「終端機能顯示字」，這是所有遠端通道都滿足的最低標準。&lt;/p>
&lt;h2 id="六類工具的定位">六類工具的定位&lt;/h2>
&lt;p>終端機圖形化工具依本篇關注的責任分六類，各自解決遠端操作的不同問題。這裡聚焦「監控判讀、資料可視化、多工承載、檔案瀏覽、資料庫存取、訊息佇列存取」六種責任；fuzzy finder（&lt;code>fzf&lt;/code>）等其他互動式 TUI 同屬純文字遠端路線、但責任不同，不在本篇的選型框架內。&lt;/p>
&lt;h3 id="tui-監控與儀表板">TUI 監控與儀表板&lt;/h3>
&lt;p>TUI（Text User Interface）監控工具負責把系統即時狀態畫成全螢幕的互動介面，省去反覆敲 &lt;code>ps&lt;/code>、&lt;code>df&lt;/code>、&lt;code>free&lt;/code> 再自行拼湊的步驟，一眼呈現 CPU、記憶體、磁碟、網路的即時變化。它用製圖字元畫出框線與長條，用顏色標出負載高低，並接受鍵盤操作來排序、過濾、殺進程。&lt;/p>
&lt;p>&lt;code>btop&lt;/code> 與 &lt;code>htop&lt;/code> 是系統層的代表：開起來就是一片帶長條圖的進程清單，可以直接選中進程送訊號。&lt;code>k9s&lt;/code> 把這套搬到 Kubernetes，用同樣的全螢幕互動瀏覽 pod、查 log、進 container。&lt;code>lazygit&lt;/code> 把 git 的暫存、commit、分支操作變成可點選的面板。&lt;code>ncdu&lt;/code> 與 &lt;code>gdu&lt;/code> 掃描磁碟並用長條畫出每個目錄佔多少空間，找出爆掉的是哪一包。&lt;/p>
&lt;p>這類工具的共同判讀訊號是：需求落在「即時狀態 + 立刻操作」、而非「事後分析一段歷史資料」時，TUI 監控是對的選擇。它的邊界在於刷新成本 — 全螢幕重畫在慢速連線上會明顯延遲，這點在後面遠端情境會展開。&lt;/p>
&lt;h3 id="ascii-與文字圖表">ASCII 與文字圖表&lt;/h3>
&lt;p>文字圖表工具負責把一串數值畫成終端機裡的圖，讓趨勢與分布可視化，而不必把資料下載回本機開試算表。它接受標準輸入或檔案的數字，輸出長條圖、折線圖或 sparkline，全部由字元構成。&lt;/p>
&lt;p>&lt;code>gnuplot&lt;/code> 是老牌繪圖工具，設定 &lt;code>set terminal dumb&lt;/code> 就會用 ASCII 畫折線圖，適合畫函數或一段時間序列。&lt;code>termgraph&lt;/code> 吃一份「標籤 + 數值」就畫出橫向長條圖，看各分類佔比很直接。&lt;code>plotext&lt;/code> 是 Python 函式庫，在腳本裡直接畫折線與散點，適合接在資料處理流程後面。&lt;code>youplot&lt;/code>（&lt;code>uplot&lt;/code>）能從 pipeline 即時吃資料畫圖，配合 &lt;code>tail -f&lt;/code> 可以做出滾動更新的監控線。sparkline 類工具（如 &lt;code>spark&lt;/code>）把一串數字壓成一行高低起伏的點陣，塞進狀態列或 log 裡都行。&lt;/p>
&lt;p>這類工具的判讀訊號是：手上已經有一串數值（log 抽出來的延遲、監控匯出的指標、一個查詢的結果），想看形狀而非逐筆讀數字。它跟 TUI 監控的差別在於資料來源 — TUI 監控自己去抓系統即時狀態，文字圖表則是餵什麼畫什麼，適合畫自訂指標與歷史資料。&lt;/p>
&lt;h3 id="終端機多工器">終端機多工器&lt;/h3>
&lt;p>終端機多工器負責在單一連線裡管理多個終端機 session，並讓 session 的生命週期脫離連線本身。它把畫面切成多個 pane、用分頁組織工作流，而最關鍵的是：連線斷了，伺服器上的 session 仍在跑，重連後 attach 回去就接續原狀。&lt;/p>
&lt;p>&lt;code>tmux&lt;/code> 是事實標準，幾乎每台伺服器都裝得到，設定檔成熟、資源佔用低。&lt;code>zellij&lt;/code> 是較新的選擇，預設就有畫面提示（floating pane、操作提示列），對不熟快捷鍵的人上手較快，並內建 layout 設定能一鍵開出固定的多 pane 佈局。&lt;/p>
&lt;p>多工器跟前兩類不同，它本身不畫資料圖，而是承載其他工具的容器：在一個 pane 跑 &lt;code>btop&lt;/code>、另一個 pane 跑 &lt;code>tail -f&lt;/code> 接 sparkline、第三個 pane 留著敲指令。對遠端操作來說，它解決的是連線穩定度問題 — 這是手機與低頻寬情境的核心痛點，下一節展開。&lt;/p>
&lt;h3 id="檔案瀏覽與操作">檔案瀏覽與操作&lt;/h3>
&lt;p>檔案管理器負責把目錄結構與檔案內容做成可導航的互動介面，讓遠端只有終端機時也能像 IDE 側邊欄那樣瀏覽、預覽、搬移檔案，取代反覆 &lt;code>ls&lt;/code>、&lt;code>cd&lt;/code>、&lt;code>cat&lt;/code>。&lt;/p>
&lt;p>&lt;code>broot&lt;/code> 用可展開的樹狀檢視呈現目錄層級，配模糊跳轉適合深層結構；&lt;code>yazi&lt;/code> 與 &lt;code>ranger&lt;/code> 走 Miller 欄狀（並列父目錄、當前目錄、預覽窗），邊瀏覽邊看內容。&lt;/p>
&lt;p>這類工具的判讀訊號是：需求落在檔案層級的導覽與操作，而非系統監控或畫圖。選型與依賴注意事項見 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/file-manager-tuis/" data-link-title="終端機檔案管理器：broot、yazi、ranger 的遠端瀏覽與選型" data-link-desc="在純文字終端機用 TUI 檔案管理器像 IDE 側邊欄那樣瀏覽目錄、預覽檔案內容：樹狀（broot）與 Miller 欄狀（yazi/ranger）兩種介面範式的差異，以及遠端 SSH 情境下的選型與依賴注意事項。">終端機檔案管理器&lt;/a>。&lt;/p>
&lt;h3 id="資料庫存取">資料庫存取&lt;/h3>
&lt;p>資料庫客戶端負責把 DB 的 schema、表格與查詢結果做成文字介面，讓遠端只有終端機時也能連到資料庫瀏覽資料、跑查詢，取代把連線資訊餵給桌面 GUI（DBeaver、TablePlus）。&lt;/p>
&lt;p>它分兩種範式：全螢幕 TUI（&lt;code>harlequin&lt;/code> 的 SQL IDE 風、&lt;code>lazysql&lt;/code> 的瀏覽器風）把 schema 樹、編輯器、結果表排進面板；增強型 REPL（&lt;code>pgcli&lt;/code> / &lt;code>litecli&lt;/code>）仍是行式打 SQL、但補上語法高亮與智能補全。&lt;/p>
&lt;p>這類工具的判讀訊號是：需求落在連資料庫做事，而非看系統或檔案。選型與連線注意事項見 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/sql-database-clients/" data-link-title="終端機 SQL 客戶端：harlequin、lazysql 與 pgcli/litecli 的選型" data-link-desc="在純文字終端機連資料庫、跑查詢、看結果的客戶端：全螢幕 TUI（harlequin IDE 風、lazysql 瀏覽器風）與增強型 REPL（pgcli/litecli）兩種範式，以及遠端連線的 SSL driver gotcha。">終端機 SQL 客戶端&lt;/a>。&lt;/p>
&lt;h3 id="訊息佇列存取">訊息佇列存取&lt;/h3>
&lt;p>訊息佇列客戶端負責把 broker 的 topic、partition、consumer group 與訊息內容做成文字介面，讓遠端只有終端機時也能瀏覽訊息流、消費單一 topic、看消費進度，取代把連線資訊餵給桌面工具（Conduktor、RedisInsight）。它跟資料庫客戶端的關鍵差異是多半綁單一 broker 協議：Kafka 的 TUI 不認 AMQP、一個工具連多種 broker 是少數例外。&lt;/p>
&lt;p>它同樣分兩種範式：全螢幕 TUI（Kafka 的 &lt;code>kaskade&lt;/code> 看叢集與消費、&lt;code>yozefu&lt;/code> 用查詢撈 record）把 topic 清單與訊息排進面板；增強型 REPL（Redis 的 &lt;code>iredis&lt;/code>）行式打指令、補上補全與型別感知。&lt;/p></description><content:encoded><![CDATA[<p>終端機圖形化工具，是用純文字字元（ASCII 與 Unicode 製圖字元）在終端機裡畫出可讀介面的一類程式，承擔的責任是讓遠端操作不必依賴桌面圖形環境就能監控系統、判讀資料與管理多個工作流。它們傳輸的全是文字，所以在頻寬低、連線不穩、只有一支手機的情境下，反而比真正的圖形介面更可靠。</p>
<p>這類工具常被誤解成「把圖片塞進終端機」。那是另一條技術路線（sixel、kitty 影像協定、<code>chafa</code> 把 PNG 轉成色塊），依賴特定終端機支援、傳輸量大，在低頻寬遠端會卡。本篇談的是另一條路線：用 <code>─│┌┐└┘</code> 這類製圖字元、用半形與全形方塊堆出長條圖、用 sparkline 點陣畫趨勢線。畫面本質仍是一段文字，任何能顯示文字的終端機都能呈現。</p>
<h2 id="為什麼遠端操作特別需要這條路線">為什麼遠端操作特別需要這條路線</h2>
<p>遠端操作的核心限制是頻寬與連線穩定度，而純文字介面正好把這兩個成本壓到最低。一個全螢幕的監控介面，每次刷新送出的是一整片字元矩陣；若改用影像協定，送出的是一張壓縮點陣圖，資料量通常相差一個量級以上（實際視壓縮率而定）。連線中斷時，文字介面只要重連就能重畫，影像協定則可能因終端機狀態錯亂而花屏。</p>
<p>這條路線也避開了環境依賴。遠端伺服器通常沒有桌面環境，X11 forwarding 設定繁瑣又吃頻寬；手機上的 SSH app（Termius、Blink、JuiceSSH）能穩定顯示的就是文字。把操作介面建立在文字之上，等於把「能不能用」的前提降到「終端機能顯示字」，這是所有遠端通道都滿足的最低標準。</p>
<h2 id="六類工具的定位">六類工具的定位</h2>
<p>終端機圖形化工具依本篇關注的責任分六類，各自解決遠端操作的不同問題。這裡聚焦「監控判讀、資料可視化、多工承載、檔案瀏覽、資料庫存取、訊息佇列存取」六種責任；fuzzy finder（<code>fzf</code>）等其他互動式 TUI 同屬純文字遠端路線、但責任不同，不在本篇的選型框架內。</p>
<h3 id="tui-監控與儀表板">TUI 監控與儀表板</h3>
<p>TUI（Text User Interface）監控工具負責把系統即時狀態畫成全螢幕的互動介面，省去反覆敲 <code>ps</code>、<code>df</code>、<code>free</code> 再自行拼湊的步驟，一眼呈現 CPU、記憶體、磁碟、網路的即時變化。它用製圖字元畫出框線與長條，用顏色標出負載高低，並接受鍵盤操作來排序、過濾、殺進程。</p>
<p><code>btop</code> 與 <code>htop</code> 是系統層的代表：開起來就是一片帶長條圖的進程清單，可以直接選中進程送訊號。<code>k9s</code> 把這套搬到 Kubernetes，用同樣的全螢幕互動瀏覽 pod、查 log、進 container。<code>lazygit</code> 把 git 的暫存、commit、分支操作變成可點選的面板。<code>ncdu</code> 與 <code>gdu</code> 掃描磁碟並用長條畫出每個目錄佔多少空間，找出爆掉的是哪一包。</p>
<p>這類工具的共同判讀訊號是：需求落在「即時狀態 + 立刻操作」、而非「事後分析一段歷史資料」時，TUI 監控是對的選擇。它的邊界在於刷新成本 — 全螢幕重畫在慢速連線上會明顯延遲，這點在後面遠端情境會展開。</p>
<h3 id="ascii-與文字圖表">ASCII 與文字圖表</h3>
<p>文字圖表工具負責把一串數值畫成終端機裡的圖，讓趨勢與分布可視化，而不必把資料下載回本機開試算表。它接受標準輸入或檔案的數字，輸出長條圖、折線圖或 sparkline，全部由字元構成。</p>
<p><code>gnuplot</code> 是老牌繪圖工具，設定 <code>set terminal dumb</code> 就會用 ASCII 畫折線圖，適合畫函數或一段時間序列。<code>termgraph</code> 吃一份「標籤 + 數值」就畫出橫向長條圖，看各分類佔比很直接。<code>plotext</code> 是 Python 函式庫，在腳本裡直接畫折線與散點，適合接在資料處理流程後面。<code>youplot</code>（<code>uplot</code>）能從 pipeline 即時吃資料畫圖，配合 <code>tail -f</code> 可以做出滾動更新的監控線。sparkline 類工具（如 <code>spark</code>）把一串數字壓成一行高低起伏的點陣，塞進狀態列或 log 裡都行。</p>
<p>這類工具的判讀訊號是：手上已經有一串數值（log 抽出來的延遲、監控匯出的指標、一個查詢的結果），想看形狀而非逐筆讀數字。它跟 TUI 監控的差別在於資料來源 — TUI 監控自己去抓系統即時狀態，文字圖表則是餵什麼畫什麼，適合畫自訂指標與歷史資料。</p>
<h3 id="終端機多工器">終端機多工器</h3>
<p>終端機多工器負責在單一連線裡管理多個終端機 session，並讓 session 的生命週期脫離連線本身。它把畫面切成多個 pane、用分頁組織工作流，而最關鍵的是：連線斷了，伺服器上的 session 仍在跑，重連後 attach 回去就接續原狀。</p>
<p><code>tmux</code> 是事實標準，幾乎每台伺服器都裝得到，設定檔成熟、資源佔用低。<code>zellij</code> 是較新的選擇，預設就有畫面提示（floating pane、操作提示列），對不熟快捷鍵的人上手較快，並內建 layout 設定能一鍵開出固定的多 pane 佈局。</p>
<p>多工器跟前兩類不同，它本身不畫資料圖，而是承載其他工具的容器：在一個 pane 跑 <code>btop</code>、另一個 pane 跑 <code>tail -f</code> 接 sparkline、第三個 pane 留著敲指令。對遠端操作來說，它解決的是連線穩定度問題 — 這是手機與低頻寬情境的核心痛點，下一節展開。</p>
<h3 id="檔案瀏覽與操作">檔案瀏覽與操作</h3>
<p>檔案管理器負責把目錄結構與檔案內容做成可導航的互動介面，讓遠端只有終端機時也能像 IDE 側邊欄那樣瀏覽、預覽、搬移檔案，取代反覆 <code>ls</code>、<code>cd</code>、<code>cat</code>。</p>
<p><code>broot</code> 用可展開的樹狀檢視呈現目錄層級，配模糊跳轉適合深層結構；<code>yazi</code> 與 <code>ranger</code> 走 Miller 欄狀（並列父目錄、當前目錄、預覽窗），邊瀏覽邊看內容。</p>
<p>這類工具的判讀訊號是：需求落在檔案層級的導覽與操作，而非系統監控或畫圖。選型與依賴注意事項見 <a href="/blog/linux/tools/cli/file-manager-tuis/" data-link-title="終端機檔案管理器：broot、yazi、ranger 的遠端瀏覽與選型" data-link-desc="在純文字終端機用 TUI 檔案管理器像 IDE 側邊欄那樣瀏覽目錄、預覽檔案內容：樹狀（broot）與 Miller 欄狀（yazi/ranger）兩種介面範式的差異，以及遠端 SSH 情境下的選型與依賴注意事項。">終端機檔案管理器</a>。</p>
<h3 id="資料庫存取">資料庫存取</h3>
<p>資料庫客戶端負責把 DB 的 schema、表格與查詢結果做成文字介面，讓遠端只有終端機時也能連到資料庫瀏覽資料、跑查詢，取代把連線資訊餵給桌面 GUI（DBeaver、TablePlus）。</p>
<p>它分兩種範式：全螢幕 TUI（<code>harlequin</code> 的 SQL IDE 風、<code>lazysql</code> 的瀏覽器風）把 schema 樹、編輯器、結果表排進面板；增強型 REPL（<code>pgcli</code> / <code>litecli</code>）仍是行式打 SQL、但補上語法高亮與智能補全。</p>
<p>這類工具的判讀訊號是：需求落在連資料庫做事，而非看系統或檔案。選型與連線注意事項見 <a href="/blog/linux/tools/cli/sql-database-clients/" data-link-title="終端機 SQL 客戶端：harlequin、lazysql 與 pgcli/litecli 的選型" data-link-desc="在純文字終端機連資料庫、跑查詢、看結果的客戶端：全螢幕 TUI（harlequin IDE 風、lazysql 瀏覽器風）與增強型 REPL（pgcli/litecli）兩種範式，以及遠端連線的 SSL driver gotcha。">終端機 SQL 客戶端</a>。</p>
<h3 id="訊息佇列存取">訊息佇列存取</h3>
<p>訊息佇列客戶端負責把 broker 的 topic、partition、consumer group 與訊息內容做成文字介面，讓遠端只有終端機時也能瀏覽訊息流、消費單一 topic、看消費進度，取代把連線資訊餵給桌面工具（Conduktor、RedisInsight）。它跟資料庫客戶端的關鍵差異是多半綁單一 broker 協議：Kafka 的 TUI 不認 AMQP、一個工具連多種 broker 是少數例外。</p>
<p>它同樣分兩種範式：全螢幕 TUI（Kafka 的 <code>kaskade</code> 看叢集與消費、<code>yozefu</code> 用查詢撈 record）把 topic 清單與訊息排進面板；增強型 REPL（Redis 的 <code>iredis</code>）行式打指令、補上補全與型別感知。</p>
<p>這類工具的判讀訊號是：需求落在連 broker 看訊息與消費狀態，而非連資料庫。選型與實機驗證注意事項見 <a href="/blog/linux/tools/cli/message-queue-tui-clients/" data-link-title="終端機訊息佇列客戶端：Kafka 的 kaskade/yozefu/ktea 與 Redis 的 iredis" data-link-desc="在純文字終端機連 broker、瀏覽 topic、消費訊息、檢視 consumer 狀態的客戶端：Kafka 的全螢幕 TUI（kaskade/yozefu/ktea）、Redis 的增強型 REPL（iredis），以及訊息佇列 TUI 多半綁單一 broker 協議這個跟 SQL 客戶端最大的不同。">終端機訊息佇列客戶端</a>。</p>
<h2 id="三種遠端情境的選型判讀">三種遠端情境的選型判讀</h2>
<p>工具選型要回到實際的連線條件，而不只是比對功能清單。以下對應三種常見的遠端情境，各自的判讀重點與陷阱不同。</p>
<h3 id="ssh-連到-linux-伺服器">SSH 連到 Linux 伺服器</h3>
<p>從本機 SSH 進伺服器，連線通常穩定、頻寬足，瓶頸在於操作要連續、不想每次重連都從頭開始。這個情境的核心配置是「多工器打底 + TUI 監控擺上去」：登入後先 <code>tmux attach</code>（沒有就 <code>tmux new</code>），在固定的 pane 佈局裡跑監控與操作。</p>
<p>這裡的判讀重點是把 session 持久化當成預設習慣，而不是等斷線才後悔。即使連線穩定，把長時間任務（build、資料遷移、<code>tail -f</code> 追 log）放進多工器，就能隨時離開再回來。TUI 監控在這個情境幾乎沒有刷新成本顧慮，<code>btop</code> 開最高刷新率也順，互動功能的排序與殺進程都能放手用。</p>
<p>常見陷阱是把多工器與終端機本身的捲動搞混 — 進了 tmux 後，滑鼠捲動預設是 tmux 在管，要進 copy mode 才能往回看歷史。這是上手期最容易卡住的點，值得一開始就把捲動與複製的快捷鍵設順。</p>
<h3 id="手機或平板遠端">手機或平板遠端</h3>
<p>用手機或平板的 SSH app 連線，限制是螢幕小、虛擬鍵盤難敲組合鍵、連線會隨網路切換而中斷。這個情境最該優先的是多工器的持久化能力：手機從 Wi-Fi 切到行動網路、app 切到背景再回來，連線往往已經斷過一次，沒有多工器就等於每次都重來。</p>
<p>工具選型要往「省版面、少快捷鍵」傾斜。<code>zellij</code> 在這裡比 <code>tmux</code> 友善，因為它把操作提示畫在畫面上，不必硬記組合鍵；但 <code>tmux</code> 若已配好觸控友善的快捷鍵也能勝任。TUI 監控要挑版面能縮的 — <code>htop</code> 在窄螢幕下仍可讀，複雜的多欄儀表板則會被擠到看不清。文字圖表在小螢幕反而有優勢，一行 sparkline 不管螢幕多窄都塞得下。</p>
<p>常見陷阱是組合鍵在虛擬鍵盤上難以輸入。多工器的 prefix key（tmux 預設 <code>Ctrl-b</code>）在手機上很難按，值得改綁成單鍵或螢幕上的快捷按鈕；好的 SSH app 通常提供自訂工具列來補這個缺口。</p>
<h3 id="低頻寬或不穩定連線">低頻寬或不穩定連線</h3>
<p>連線慢或會斷時，限制同時來自頻寬與穩定度，兩者要分開處理。穩定度由多工器解決 — 斷線後 session 還在，這點與情境無關地成立。頻寬則直接決定 TUI 監控能不能用得舒服。</p>
<p>這裡最關鍵的判讀是刷新率與重畫成本的取捨。全螢幕 TUI 每次刷新會重送整片畫面，刷新間隔越短、頻寬負擔越重；把刷新率調快、或工具本身刷新較密時，慢速連線上會看到畫面追不上、按鍵延遲。對策是把刷新間隔調長（多數工具支援，例如 <code>btop</code> 在介面裡可調 <code>update_ms</code>、<code>htop</code> 用 <code>-d</code> 設延遲），用較低的更新頻率換流暢的操作。</p>
<p>判讀的分界是即時性與頻寬的取捨：連線品質好就用全螢幕 TUI 的即時性，品質差就退回低頻率的文字輸出。文字圖表在後者特別划算，因為它是一次性輸出而非持續重畫 — 跑一次 <code>termgraph</code> 印出結果就結束，不佔用持續頻寬；需要持續監控時，「低刷新率的單一數值 + 偶爾印一次 sparkline」往往比全螢幕儀表板更實用。</p>
<h2 id="選型判準與下一步">選型判準與下一步</h2>
<p>把這些工具與三種情境收斂成一條判準鏈：先用多工器解決連線斷續（任何遠端情境都先做這步），再依任務選對應工具 — 即時狀態用 TUI 監控、看歷史數值用文字圖表、找檔案用檔案管理器、連資料庫用 SQL 客戶端、連 broker 看訊息用訊息佇列客戶端，最後依連線品質調整刷新率與版面密度。</p>
<p>這條判準對應的具體工具，在本資料夾逐篇展開安裝、設定與遠端調校的細節：</p>
<ul>
<li>TUI 工具：系統監控（<code>btop</code> / <code>htop</code> / <code>k9s</code>）見 <a href="/blog/linux/tools/cli/tui-monitoring-tools/" data-link-title="TUI 監控工具：btop、htop、k9s 的遠端使用與刷新率調校" data-link-desc="全螢幕 TUI 監控工具在遠端 SSH 情境的使用：htop 進程操作、btop 多資源儀表板、k9s 管 Kubernetes，以及慢速連線下刷新率與頻寬的取捨。">TUI 監控工具</a>；web 請求日誌（<code>GoAccess</code> / <code>ngxtop</code>）見 <a href="/blog/linux/tools/cli/web-server-log-monitoring/" data-link-title="終端機看 nginx 請求：GoAccess、ngxtop 與何時該用 pipeline 而非 TUI" data-link-desc="在終端機即時看 nginx／web 伺服器請求的工具：GoAccess 即時儀表板、ngxtop top 風格，含 log 格式對齊的 gotcha；以及「當下排查用 TUI、持續監控用 metrics pipeline」的使用時機分界。">終端機看 nginx 請求</a>；git 線圖（<code>tig</code> / <code>lazygit</code> / <code>gitui</code>）屬版控子題、見 <a href="/blog/linux/tools/cli/git-line-graph-tools-for-remote-cli/" data-link-title="遠端 CLI 開發的 git 線圖工具選型：tig、lazygit、gitui 與管線增強" data-link-desc="純 CLI、遠端開發情境下查看 git 分支線圖的工具地景，從 tig 唯讀瀏覽到 lazygit/gitui 操作中樞的定位差異，含選型判準與 lazygit 上手、delta side-by-side diff 設定。">遠端 CLI 開發的 git 線圖工具選型</a></li>
<li>文字圖表：<a href="/blog/linux/tools/cli/ascii-charts-in-terminal/" data-link-title="終端機文字圖表：gnuplot、termgraph、plotext 與 sparkline" data-link-desc="把數值畫成終端機文字圖的工具：gnuplot dumb terminal、termgraph 長條圖、plotext 腳本繪圖、sparkline 與 pipeline 即時更新，以及遠端情境下一次性輸出省頻寬的判讀。">終端機文字圖表</a>（<code>gnuplot</code> dumb terminal、<code>termgraph</code> 與 <code>plotext</code> 的資料接法、sparkline 接 pipeline）</li>
<li>多工器：<a href="/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎</a>（持久化與基本操作）；<code>zellij</code> 的 pane 操作見 <a href="/blog/linux/tools/cli/zellij-pane/" data-link-title="Zellij 多終端機操作指南" data-link-desc="Zellij pane 的佈局查看、內容讀取、大小調整等 CLI 操作方式，適合搭配 AI 工具使用。">Zellij 多終端機操作指南</a>、瀏覽器遠端連線見 <a href="/blog/linux/tools/cli/zellij-remote-web-client/" data-link-title="Zellij Web Client 外網連線教學" data-link-desc="讓他人透過瀏覽器連線到指定的 Zellij session，包含 SSL 憑證申請、防火牆設定、Token 管理等完整步驟。">Zellij Web Client 外網連線教學</a></li>
<li>檔案管理：<a href="/blog/linux/tools/cli/file-manager-tuis/" data-link-title="終端機檔案管理器：broot、yazi、ranger 的遠端瀏覽與選型" data-link-desc="在純文字終端機用 TUI 檔案管理器像 IDE 側邊欄那樣瀏覽目錄、預覽檔案內容：樹狀（broot）與 Miller 欄狀（yazi/ranger）兩種介面範式的差異，以及遠端 SSH 情境下的選型與依賴注意事項。">終端機檔案管理器</a>（<code>broot</code> 樹狀、<code>yazi</code> / <code>ranger</code> Miller 欄狀的選型與依賴）</li>
<li>資料庫客戶端：<a href="/blog/linux/tools/cli/sql-database-clients/" data-link-title="終端機 SQL 客戶端：harlequin、lazysql 與 pgcli/litecli 的選型" data-link-desc="在純文字終端機連資料庫、跑查詢、看結果的客戶端：全螢幕 TUI（harlequin IDE 風、lazysql 瀏覽器風）與增強型 REPL（pgcli/litecli）兩種範式，以及遠端連線的 SSL driver gotcha。">終端機 SQL 客戶端</a>（<code>harlequin</code> IDE 風、<code>lazysql</code> 瀏覽器風、<code>pgcli</code> / <code>litecli</code> 增強 REPL）</li>
<li>訊息佇列客戶端：<a href="/blog/linux/tools/cli/message-queue-tui-clients/" data-link-title="終端機訊息佇列客戶端：Kafka 的 kaskade/yozefu/ktea 與 Redis 的 iredis" data-link-desc="在純文字終端機連 broker、瀏覽 topic、消費訊息、檢視 consumer 狀態的客戶端：Kafka 的全螢幕 TUI（kaskade/yozefu/ktea）、Redis 的增強型 REPL（iredis），以及訊息佇列 TUI 多半綁單一 broker 協議這個跟 SQL 客戶端最大的不同。">終端機訊息佇列客戶端</a>（Kafka 的 <code>kaskade</code> / <code>yozefu</code> / <code>ktea</code>、Redis 的 <code>iredis</code>、與綁單一 broker 協議的選型差異）</li>
</ul>
<p>每篇單工具文章會聚焦一個工具在遠端情境下的實際配置，而不是重述官方手冊。先有這份總覽建立選型框架，再依當下的連線條件挑對應的工具深入。</p>
]]></content:encoded></item><item><title>Zellij Web Client 外網連線教學</title><link>https://tarrragon.github.io/blog/linux/tools/cli/zellij-remote-web-client/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/cli/zellij-remote-web-client/</guid><description>&lt;p>Zellij Web Client 讓他人透過瀏覽器連線到指定的 Zellij session，承擔的責任是把終端機多工環境分享給沒有 SSH 連線的協作者。本文承接 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽&lt;/a> 的多工器分類；zellij 的本機 pane 操作見 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/zellij-pane/" data-link-title="Zellij 多終端機操作指南" data-link-desc="Zellij pane 的佈局查看、內容讀取、大小調整等 CLI 操作方式，適合搭配 AI 工具使用。">Zellij 多終端機操作指南&lt;/a>、tmux 的持久化基礎見 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎&lt;/a>。&lt;/p>
&lt;hr>
&lt;h2 id="安裝-zellij">安裝 Zellij&lt;/h2>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="c1"># macOS&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">brew install zellij
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="c1"># Linux（使用安裝腳本）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">bash &amp;lt;&lt;span class="o">(&lt;/span>curl -L zellij.dev/launch&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl">&lt;span class="c1"># Windows（需要支援原生 Windows 的版本，詳見 GitHub Releases）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">&lt;span class="c1"># 從 https://github.com/zellij-org/zellij/releases 下載 Windows 版 .zip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">9&lt;/span>&lt;span class="cl">&lt;span class="c1"># 解壓後將 zellij.exe 加入 PATH&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>確認版本（需 v0.43.0 以上）：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">zellij --version&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="事前準備">事前準備&lt;/h2>
&lt;ul>
&lt;li>一個網域名稱（或固定 IP）&lt;/li>
&lt;li>SSL 憑證（對外連線強制要求）&lt;/li>
&lt;li>SSH 連線能力（如需遠端操作主機）→ 參考 &lt;a href="https://tarrragon.github.io/blog/work-log/ssh-key-%E8%A8%AD%E5%AE%9A%E7%AD%86%E8%A8%98macos-/-linux-/-windows/">SSH Key 設定筆記&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="步驟一取得-ssl-憑證">步驟一：取得 SSL 憑證&lt;/h2>
&lt;p>外網連線強制使用 HTTPS，必須提供 SSL 憑證。&lt;/p>
&lt;blockquote>
&lt;p>取得 Let&amp;rsquo;s Encrypt 憑證的 &lt;code>certbot&lt;/code> 指令需真實網域、本機未實機驗證；自簽憑證的 &lt;code>openssl&lt;/code> 指令、以及 zellij web server 啟停與 token 管理已在 localhost 實機驗證。&lt;/p>&lt;/blockquote>
&lt;h3 id="使用-lets-encrypt免費推薦">使用 Let&amp;rsquo;s Encrypt（免費，推薦）&lt;/h3>
&lt;p>需要先安裝 &lt;code>certbot&lt;/code>：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="c1"># macOS&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">brew install certbot
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="c1"># Ubuntu / Debian&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">sudo apt install certbot
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl">&lt;span class="c1"># Windows（使用 Chocolatey）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">choco install certbot
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">9&lt;/span>&lt;span class="cl">&lt;span class="c1"># 或使用 win-acme（Windows 原生替代方案）：https://www.win-acme.com/&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>申請憑證（將 &lt;code>your-domain.com&lt;/code> 換成實際網域）：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">sudo certbot certonly --standalone -d your-domain.com&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Windows 上若未使用 WSL，建議改用 &lt;a href="https://www.win-acme.com/">win-acme&lt;/a>，操作更直覺。&lt;/p>&lt;/blockquote>
&lt;p>憑證預設存放在：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl"># macOS / Linux
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">/etc/letsencrypt/live/your-domain.com/fullchain.pem # 憑證
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">/etc/letsencrypt/live/your-domain.com/privkey.pem # 私鑰
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"># Windows（certbot）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">C:\Certbot\live\your-domain.com\fullchain.pem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl">C:\Certbot\live\your-domain.com\privkey.pem&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="使用自簽憑證測試用">使用自簽憑證（測試用）&lt;/h3>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days &lt;span class="m">365&lt;/span> -nodes&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>注意：自簽憑證會讓瀏覽器在連線時顯示安全警告，於測試環境手動選擇繼續即可；正式對外服務改用上面的 Let&amp;rsquo;s Encrypt 憑證。&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;h2 id="步驟二開放防火牆-port">步驟二：開放防火牆 Port&lt;/h2>
&lt;p>Zellij web server 預設只綁本機 &lt;code>127.0.0.1:8082&lt;/code>，要讓外網連入必須顯式綁到對外位址（見步驟四的 &lt;code>--ip 0.0.0.0&lt;/code>）並開放對應 port。本教學以 port &lt;code>3000&lt;/code> 為例（port 可自選），需對外開放這個 port：&lt;/p></description><content:encoded><![CDATA[<p>Zellij Web Client 讓他人透過瀏覽器連線到指定的 Zellij session，承擔的責任是把終端機多工環境分享給沒有 SSH 連線的協作者。本文承接 <a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a> 的多工器分類；zellij 的本機 pane 操作見 <a href="/blog/linux/tools/cli/zellij-pane/" data-link-title="Zellij 多終端機操作指南" data-link-desc="Zellij pane 的佈局查看、內容讀取、大小調整等 CLI 操作方式，適合搭配 AI 工具使用。">Zellij 多終端機操作指南</a>、tmux 的持久化基礎見 <a href="/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎</a>。</p>
<hr>
<h2 id="安裝-zellij">安裝 Zellij</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># macOS</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">brew install zellij
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"># Linux（使用安裝腳本）</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">bash &lt;<span class="o">(</span>curl -L zellij.dev/launch<span class="o">)</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl">
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="c1"># Windows（需要支援原生 Windows 的版本，詳見 GitHub Releases）</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="c1"># 從 https://github.com/zellij-org/zellij/releases 下載 Windows 版 .zip</span>
</span></span><span class="line"><span class="ln">9</span><span class="cl"><span class="c1"># 解壓後將 zellij.exe 加入 PATH</span></span></span></code></pre></div><p>確認版本（需 v0.43.0 以上）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">zellij --version</span></span></code></pre></div><hr>
<h2 id="事前準備">事前準備</h2>
<ul>
<li>一個網域名稱（或固定 IP）</li>
<li>SSL 憑證（對外連線強制要求）</li>
<li>SSH 連線能力（如需遠端操作主機）→ 參考 <a href="https://tarrragon.github.io/blog/work-log/ssh-key-%E8%A8%AD%E5%AE%9A%E7%AD%86%E8%A8%98macos-/-linux-/-windows/">SSH Key 設定筆記</a></li>
</ul>
<hr>
<h2 id="步驟一取得-ssl-憑證">步驟一：取得 SSL 憑證</h2>
<p>外網連線強制使用 HTTPS，必須提供 SSL 憑證。</p>
<blockquote>
<p>取得 Let&rsquo;s Encrypt 憑證的 <code>certbot</code> 指令需真實網域、本機未實機驗證；自簽憑證的 <code>openssl</code> 指令、以及 zellij web server 啟停與 token 管理已在 localhost 實機驗證。</p></blockquote>
<h3 id="使用-lets-encrypt免費推薦">使用 Let&rsquo;s Encrypt（免費，推薦）</h3>
<p>需要先安裝 <code>certbot</code>：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># macOS</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">brew install certbot
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"># Ubuntu / Debian</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">sudo apt install certbot
</span></span><span class="line"><span class="ln">6</span><span class="cl">
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="c1"># Windows（使用 Chocolatey）</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl">choco install certbot
</span></span><span class="line"><span class="ln">9</span><span class="cl"><span class="c1"># 或使用 win-acme（Windows 原生替代方案）：https://www.win-acme.com/</span></span></span></code></pre></div><p>申請憑證（將 <code>your-domain.com</code> 換成實際網域）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sudo certbot certonly --standalone -d your-domain.com</span></span></code></pre></div><blockquote>
<p>Windows 上若未使用 WSL，建議改用 <a href="https://www.win-acme.com/">win-acme</a>，操作更直覺。</p></blockquote>
<p>憑證預設存放在：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl"># macOS / Linux
</span></span><span class="line"><span class="ln">2</span><span class="cl">/etc/letsencrypt/live/your-domain.com/fullchain.pem   # 憑證
</span></span><span class="line"><span class="ln">3</span><span class="cl">/etc/letsencrypt/live/your-domain.com/privkey.pem      # 私鑰
</span></span><span class="line"><span class="ln">4</span><span class="cl">
</span></span><span class="line"><span class="ln">5</span><span class="cl"># Windows（certbot）
</span></span><span class="line"><span class="ln">6</span><span class="cl">C:\Certbot\live\your-domain.com\fullchain.pem
</span></span><span class="line"><span class="ln">7</span><span class="cl">C:\Certbot\live\your-domain.com\privkey.pem</span></span></code></pre></div><h3 id="使用自簽憑證測試用">使用自簽憑證（測試用）</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days <span class="m">365</span> -nodes</span></span></code></pre></div><blockquote>
<p>注意：自簽憑證會讓瀏覽器在連線時顯示安全警告，於測試環境手動選擇繼續即可；正式對外服務改用上面的 Let&rsquo;s Encrypt 憑證。</p></blockquote>
<hr>
<h2 id="步驟二開放防火牆-port">步驟二：開放防火牆 Port</h2>
<p>Zellij web server 預設只綁本機 <code>127.0.0.1:8082</code>，要讓外網連入必須顯式綁到對外位址（見步驟四的 <code>--ip 0.0.0.0</code>）並開放對應 port。本教學以 port <code>3000</code> 為例（port 可自選），需對外開放這個 port：</p>
<blockquote>
<p>以下防火牆指令（<code>ufw</code> / <code>pf</code> / Windows Defender）依各平台官方用法、環境特定、本機未實機驗證。</p></blockquote>
<h3 id="linuxufw">Linux（ufw）</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sudo ufw allow 3000/tcp
</span></span><span class="line"><span class="ln">2</span><span class="cl">
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="c1"># 或指定來源 IP（更安全）</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">sudo ufw allow from 1.2.3.4 to any port <span class="m">3000</span></span></span></code></pre></div><h3 id="macos">macOS</h3>
<p>macOS 內建的防火牆是應用程式層級的，無法直接開放特定 port。通常有兩種做法：</p>
<ol>
<li><strong>系統偏好設定</strong> → 網路 → 防火牆 → 確認沒有擋住 Zellij</li>
<li><strong>使用 <code>pf</code></strong>（進階，通常不需要）：</li>
</ol>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># 新增規則到 /etc/pf.conf</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;pass in proto tcp from any to any port 3000&#34;</span> <span class="p">|</span> sudo tee -a /etc/pf.conf
</span></span><span class="line"><span class="ln">3</span><span class="cl">sudo pfctl -f /etc/pf.conf</span></span></code></pre></div><blockquote>
<p>macOS 預設防火牆通常不會擋住主動開啟的服務，多數情況下不需要額外設定。如果是在家用網路，記得在路由器設定 port forwarding。</p></blockquote>
<h3 id="windows">Windows</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="ln">1</span><span class="cl"><span class="c"># 使用 Windows Defender Firewall（以系統管理員執行 PowerShell）</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nb">New-NetFirewallRule</span> <span class="n">-DisplayName</span> <span class="s2">&#34;Zellij Web&#34;</span> <span class="n">-Direction</span> <span class="n">Inbound</span> <span class="n">-Protocol</span> <span class="n">TCP</span> <span class="n">-LocalPort</span> <span class="mf">3000</span> <span class="n">-Action</span> <span class="n">Allow</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c"># 或限制來源 IP（更安全）</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="nb">New-NetFirewallRule</span> <span class="n">-DisplayName</span> <span class="s2">&#34;Zellij Web&#34;</span> <span class="n">-Direction</span> <span class="n">Inbound</span> <span class="n">-Protocol</span> <span class="n">TCP</span> <span class="n">-LocalPort</span> <span class="mf">3000</span> <span class="n">-RemoteAddress</span> <span class="mf">1.2</span><span class="p">.</span><span class="py">3</span><span class="p">.</span><span class="py">4</span> <span class="n">-Action</span> <span class="n">Allow</span></span></span></code></pre></div><blockquote>
<p>Zellij 已支援原生 Windows，直接在 PowerShell 或 Windows Terminal 中執行即可。</p></blockquote>
<p>如果是雲端主機（AWS、GCP、Azure 等），記得同步在後台的安全群組開放 port 3000。</p>
<hr>
<h2 id="步驟三啟動-zellij">步驟三：啟動 Zellij</h2>
<p>先啟動一個 Zellij session：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">zellij</span></span></code></pre></div><hr>
<h2 id="步驟四啟動-web-server">步驟四：啟動 Web Server</h2>
<p>在 Zellij 內，按 <code>Ctrl+o</code> 然後按 <code>s</code> 開啟 share plugin，從 UI 啟動 web server。</p>
<p>或直接用 CLI 啟動並指定憑證：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">zellij web <span class="se">\
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="se"></span>  --ip 0.0.0.0 --port <span class="m">3000</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="se"></span>  --cert /etc/letsencrypt/live/your-domain.com/fullchain.pem <span class="se">\
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="se"></span>  --key /etc/letsencrypt/live/your-domain.com/privkey.pem</span></span></code></pre></div><p>背景執行（daemon 模式）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">zellij web -d <span class="se">\
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="se"></span>  --ip 0.0.0.0 --port <span class="m">3000</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="se"></span>  --cert /path/to/cert.pem <span class="se">\
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="se"></span>  --key /path/to/key.pem</span></span></code></pre></div><p>停止 web server：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">zellij web --stop</span></span></code></pre></div><p>確認 web server 執行狀態：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">zellij web --status</span></span></code></pre></div><p>Zellij web 預設綁 <code>127.0.0.1:8082</code>、只接受本機連線；對外服務必須用 <code>--ip 0.0.0.0</code> 顯式綁到對外位址、並用 <code>--port</code> 指定埠（本教學用 <code>3000</code>）。改用其他 port 時把 <code>--port</code> 一併調整（例如 <code>--port 8443</code>），防火牆規則也要同步改成該 port。</p>
<hr>
<h2 id="步驟五產生登入-token">步驟五：產生登入 Token</h2>
<p>為了安全，別人連線前需要用 token 登入，<strong>token 只會顯示一次</strong>，請立即複製。</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">zellij web --create-token</span></span></code></pre></div><p>或在 share plugin（<code>Ctrl+o</code> + <code>s</code>）裡產生。</p>
<p>將 token 分享給要連線的人。</p>
<hr>
<h2 id="步驟六連線">步驟六：連線</h2>
<p>對方在瀏覽器輸入：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">https://your-domain.com:3000/實際-session-名稱</span></span></code></pre></div><p>首次連線會要求輸入 token，驗證後即可進入 session。若連線後畫面沒有回應，多半是 port 未對外開放，確認防火牆與雲端主機安全群組是否放行該 port。</p>
<hr>
<h2 id="連線後的行為">連線後的行為</h2>
<table>
  <thead>
      <tr>
          <th>情況</th>
          <th>結果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Session 正在執行</td>
          <td>直接 attach 進去</td>
      </tr>
      <tr>
          <td>Session 曾存在但已結束</td>
          <td>Zellij 自動重建（resurrection）</td>
      </tr>
      <tr>
          <td>全新 session 名稱</td>
          <td>建立新的 session</td>
      </tr>
  </tbody>
</table>
<p>多人連線時，每個人都有自己的游標，可以同時操作。</p>
<hr>
<h2 id="安全建議">安全建議</h2>
<ul>
<li>Token 用完後記得撤銷：從 share plugin 或 CLI 管理</li>
<li>盡量限制開放的來源 IP，避免對全網開放</li>
<li>不建議長期開啟 web server，用完就關</li>
<li>撤銷 token 時，所有對應的 session token 也會一併失效</li>
</ul>
<hr>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>zellij 的本機 pane 操作（查看佈局、讀取其他 pane、調整大小）：<a href="/blog/linux/tools/cli/zellij-pane/" data-link-title="Zellij 多終端機操作指南" data-link-desc="Zellij pane 的佈局查看、內容讀取、大小調整等 CLI 操作方式，適合搭配 AI 工具使用。">Zellij 多終端機操作指南</a>。</li>
<li>不需要瀏覽器、純 SSH 的多工器持久化：<a href="/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎</a>。</li>
<li>多工器在整個遠端工具選型中的定位：<a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a>。</li>
</ul>
]]></content:encoded></item><item><title>Zellij 多終端機操作指南</title><link>https://tarrragon.github.io/blog/linux/tools/cli/zellij-pane/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/cli/zellij-pane/</guid><description>&lt;p>Zellij 是終端機多工器，能在單一畫面分割多個 pane。本文整理透過 zellij CLI 查看佈局、讀取其他 pane 內容、調整 pane 大小的操作方式 — CLI 介面既適合遠端腳本化操作，也適合搭配看不到螢幕的 AI 工具（例如 Claude）在終端機協作。本文承接 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽&lt;/a> 的多工器分類；瀏覽器遠端連線見 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/zellij-remote-web-client/" data-link-title="Zellij Web Client 外網連線教學" data-link-desc="讓他人透過瀏覽器連線到指定的 Zellij session，包含 SSL 憑證申請、防火牆設定、Token 管理等完整步驟。">Zellij Web Client 外網連線教學&lt;/a>、tmux 的持久化基礎見 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎&lt;/a>。&lt;/p>
&lt;h2 id="查看整體佈局">查看整體佈局&lt;/h2>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">zellij action dump-layout&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>會輸出完整的 KDL 格式佈局，包含所有 pane 的大小、位置、指令等資訊。&lt;/p>
&lt;h2 id="讀取其他終端機-pane-的內容">讀取其他終端機 pane 的內容&lt;/h2>
&lt;p>Claude 無法直接看到螢幕，但可以透過以下步驟讀取其他 pane 的輸出：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c1"># 1. 切換 focus 到目標 pane（focus-next-pane 會依序切換）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="c1"># 2. dump 該 pane 的螢幕內容到檔案&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="c1"># 3. 切回原本的 pane&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="c1"># 4. 讀取 dump 的檔案&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">zellij action focus-next-pane &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>zellij action focus-next-pane &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>zellij action dump-screen /tmp/zellij-pane-output.txt &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>zellij action focus-previous-pane &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>zellij action focus-previous-pane&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>dump-screen&lt;/code> 只 dump 當前可見的內容&lt;/li>
&lt;li>&lt;code>dump-screen -f&lt;/code> 會包含完整的 scrollback 歷史&lt;/li>
&lt;li>切換次數取決於目標 pane 的位置，需根據 &lt;code>dump-layout&lt;/code> 的結果判斷&lt;/li>
&lt;/ul>
&lt;h2 id="調整-pane-大小">調整 pane 大小&lt;/h2>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="c1"># 縮小當前 pane（向左縮）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">zellij action resize decrease right
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="c1"># 放大當前 pane（向右擴）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">zellij action resize increase right
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl">&lt;span class="c1"># 每次約改變 ~4-5% 寬度，可用迴圈批次調整&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">&lt;span class="k">for&lt;/span> i in &lt;span class="k">$(&lt;/span>seq &lt;span class="m">1&lt;/span> 3&lt;span class="k">)&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">do&lt;/span> zellij action resize decrease right&lt;span class="p">;&lt;/span> &lt;span class="k">done&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每次的步長是經驗值、不是固定比例 — zellij 的 resize 幅度依版本與 pane 當前尺寸而定，迴圈次數需視 &lt;code>dump-layout&lt;/code> 的結果微調。&lt;/p>
&lt;h2 id="使用者的-resize-快捷鍵">使用者的 Resize 快捷鍵&lt;/h2>
&lt;ol>
&lt;li>&lt;code>Ctrl + n&lt;/code> 進入 Resize 模式&lt;/li>
&lt;li>&lt;code>h&lt;/code>/&lt;code>l&lt;/code> 或方向鍵調整大小&lt;/li>
&lt;li>&lt;code>Esc&lt;/code> 退出&lt;/li>
&lt;/ol>
&lt;p>注意：在 Claude 互動式程式內，快捷鍵可能被吃掉，建議讓 Claude 用指令操作。&lt;/p>
&lt;h2 id="注意事項">注意事項&lt;/h2>
&lt;ul>
&lt;li>&lt;code>Ctrl + p&lt;/code> 進入 Pane 模式，其中 &lt;code>r&lt;/code> 用於在右邊新開 pane（調整大小是 &lt;code>Ctrl + n&lt;/code> 的 Resize 模式）&lt;/li>
&lt;li>使用者的典型佈局：左側 Claude（~35%），右側上下兩個終端機&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;ul>
&lt;li>把 session 分享給沒有 SSH 連線的協作者（瀏覽器連入）：&lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/zellij-remote-web-client/" data-link-title="Zellij Web Client 外網連線教學" data-link-desc="讓他人透過瀏覽器連線到指定的 Zellij session，包含 SSL 憑證申請、防火牆設定、Token 管理等完整步驟。">Zellij Web Client 外網連線教學&lt;/a>。&lt;/li>
&lt;li>純 SSH 的多工器持久化與 tmux 對照：&lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎&lt;/a>。&lt;/li>
&lt;li>多工器在遠端工具選型中的定位：&lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽&lt;/a>。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>Zellij 是終端機多工器，能在單一畫面分割多個 pane。本文整理透過 zellij CLI 查看佈局、讀取其他 pane 內容、調整 pane 大小的操作方式 — CLI 介面既適合遠端腳本化操作，也適合搭配看不到螢幕的 AI 工具（例如 Claude）在終端機協作。本文承接 <a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a> 的多工器分類；瀏覽器遠端連線見 <a href="/blog/linux/tools/cli/zellij-remote-web-client/" data-link-title="Zellij Web Client 外網連線教學" data-link-desc="讓他人透過瀏覽器連線到指定的 Zellij session，包含 SSL 憑證申請、防火牆設定、Token 管理等完整步驟。">Zellij Web Client 外網連線教學</a>、tmux 的持久化基礎見 <a href="/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎</a>。</p>
<h2 id="查看整體佈局">查看整體佈局</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">zellij action dump-layout</span></span></code></pre></div><p>會輸出完整的 KDL 格式佈局，包含所有 pane 的大小、位置、指令等資訊。</p>
<h2 id="讀取其他終端機-pane-的內容">讀取其他終端機 pane 的內容</h2>
<p>Claude 無法直接看到螢幕，但可以透過以下步驟讀取其他 pane 的輸出：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1"># 1. 切換 focus 到目標 pane（focus-next-pane 會依序切換）</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="c1"># 2. dump 該 pane 的螢幕內容到檔案</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="c1"># 3. 切回原本的 pane</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="c1"># 4. 讀取 dump 的檔案</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">zellij action focus-next-pane <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="se"></span>zellij action focus-next-pane <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="se"></span>zellij action dump-screen /tmp/zellij-pane-output.txt <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="se"></span>zellij action focus-previous-pane <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="se"></span>zellij action focus-previous-pane</span></span></code></pre></div><ul>
<li><code>dump-screen</code> 只 dump 當前可見的內容</li>
<li><code>dump-screen -f</code> 會包含完整的 scrollback 歷史</li>
<li>切換次數取決於目標 pane 的位置，需根據 <code>dump-layout</code> 的結果判斷</li>
</ul>
<h2 id="調整-pane-大小">調整 pane 大小</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># 縮小當前 pane（向左縮）</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">zellij action resize decrease right
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"># 放大當前 pane（向右擴）</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">zellij action resize increase right
</span></span><span class="line"><span class="ln">6</span><span class="cl">
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="c1"># 每次約改變 ~4-5% 寬度，可用迴圈批次調整</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="k">for</span> i in <span class="k">$(</span>seq <span class="m">1</span> 3<span class="k">)</span><span class="p">;</span> <span class="k">do</span> zellij action resize decrease right<span class="p">;</span> <span class="k">done</span></span></span></code></pre></div><p>每次的步長是經驗值、不是固定比例 — zellij 的 resize 幅度依版本與 pane 當前尺寸而定，迴圈次數需視 <code>dump-layout</code> 的結果微調。</p>
<h2 id="使用者的-resize-快捷鍵">使用者的 Resize 快捷鍵</h2>
<ol>
<li><code>Ctrl + n</code> 進入 Resize 模式</li>
<li><code>h</code>/<code>l</code> 或方向鍵調整大小</li>
<li><code>Esc</code> 退出</li>
</ol>
<p>注意：在 Claude 互動式程式內，快捷鍵可能被吃掉，建議讓 Claude 用指令操作。</p>
<h2 id="注意事項">注意事項</h2>
<ul>
<li><code>Ctrl + p</code> 進入 Pane 模式，其中 <code>r</code> 用於在右邊新開 pane（調整大小是 <code>Ctrl + n</code> 的 Resize 模式）</li>
<li>使用者的典型佈局：左側 Claude（~35%），右側上下兩個終端機</li>
</ul>
<hr>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>把 session 分享給沒有 SSH 連線的協作者（瀏覽器連入）：<a href="/blog/linux/tools/cli/zellij-remote-web-client/" data-link-title="Zellij Web Client 外網連線教學" data-link-desc="讓他人透過瀏覽器連線到指定的 Zellij session，包含 SSL 憑證申請、防火牆設定、Token 管理等完整步驟。">Zellij Web Client 外網連線教學</a>。</li>
<li>純 SSH 的多工器持久化與 tmux 對照：<a href="/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎</a>。</li>
<li>多工器在遠端工具選型中的定位：<a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a>。</li>
</ul>
]]></content:encoded></item></channel></rss>