<?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>Window-Manager on Tarragon</title><link>https://tarrragon.github.io/blog/tags/window-manager/</link><description>Recent content in Window-Manager 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/window-manager/index.xml" rel="self" type="application/rss+xml"/><item><title>浮動式 vs 平鋪式視窗管理</title><link>https://tarrragon.github.io/blog/linux/dotfile/04-window-management/floating-vs-tiling/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/04-window-management/floating-vs-tiling/</guid><description>&lt;p>桌面視窗管理分成兩種基本模式。&lt;/p>
&lt;p>&lt;strong>浮動式（floating）&lt;/strong> 是多數人熟悉的模式。視窗可以重疊、可以任意拖拉調整大小、可以最小化藏起來。macOS、Windows、GNOME、KDE 預設都是浮動式。操作直覺是「每個視窗是一張紙，自己決定放哪裡」。&lt;/p>
&lt;p>&lt;strong>平鋪式（tiling）&lt;/strong> 的規則不同：視窗自動排列填滿螢幕、不重疊，由 WM 的規則決定版面怎麼切割。開一個新視窗時，WM 自動把現有空間分一半給它；關掉一個視窗時，相鄰視窗自動擴展填補。操作直覺是「螢幕是一塊蛋糕，WM 負責切」。&lt;/p>
&lt;p>多數平鋪式 WM 支援&lt;strong>混合模式&lt;/strong>：特定視窗可以設為浮動，脫離平鋪規則。設定面板、密碼輸入框、小工具這類不適合塞進格子的視窗，通常會設成浮動例外。平鋪是預設，浮動是按需啟用的例外。&lt;/p>
&lt;h2 id="手動貼齊-vs-自動平鋪">手動貼齊 vs 自動平鋪&lt;/h2>
&lt;p>在進入平鋪式 WM 之前，macOS 和 Windows 都提供了「手動貼齊」功能——用快捷鍵或拖拉把視窗貼到螢幕的半邊、角落、三分之一。macOS 原生的 window snapping、Windows 的 Snap Layout、以及 Rectangle 和 Magnet 這類第三方工具都屬於這個範疇。&lt;/p>
&lt;p>手動貼齊跟自動平鋪的差距，在視窗數量少的時候幾乎感覺不到。開兩個視窗、左右各半，手動按一下快捷鍵就到位，完全夠用。&lt;/p>
&lt;p>差距在視窗數量多的時候才出現。每開一個新視窗都要決定它放哪、按對應的快捷鍵；關掉一個視窗就留下空洞，要手動拖拉其他視窗去填——當這種版面管理的決策負擔開始分散你對工作本身的注意力時，就是自動平鋪開始有價值的時機。這個斷點因螢幕大小和工作類型而異：23 吋單螢幕上同時開終端機、編輯器、瀏覽器、文件，版面很快就不夠分；雙螢幕寬螢幕上同樣的視窗數量可能還很從容。&lt;/p>
&lt;p>自動平鋪在這個情境下的優勢有三層。&lt;/p>
&lt;p>第一層是&lt;strong>自動回填&lt;/strong>。開視窗、關視窗，WM 自動重新分配空間，版面永遠是滿的、整齊的。你不用做任何版面決策。&lt;/p>
&lt;p>第二層是&lt;strong>操作對象的轉換&lt;/strong>。手動貼齊的操作對象是「某個視窗」——把 A 視窗貼到左邊、把 B 視窗貼到右上。平鋪式 WM 的操作對象是「版面結構」——把焦點往右移、把當前視窗跟隔壁交換、把這一格再水平切一半。你操作的是位置關係，不是絕對座標。&lt;/p>
&lt;p>第三層是&lt;strong>工作區整合&lt;/strong>。平鋪式工作流通常搭配多個工作區（workspace），每個工作區是一套獨立的平鋪佈局。「編輯器和終端機在工作區 1、瀏覽器在工作區 2、通訊軟體在工作區 4」——用快捷鍵瞬間切換整套上下文，而不是在一堆重疊視窗裡找。手動貼齊工具通常不帶工作區管理。&lt;/p>
&lt;h2 id="適用判讀">適用判讀&lt;/h2>
&lt;p>平鋪式視窗管理的投資報酬率取決於你的工作型態。&lt;/p>
&lt;p>&lt;strong>高回報情境&lt;/strong>：經常同時操作多個視窗且版面管理開始分散注意力、多數是「方方正正、可平鋪」的 app（終端機、編輯器、瀏覽器、文件閱讀器）、鍵盤操作為主、多螢幕、工作需要頻繁切換上下文（多個專案、不同任務區）。&lt;/p>
&lt;p>&lt;strong>低回報情境&lt;/strong>：大量使用需要特定比例或自由拖拉的 app（設計工具、影片剪輯、簡報製作）、很少同時開多個視窗、已經習慣且滿意目前的工作流、不想花時間學新鍵位。&lt;/p>
&lt;p>&lt;strong>折衷方案&lt;/strong>：所有平鋪式工具都支援 per-app 的浮動例外。不適合平鋪的 app（設定面板、計算機、某些對話框）設成浮動，其餘維持平鋪。這不是全有全無的選擇。&lt;/p>
&lt;p>一個常見的踩坑模式是：看到 Hyprland 的截圖很漂亮，衝動裝了，發現日常有一半 app 不適合平鋪、鍵位記不住、每次更新都要修配置，兩週後放棄。務實的進入路徑是先在目前的系統上試手動貼齊工具（macOS 的 Rectangle 或 AeroSpace），確認自己真的享受鍵盤操作視窗的節奏，再往 Linux tiling WM 推進。或者用 VM 跑 Hyprland 體驗看看——體驗打折（VM 沒有 GPU 加速，動畫會卡），但能確認自己是否喜歡這種操作邏輯，再決定要不要花時間在實體機上搭建。&lt;/p></description><content:encoded><![CDATA[<p>桌面視窗管理分成兩種基本模式。</p>
<p><strong>浮動式（floating）</strong> 是多數人熟悉的模式。視窗可以重疊、可以任意拖拉調整大小、可以最小化藏起來。macOS、Windows、GNOME、KDE 預設都是浮動式。操作直覺是「每個視窗是一張紙，自己決定放哪裡」。</p>
<p><strong>平鋪式（tiling）</strong> 的規則不同：視窗自動排列填滿螢幕、不重疊，由 WM 的規則決定版面怎麼切割。開一個新視窗時，WM 自動把現有空間分一半給它；關掉一個視窗時，相鄰視窗自動擴展填補。操作直覺是「螢幕是一塊蛋糕，WM 負責切」。</p>
<p>多數平鋪式 WM 支援<strong>混合模式</strong>：特定視窗可以設為浮動，脫離平鋪規則。設定面板、密碼輸入框、小工具這類不適合塞進格子的視窗，通常會設成浮動例外。平鋪是預設，浮動是按需啟用的例外。</p>
<h2 id="手動貼齊-vs-自動平鋪">手動貼齊 vs 自動平鋪</h2>
<p>在進入平鋪式 WM 之前，macOS 和 Windows 都提供了「手動貼齊」功能——用快捷鍵或拖拉把視窗貼到螢幕的半邊、角落、三分之一。macOS 原生的 window snapping、Windows 的 Snap Layout、以及 Rectangle 和 Magnet 這類第三方工具都屬於這個範疇。</p>
<p>手動貼齊跟自動平鋪的差距，在視窗數量少的時候幾乎感覺不到。開兩個視窗、左右各半，手動按一下快捷鍵就到位，完全夠用。</p>
<p>差距在視窗數量多的時候才出現。每開一個新視窗都要決定它放哪、按對應的快捷鍵；關掉一個視窗就留下空洞，要手動拖拉其他視窗去填——當這種版面管理的決策負擔開始分散你對工作本身的注意力時，就是自動平鋪開始有價值的時機。這個斷點因螢幕大小和工作類型而異：23 吋單螢幕上同時開終端機、編輯器、瀏覽器、文件，版面很快就不夠分；雙螢幕寬螢幕上同樣的視窗數量可能還很從容。</p>
<p>自動平鋪在這個情境下的優勢有三層。</p>
<p>第一層是<strong>自動回填</strong>。開視窗、關視窗，WM 自動重新分配空間，版面永遠是滿的、整齊的。你不用做任何版面決策。</p>
<p>第二層是<strong>操作對象的轉換</strong>。手動貼齊的操作對象是「某個視窗」——把 A 視窗貼到左邊、把 B 視窗貼到右上。平鋪式 WM 的操作對象是「版面結構」——把焦點往右移、把當前視窗跟隔壁交換、把這一格再水平切一半。你操作的是位置關係，不是絕對座標。</p>
<p>第三層是<strong>工作區整合</strong>。平鋪式工作流通常搭配多個工作區（workspace），每個工作區是一套獨立的平鋪佈局。「編輯器和終端機在工作區 1、瀏覽器在工作區 2、通訊軟體在工作區 4」——用快捷鍵瞬間切換整套上下文，而不是在一堆重疊視窗裡找。手動貼齊工具通常不帶工作區管理。</p>
<h2 id="適用判讀">適用判讀</h2>
<p>平鋪式視窗管理的投資報酬率取決於你的工作型態。</p>
<p><strong>高回報情境</strong>：經常同時操作多個視窗且版面管理開始分散注意力、多數是「方方正正、可平鋪」的 app（終端機、編輯器、瀏覽器、文件閱讀器）、鍵盤操作為主、多螢幕、工作需要頻繁切換上下文（多個專案、不同任務區）。</p>
<p><strong>低回報情境</strong>：大量使用需要特定比例或自由拖拉的 app（設計工具、影片剪輯、簡報製作）、很少同時開多個視窗、已經習慣且滿意目前的工作流、不想花時間學新鍵位。</p>
<p><strong>折衷方案</strong>：所有平鋪式工具都支援 per-app 的浮動例外。不適合平鋪的 app（設定面板、計算機、某些對話框）設成浮動，其餘維持平鋪。這不是全有全無的選擇。</p>
<p>一個常見的踩坑模式是：看到 Hyprland 的截圖很漂亮，衝動裝了，發現日常有一半 app 不適合平鋪、鍵位記不住、每次更新都要修配置，兩週後放棄。務實的進入路徑是先在目前的系統上試手動貼齊工具（macOS 的 Rectangle 或 AeroSpace），確認自己真的享受鍵盤操作視窗的節奏，再往 Linux tiling WM 推進。或者用 VM 跑 Hyprland 體驗看看——體驗打折（VM 沒有 GPU 加速，動畫會卡），但能確認自己是否喜歡這種操作邏輯，再決定要不要花時間在實體機上搭建。</p>
]]></content:encoded></item><item><title>macOS 視窗管理工具鏈</title><link>https://tarrragon.github.io/blog/linux/dotfile/04-window-management/macos-window-tools/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/04-window-management/macos-window-tools/</guid><description>&lt;p>macOS 的視窗系統由 WindowServer 控制，第三方工具能做的主要是「排列邏輯」——決定視窗的位置和大小。視覺效果（動畫、模糊、圓角）由系統控制，第三方工具改不了。這是跟 Linux tiling WM 最大的差異。&lt;/p>
&lt;h2 id="macos-原生-window-tilingmacos-15">macOS 原生 Window Tiling（macOS 15+）&lt;/h2>
&lt;p>macOS Sequoia（15，2024 年 9 月）內建了 window tiling 功能：鍵盤快捷鍵把視窗貼到螢幕的半邊或四分之一、拖拉到邊緣自動貼齊（edge snap）、相鄰視窗可以組成 tile group 一起調整比例。&lt;/p>
&lt;p>原生 tiling 的邊界：沒有多工作區管理、快捷鍵自訂空間有限（只能用系統偏好設定裡的固定選項）、不支援自動平鋪（仍然是手動觸發的 snap，不會在開新視窗時自動重排）。&lt;/p>
&lt;p>如果「貼到半邊 + 邊緣吸附」就足夠，原生功能免安裝即可使用。以下第三方工具解決的是原生功能做不到的事：更多排列選項（Rectangle）、自動平鋪（Amethyst）、完整的鍵盤工作流加多工作區（AeroSpace / yabai）。&lt;/p>
&lt;h2 id="rectangle">Rectangle&lt;/h2>
&lt;p>免費、開源。用快捷鍵把視窗貼到螢幕的半邊、三分之一、角落。不是自動平鋪——每個視窗都要你主動下指令。安裝後開箱即用，學習成本最低。&lt;/p>
&lt;p>適合的情境：只需要快速排版、不想花時間學新操作邏輯、偶爾分割就滿足需求。&lt;/p>
&lt;p>配置檔位置：&lt;code>~/Library/Preferences/com.knollsoft.Rectangle.plist&lt;/code>（macOS plist 格式，不太適合手動編輯，通常用 GUI 設定）。&lt;/p>
&lt;h2 id="amethyst">Amethyst&lt;/h2>
&lt;p>自動平鋪，安裝後視窗就會自動排列。提供多種 layout（tall, wide, fullscreen, column 等）可以用快捷鍵切換。設定比 Rectangle 多但比 yabai 少，是「想要自動平鋪但不想深度折騰」的選擇。&lt;/p>
&lt;p>配置檔：&lt;code>~/.amethyst.yml&lt;/code>，YAML 格式，可以版控。&lt;/p>
&lt;h2 id="aerospace">AeroSpace&lt;/h2>
&lt;p>近年最受歡迎的選擇。核心優勢是&lt;strong>不需要關閉 SIP&lt;/strong>（System Integrity Protection）——它用自己實作的虛擬工作區概念，不依賴 macOS 原生的 Spaces，因此繞過了很多系統層的限制。&lt;/p>
&lt;p>配置是純文字的 TOML 檔 &lt;code>~/.aerospace.toml&lt;/code>，改完即時生效。工作區模型靈活，多螢幕支援被普遍認為比 yabai 穩定。&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-toml" data-lang="toml">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c"># ~/.aerospace.toml 片段&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="nx">after-startup-command&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;workspace 1&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&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="p">[&lt;/span>&lt;span class="nx">gaps&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="nx">inner&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">horizontal&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="nx">inner&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">vertical&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="nx">outer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">left&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="nx">outer&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">right&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="mi">10&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="p">[&lt;/span>&lt;span class="nx">mode&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">main&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">binding&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-h&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;focus left&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-j&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;focus down&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-k&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;focus up&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-l&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;focus right&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-shift-h&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;move left&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-shift-j&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;move down&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-shift-k&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;move up&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-shift-l&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;move right&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-1&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;workspace 1&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-2&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;workspace 2&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="nx">alt-3&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s1">&amp;#39;workspace 3&amp;#39;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>配置結構直覺：gaps 控制視窗間距、binding 定義快捷鍵對應的動作。整份檔案進 dotfile repo 就能跨機器還原操作習慣。&lt;/p>
&lt;h2 id="yabai--skhd">yabai + skhd&lt;/h2>
&lt;p>功能最完整的 macOS tiling WM。yabai 負責視窗管理，skhd 負責快捷鍵綁定。支援 BSP（binary space partitioning）樹狀分割——每次開新視窗都是把現有空間二分，形成一棵樹，你可以操作樹的節點來旋轉、交換、調整比例。&lt;/p>
&lt;p>代價是部分進階功能（某些視窗操作、取消動畫）需要部分關閉 SIP。對某些人這是門檻，對另一些人不是問題。&lt;/p>
&lt;p>配置檔是 shell script：&lt;code>.yabairc&lt;/code>（yabai 設定）和 &lt;code>.skhdrc&lt;/code>（快捷鍵設定），進 dotfile repo 管理。&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"># .yabairc 片段&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">yabai -m config layout bsp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">yabai -m config window_gap &lt;span class="m">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">yabai -m config top_padding &lt;span class="m">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">yabai -m config bottom_padding &lt;span class="m">10&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"># 某些 app 不適合平鋪，設為浮動&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">yabai -m rule --add &lt;span class="nv">app&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;System Preferences&amp;#34;&lt;/span> &lt;span class="nv">manage&lt;/span>&lt;span class="o">=&lt;/span>off
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">yabai -m rule --add &lt;span class="nv">app&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Calculator&amp;#34;&lt;/span> &lt;span class="nv">manage&lt;/span>&lt;span class="o">=&lt;/span>off
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">yabai -m rule --add &lt;span class="nv">app&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Finder&amp;#34;&lt;/span> &lt;span class="nv">title&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Info&amp;#34;&lt;/span> &lt;span class="nv">manage&lt;/span>&lt;span class="o">=&lt;/span>off&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="選型判讀">選型判讀&lt;/h2>
&lt;p>選工具的判準不是「哪個最強」，而是「你願意花多少時間、想要多少控制權」。&lt;/p>
&lt;p>只需要快速排視窗、不想改工作習慣，Rectangle 足夠。想要自動平鋪但學習曲線要短，Amethyst 是進入點。想要完整的平鋪工作流、多工作區管理、純文字配置、又不想動系統安全設定，AeroSpace 是目前多數人推薦的首選。想要最大的控制權、願意處理 SIP 和更複雜的配置，yabai 給你最多彈性。&lt;/p>
&lt;p>從 Rectangle 跳到 AeroSpace 或 yabai 是一次操作思維的轉換——從「我指定每個視窗去哪」變成「我操作版面結構、WM 負責排列」。這個轉換需要一兩週的適應期，適應期內效率會暫時下降。&lt;/p></description><content:encoded><![CDATA[<p>macOS 的視窗系統由 WindowServer 控制，第三方工具能做的主要是「排列邏輯」——決定視窗的位置和大小。視覺效果（動畫、模糊、圓角）由系統控制，第三方工具改不了。這是跟 Linux tiling WM 最大的差異。</p>
<h2 id="macos-原生-window-tilingmacos-15">macOS 原生 Window Tiling（macOS 15+）</h2>
<p>macOS Sequoia（15，2024 年 9 月）內建了 window tiling 功能：鍵盤快捷鍵把視窗貼到螢幕的半邊或四分之一、拖拉到邊緣自動貼齊（edge snap）、相鄰視窗可以組成 tile group 一起調整比例。</p>
<p>原生 tiling 的邊界：沒有多工作區管理、快捷鍵自訂空間有限（只能用系統偏好設定裡的固定選項）、不支援自動平鋪（仍然是手動觸發的 snap，不會在開新視窗時自動重排）。</p>
<p>如果「貼到半邊 + 邊緣吸附」就足夠，原生功能免安裝即可使用。以下第三方工具解決的是原生功能做不到的事：更多排列選項（Rectangle）、自動平鋪（Amethyst）、完整的鍵盤工作流加多工作區（AeroSpace / yabai）。</p>
<h2 id="rectangle">Rectangle</h2>
<p>免費、開源。用快捷鍵把視窗貼到螢幕的半邊、三分之一、角落。不是自動平鋪——每個視窗都要你主動下指令。安裝後開箱即用，學習成本最低。</p>
<p>適合的情境：只需要快速排版、不想花時間學新操作邏輯、偶爾分割就滿足需求。</p>
<p>配置檔位置：<code>~/Library/Preferences/com.knollsoft.Rectangle.plist</code>（macOS plist 格式，不太適合手動編輯，通常用 GUI 設定）。</p>
<h2 id="amethyst">Amethyst</h2>
<p>自動平鋪，安裝後視窗就會自動排列。提供多種 layout（tall, wide, fullscreen, column 等）可以用快捷鍵切換。設定比 Rectangle 多但比 yabai 少，是「想要自動平鋪但不想深度折騰」的選擇。</p>
<p>配置檔：<code>~/.amethyst.yml</code>，YAML 格式，可以版控。</p>
<h2 id="aerospace">AeroSpace</h2>
<p>近年最受歡迎的選擇。核心優勢是<strong>不需要關閉 SIP</strong>（System Integrity Protection）——它用自己實作的虛擬工作區概念，不依賴 macOS 原生的 Spaces，因此繞過了很多系統層的限制。</p>
<p>配置是純文字的 TOML 檔 <code>~/.aerospace.toml</code>，改完即時生效。工作區模型靈活，多螢幕支援被普遍認為比 yabai 穩定。</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c"># ~/.aerospace.toml 片段</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="nx">after-startup-command</span> <span class="p">=</span> <span class="p">[</span><span class="s1">&#39;workspace 1&#39;</span><span class="p">]</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="p">[</span><span class="nx">gaps</span><span class="p">]</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="nx">inner</span><span class="p">.</span><span class="nx">horizontal</span> <span class="p">=</span> <span class="mi">10</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="nx">inner</span><span class="p">.</span><span class="nx">vertical</span> <span class="p">=</span> <span class="mi">10</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="nx">outer</span><span class="p">.</span><span class="nx">left</span> <span class="p">=</span> <span class="mi">10</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="nx">outer</span><span class="p">.</span><span class="nx">right</span> <span class="p">=</span> <span class="mi">10</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="p">[</span><span class="nx">mode</span><span class="p">.</span><span class="nx">main</span><span class="p">.</span><span class="nx">binding</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="nx">alt-h</span> <span class="p">=</span> <span class="s1">&#39;focus left&#39;</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="nx">alt-j</span> <span class="p">=</span> <span class="s1">&#39;focus down&#39;</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="nx">alt-k</span> <span class="p">=</span> <span class="s1">&#39;focus up&#39;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="nx">alt-l</span> <span class="p">=</span> <span class="s1">&#39;focus right&#39;</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="nx">alt-shift-h</span> <span class="p">=</span> <span class="s1">&#39;move left&#39;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="nx">alt-shift-j</span> <span class="p">=</span> <span class="s1">&#39;move down&#39;</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="nx">alt-shift-k</span> <span class="p">=</span> <span class="s1">&#39;move up&#39;</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="nx">alt-shift-l</span> <span class="p">=</span> <span class="s1">&#39;move right&#39;</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl"><span class="nx">alt-1</span> <span class="p">=</span> <span class="s1">&#39;workspace 1&#39;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl"><span class="nx">alt-2</span> <span class="p">=</span> <span class="s1">&#39;workspace 2&#39;</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="nx">alt-3</span> <span class="p">=</span> <span class="s1">&#39;workspace 3&#39;</span></span></span></code></pre></div><p>配置結構直覺：gaps 控制視窗間距、binding 定義快捷鍵對應的動作。整份檔案進 dotfile repo 就能跨機器還原操作習慣。</p>
<h2 id="yabai--skhd">yabai + skhd</h2>
<p>功能最完整的 macOS tiling WM。yabai 負責視窗管理，skhd 負責快捷鍵綁定。支援 BSP（binary space partitioning）樹狀分割——每次開新視窗都是把現有空間二分，形成一棵樹，你可以操作樹的節點來旋轉、交換、調整比例。</p>
<p>代價是部分進階功能（某些視窗操作、取消動畫）需要部分關閉 SIP。對某些人這是門檻，對另一些人不是問題。</p>
<p>配置檔是 shell script：<code>.yabairc</code>（yabai 設定）和 <code>.skhdrc</code>（快捷鍵設定），進 dotfile repo 管理。</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"># .yabairc 片段</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">yabai -m config layout bsp
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">yabai -m config window_gap <span class="m">10</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">yabai -m config top_padding <span class="m">10</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">yabai -m config bottom_padding <span class="m">10</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"># 某些 app 不適合平鋪，設為浮動</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">yabai -m rule --add <span class="nv">app</span><span class="o">=</span><span class="s2">&#34;System Preferences&#34;</span> <span class="nv">manage</span><span class="o">=</span>off
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">yabai -m rule --add <span class="nv">app</span><span class="o">=</span><span class="s2">&#34;Calculator&#34;</span> <span class="nv">manage</span><span class="o">=</span>off
</span></span><span class="line"><span class="ln">10</span><span class="cl">yabai -m rule --add <span class="nv">app</span><span class="o">=</span><span class="s2">&#34;Finder&#34;</span> <span class="nv">title</span><span class="o">=</span><span class="s2">&#34;Info&#34;</span> <span class="nv">manage</span><span class="o">=</span>off</span></span></code></pre></div><h2 id="選型判讀">選型判讀</h2>
<p>選工具的判準不是「哪個最強」，而是「你願意花多少時間、想要多少控制權」。</p>
<p>只需要快速排視窗、不想改工作習慣，Rectangle 足夠。想要自動平鋪但學習曲線要短，Amethyst 是進入點。想要完整的平鋪工作流、多工作區管理、純文字配置、又不想動系統安全設定，AeroSpace 是目前多數人推薦的首選。想要最大的控制權、願意處理 SIP 和更複雜的配置，yabai 給你最多彈性。</p>
<p>從 Rectangle 跳到 AeroSpace 或 yabai 是一次操作思維的轉換——從「我指定每個視窗去哪」變成「我操作版面結構、WM 負責排列」。這個轉換需要一兩週的適應期，適應期內效率會暫時下降。</p>
]]></content:encoded></item><item><title>Linux Tiling WM 生態</title><link>https://tarrragon.github.io/blog/linux/dotfile/04-window-management/linux-tiling-wm/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/04-window-management/linux-tiling-wm/</guid><description>&lt;p>Linux 桌面的視窗管理跑在**顯示協議（display protocol）**上，目前有兩套。&lt;/p>
&lt;p>&lt;strong>X11&lt;/strong>（X Window System）是用了三十多年的傳統協議。成熟、穩定、所有工具都支援。設計上的根本問題是安全性——任何 X11 應用程式都能讀取其他視窗的內容和鍵盤輸入，這是協議層的限制，不是 bug。&lt;/p>
&lt;p>&lt;strong>Wayland&lt;/strong> 是設計來取代 X11 的新協議。每個應用程式只看得到自己的視窗、效能更好、對現代硬體的支援更完整。多數主流發行版已經把 Wayland 設為預設，但部分老舊應用程式和特殊需求（某些螢幕錄製、遠端桌面工具）的支援還在追趕中，這些情境會透過 XWayland（相容層）跑 X11 應用程式。&lt;/p>
&lt;p>新的 tiling WM 主要基於 Wayland 開發，X11 上的老牌（i3, bspwm, dwm）仍然活躍但不再是未來方向。&lt;/p>
&lt;h2 id="主流-tiling-wm">主流 Tiling WM&lt;/h2>
&lt;p>&lt;strong>i3（X11）/ sway（Wayland）&lt;/strong> 是社群最大、文件最齊全、行為最可預測的選擇。i3 跑在 X11 上，sway 是它的 Wayland 移植，配置格式幾乎相同。配置檔用自己的語法，直覺的 &lt;code>key = action&lt;/code> 對應。&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"># sway/config 片段
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">set $mod Mod4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">bindsym $mod+h focus left
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">bindsym $mod+j focus down
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">bindsym $mod+k focus up
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">bindsym $mod+l focus right
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl">bindsym $mod+Shift+h move left
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">bindsym $mod+1 workspace number 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">9&lt;/span>&lt;span class="cl">bindsym $mod+2 workspace number 2&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>穩定性是 i3/sway 最大的賣點——配置寫好之後很少因為更新而壞掉。適合想要可靠的平鋪工作流、不需要華麗視覺效果的人。&lt;/p>
&lt;p>&lt;strong>Hyprland（Wayland）&lt;/strong> 吸引的是在意桌面視覺品質的平鋪使用者——看 r/unixporn 的 Hyprland 截圖就知道，流暢的視窗切換動畫、圓角、視窗模糊、漸層邊框，這些傳統 tiling WM 社群視為不必要的裝飾，Hyprland 做成內建功能並且認真打磨。配置檔改完即時生效（hot reload），迭代調教的回饋循環很短。&lt;/p>
&lt;p>這份視覺投入換來的 trade-off 是穩定性。開發節奏快意味著偶爾會有 breaking changes——某次更新後配置語法改了（2026 年 4 月的 Lua 遷移就是一例）、某個選項改名或移除。把它當主力桌面，要有「更新後可能要回來調配置」的心理準備。&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/05-hyprland-config/" data-link-title="模組五：Hyprland 配置" data-link-desc="要在 Linux 上設定 Hyprland 平鋪式桌面時回來讀">Hyprland 配置&lt;/a>會詳細講它的設定。&lt;/p>
&lt;p>&lt;strong>bspwm（X11）&lt;/strong> 是純粹的 BSP 樹狀分割。它只做一件事：管理視窗的樹狀結構。所有操作透過 &lt;code>bspc&lt;/code> 命令列工具驅動，快捷鍵綁定交給 sxhkd（一個獨立的快捷鍵 daemon）。UNIX 哲學——每個工具只做一件事，組合起來用。&lt;/p>
&lt;p>&lt;strong>dwm（X11）&lt;/strong> 極簡到配置要改 C 原始碼然後重新編譯。不是給「想要方便配置」的人用的，而是給「想要完全理解自己桌面每一行程式碼」的人用的。&lt;/p>
&lt;h2 id="拼裝式桌面的代價">拼裝式桌面的代價&lt;/h2>
&lt;p>Linux tiling WM 的桌面是你自己拼出來的：compositor（Hyprland/sway）負責視窗管理、狀態列（waybar）負責頂部資訊條、啟動器（rofi/wofi）負責 app 搜尋啟動、通知（mako/dunst）負責通知彈窗、鎖屏另外裝。每一塊是不同專案、不同作者。&lt;/p>
&lt;p>好處是每一塊都可以換。壞處是當某件事壞了，你要自己判斷是哪一層的問題。藍牙選單不能點？可能是狀態列的 module 設定錯、可能是 blueman 沒跑、可能是 D-Bus session 有問題。完整桌面環境（KDE/GNOME）幫你整合測試過了，拼裝式桌面沒有這層保障。&lt;/p>
&lt;h2 id="多螢幕的處理">多螢幕的處理&lt;/h2>
&lt;p>多螢幕是自動平鋪比較能展現價值的場景。每個螢幕是獨立的平鋪區域，視窗在哪個螢幕就在那個螢幕的範圍內平鋪。&lt;/p>
&lt;p>快捷鍵跨螢幕操作是標配功能：把焦點跳到另一個螢幕、把當前視窗丟到另一個螢幕（丟過去後自動融入那邊的平鋪佈局）。三螢幕時這個便利性比單螢幕更明顯——純滑鼠拖視窗跨螢幕需要的移動距離很長。&lt;/p>
&lt;p>工作區跟螢幕的綁定方式是各工具差異最大的地方。&lt;/p>
&lt;p>macOS 的 Spaces 是綁定螢幕的——每個螢幕有自己獨立的一組 Spaces。yabai 沿用這個行為，切換工作區時只影響當前螢幕。AeroSpace 用自己的虛擬工作區繞過 macOS 原生 Spaces 的限制，多螢幕操作被普遍認為更穩定、更直覺。&lt;/p>
&lt;p>Hyprland 的 workspace 可以動態指派到不同螢幕——workspace 3 現在在螢幕 A，你可以把它移到螢幕 B。這種模型彈性最大，但也需要清楚的心智模型來管理「哪個 workspace 在哪」。&lt;/p>
&lt;p>熱插拔螢幕（接上、拔掉外接螢幕）是各工具的常見痛點。拔掉螢幕時，該螢幕上的視窗要搬到剩餘螢幕重新平鋪；插上螢幕時，佈局要擴展。多數工具有對應設定（記住螢幕配置、自動還原佈局），但體驗不見得完美，偶爾需要手動整理。&lt;/p>
&lt;h2 id="dotfile-中的視窗管理配置">Dotfile 中的視窗管理配置&lt;/h2>
&lt;p>視窗管理是 dotfile 管理裡「桌面層」的核心。WM 配置檔決定了整個桌面的操作邏輯——快捷鍵怎麼綁、視窗間距多大、哪些 app 要浮動、工作區怎麼分配。&lt;/p>
&lt;p>macOS 工具的配置檔通常是一個檔案：AeroSpace 的 &lt;code>~/.aerospace.toml&lt;/code>、yabai 的 &lt;code>~/.yabairc&lt;/code> + &lt;code>~/.skhdrc&lt;/code>、Amethyst 的 &lt;code>~/.amethyst.yml&lt;/code>。把這些檔案放進 dotfile repo，換 Mac 時就能還原整套視窗管理行為。&lt;/p>
&lt;p>Linux tiling WM 的配置在 &lt;code>~/.config/&lt;/code> 下，通常是一個資料夾：Hyprland 的 &lt;code>~/.config/hypr/&lt;/code>、sway 的 &lt;code>~/.config/sway/&lt;/code>、i3 的 &lt;code>~/.config/i3/&lt;/code>。除了 WM 本身，狀態列（waybar 的 &lt;code>~/.config/waybar/&lt;/code>）、啟動器（rofi 的 &lt;code>~/.config/rofi/&lt;/code>）、通知（mako 的 &lt;code>~/.config/mako/&lt;/code>）等周邊元件的配置也各自有檔案。一套完整的 Linux 平鋪桌面，dotfile repo 裡可能會有十幾個配置目錄——這也是為什麼 Linux 桌面客製化社群那麼依賴 dotfile 管理工具（見&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/01-dotfile-management/" data-link-title="模組一：管理工具與目錄結構" data-link-desc="要把散落在家目錄的配置檔集中版控時，選 bare repo、stow 還是 chezmoi、目錄該怎麼組織">管理工具與目錄結構&lt;/a>）。&lt;/p></description><content:encoded><![CDATA[<p>Linux 桌面的視窗管理跑在**顯示協議（display protocol）**上，目前有兩套。</p>
<p><strong>X11</strong>（X Window System）是用了三十多年的傳統協議。成熟、穩定、所有工具都支援。設計上的根本問題是安全性——任何 X11 應用程式都能讀取其他視窗的內容和鍵盤輸入，這是協議層的限制，不是 bug。</p>
<p><strong>Wayland</strong> 是設計來取代 X11 的新協議。每個應用程式只看得到自己的視窗、效能更好、對現代硬體的支援更完整。多數主流發行版已經把 Wayland 設為預設，但部分老舊應用程式和特殊需求（某些螢幕錄製、遠端桌面工具）的支援還在追趕中，這些情境會透過 XWayland（相容層）跑 X11 應用程式。</p>
<p>新的 tiling WM 主要基於 Wayland 開發，X11 上的老牌（i3, bspwm, dwm）仍然活躍但不再是未來方向。</p>
<h2 id="主流-tiling-wm">主流 Tiling WM</h2>
<p><strong>i3（X11）/ sway（Wayland）</strong> 是社群最大、文件最齊全、行為最可預測的選擇。i3 跑在 X11 上，sway 是它的 Wayland 移植，配置格式幾乎相同。配置檔用自己的語法，直覺的 <code>key = action</code> 對應。</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"># sway/config 片段
</span></span><span class="line"><span class="ln">2</span><span class="cl">set $mod Mod4
</span></span><span class="line"><span class="ln">3</span><span class="cl">bindsym $mod+h focus left
</span></span><span class="line"><span class="ln">4</span><span class="cl">bindsym $mod+j focus down
</span></span><span class="line"><span class="ln">5</span><span class="cl">bindsym $mod+k focus up
</span></span><span class="line"><span class="ln">6</span><span class="cl">bindsym $mod+l focus right
</span></span><span class="line"><span class="ln">7</span><span class="cl">bindsym $mod+Shift+h move left
</span></span><span class="line"><span class="ln">8</span><span class="cl">bindsym $mod+1 workspace number 1
</span></span><span class="line"><span class="ln">9</span><span class="cl">bindsym $mod+2 workspace number 2</span></span></code></pre></div><p>穩定性是 i3/sway 最大的賣點——配置寫好之後很少因為更新而壞掉。適合想要可靠的平鋪工作流、不需要華麗視覺效果的人。</p>
<p><strong>Hyprland（Wayland）</strong> 吸引的是在意桌面視覺品質的平鋪使用者——看 r/unixporn 的 Hyprland 截圖就知道，流暢的視窗切換動畫、圓角、視窗模糊、漸層邊框，這些傳統 tiling WM 社群視為不必要的裝飾，Hyprland 做成內建功能並且認真打磨。配置檔改完即時生效（hot reload），迭代調教的回饋循環很短。</p>
<p>這份視覺投入換來的 trade-off 是穩定性。開發節奏快意味著偶爾會有 breaking changes——某次更新後配置語法改了（2026 年 4 月的 Lua 遷移就是一例）、某個選項改名或移除。把它當主力桌面，要有「更新後可能要回來調配置」的心理準備。<a href="/blog/linux/dotfile/05-hyprland-config/" data-link-title="模組五：Hyprland 配置" data-link-desc="要在 Linux 上設定 Hyprland 平鋪式桌面時回來讀">Hyprland 配置</a>會詳細講它的設定。</p>
<p><strong>bspwm（X11）</strong> 是純粹的 BSP 樹狀分割。它只做一件事：管理視窗的樹狀結構。所有操作透過 <code>bspc</code> 命令列工具驅動，快捷鍵綁定交給 sxhkd（一個獨立的快捷鍵 daemon）。UNIX 哲學——每個工具只做一件事，組合起來用。</p>
<p><strong>dwm（X11）</strong> 極簡到配置要改 C 原始碼然後重新編譯。不是給「想要方便配置」的人用的，而是給「想要完全理解自己桌面每一行程式碼」的人用的。</p>
<h2 id="拼裝式桌面的代價">拼裝式桌面的代價</h2>
<p>Linux tiling WM 的桌面是你自己拼出來的：compositor（Hyprland/sway）負責視窗管理、狀態列（waybar）負責頂部資訊條、啟動器（rofi/wofi）負責 app 搜尋啟動、通知（mako/dunst）負責通知彈窗、鎖屏另外裝。每一塊是不同專案、不同作者。</p>
<p>好處是每一塊都可以換。壞處是當某件事壞了，你要自己判斷是哪一層的問題。藍牙選單不能點？可能是狀態列的 module 設定錯、可能是 blueman 沒跑、可能是 D-Bus session 有問題。完整桌面環境（KDE/GNOME）幫你整合測試過了，拼裝式桌面沒有這層保障。</p>
<h2 id="多螢幕的處理">多螢幕的處理</h2>
<p>多螢幕是自動平鋪比較能展現價值的場景。每個螢幕是獨立的平鋪區域，視窗在哪個螢幕就在那個螢幕的範圍內平鋪。</p>
<p>快捷鍵跨螢幕操作是標配功能：把焦點跳到另一個螢幕、把當前視窗丟到另一個螢幕（丟過去後自動融入那邊的平鋪佈局）。三螢幕時這個便利性比單螢幕更明顯——純滑鼠拖視窗跨螢幕需要的移動距離很長。</p>
<p>工作區跟螢幕的綁定方式是各工具差異最大的地方。</p>
<p>macOS 的 Spaces 是綁定螢幕的——每個螢幕有自己獨立的一組 Spaces。yabai 沿用這個行為，切換工作區時只影響當前螢幕。AeroSpace 用自己的虛擬工作區繞過 macOS 原生 Spaces 的限制，多螢幕操作被普遍認為更穩定、更直覺。</p>
<p>Hyprland 的 workspace 可以動態指派到不同螢幕——workspace 3 現在在螢幕 A，你可以把它移到螢幕 B。這種模型彈性最大，但也需要清楚的心智模型來管理「哪個 workspace 在哪」。</p>
<p>熱插拔螢幕（接上、拔掉外接螢幕）是各工具的常見痛點。拔掉螢幕時，該螢幕上的視窗要搬到剩餘螢幕重新平鋪；插上螢幕時，佈局要擴展。多數工具有對應設定（記住螢幕配置、自動還原佈局），但體驗不見得完美，偶爾需要手動整理。</p>
<h2 id="dotfile-中的視窗管理配置">Dotfile 中的視窗管理配置</h2>
<p>視窗管理是 dotfile 管理裡「桌面層」的核心。WM 配置檔決定了整個桌面的操作邏輯——快捷鍵怎麼綁、視窗間距多大、哪些 app 要浮動、工作區怎麼分配。</p>
<p>macOS 工具的配置檔通常是一個檔案：AeroSpace 的 <code>~/.aerospace.toml</code>、yabai 的 <code>~/.yabairc</code> + <code>~/.skhdrc</code>、Amethyst 的 <code>~/.amethyst.yml</code>。把這些檔案放進 dotfile repo，換 Mac 時就能還原整套視窗管理行為。</p>
<p>Linux tiling WM 的配置在 <code>~/.config/</code> 下，通常是一個資料夾：Hyprland 的 <code>~/.config/hypr/</code>、sway 的 <code>~/.config/sway/</code>、i3 的 <code>~/.config/i3/</code>。除了 WM 本身，狀態列（waybar 的 <code>~/.config/waybar/</code>）、啟動器（rofi 的 <code>~/.config/rofi/</code>）、通知（mako 的 <code>~/.config/mako/</code>）等周邊元件的配置也各自有檔案。一套完整的 Linux 平鋪桌面，dotfile repo 裡可能會有十幾個配置目錄——這也是為什麼 Linux 桌面客製化社群那麼依賴 dotfile 管理工具（見<a href="/blog/linux/dotfile/01-dotfile-management/" data-link-title="模組一：管理工具與目錄結構" data-link-desc="要把散落在家目錄的配置檔集中版控時，選 bare repo、stow 還是 chezmoi、目錄該怎麼組織">管理工具與目錄結構</a>）。</p>
<p>跟螢幕硬體綁定的設定（螢幕解析度、縮放比、螢幕排列順序）通常也寫在 WM 配置裡。這部分在跨機器搬移 dotfile 時需要調整——同一份 Hyprland 配置裡的 <code>monitor</code> 設定，在筆電上是一個螢幕、在桌機上可能是三個。常見做法是把硬體相關設定拆到單獨檔案（如 <code>monitors.lua</code>），主配置用 <code>require</code> 引入，這樣跨機器時只需要替換這一個檔案。<a href="/blog/linux/dotfile/08-sync-bootstrap/" data-link-title="模組八：同步、Bootstrap 與環境重建" data-link-desc="換機器或重灌時怎麼還原工作環境 — bootstrap script 設計、套件清單管理、跨機器同步策略、secret 排除，以及 VM 快照和 dotfile 重建兩種思路的場景判讀">同步與環境重建</a>會講跨機器搬移時怎麼處理這類硬體差異。</p>
]]></content:encoded></item><item><title>模組四：視窗管理與平鋪式工作流</title><link>https://tarrragon.github.io/blog/linux/dotfile/04-window-management/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/04-window-management/</guid><description>&lt;p>視窗管理器（window manager, WM）負責決定螢幕上的視窗怎麼排列、怎麼切換、怎麼調整大小。每個桌面環境都有一個 WM，差別在於它是讓你用滑鼠自己拖，還是按規則自動幫你排好。&lt;/p>
&lt;h2 id="章節文章">章節文章&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>文章&lt;/th>
 &lt;th>主題&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/04-window-management/floating-vs-tiling/" data-link-title="浮動式 vs 平鋪式視窗管理" data-link-desc="在手動貼齊（Rectangle）跟自動平鋪之間猶豫、或想評估自己的工作型態適不適合平鋪式 WM 時回來讀">浮動式 vs 平鋪式&lt;/a>&lt;/td>
 &lt;td>兩種視窗管理模式的差異、手動貼齊 vs 自動平鋪的三層差距、適用判讀&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/04-window-management/macos-window-tools/" data-link-title="macOS 視窗管理工具鏈" data-link-desc="macOS 上想用鍵盤管理視窗、不確定該用哪個工具時回來讀">macOS 視窗管理工具鏈&lt;/a>&lt;/td>
 &lt;td>Rectangle / Amethyst / AeroSpace / yabai 選型判讀與配置範例&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/04-window-management/linux-tiling-wm/" data-link-title="Linux Tiling WM 生態" data-link-desc="要在 Linux 上選 tiling WM（i3/sway/Hyprland/bspwm）或理解 Wayland vs X11 差異時回來讀">Linux Tiling WM 生態&lt;/a>&lt;/td>
 &lt;td>主流 tiling WM 比較（i3/sway/Hyprland/bspwm/dwm）、多螢幕處理、dotfile 中的角色&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/04-window-management/wayland-explainer/" data-link-title="Wayland 顯示協議：為什麼 Hyprland 不跑在 X11 上" data-link-desc="想理解 Hyprland 底層的圖形架構、Wayland 跟 X11 的差異、XWayland 相容層、以及 2026 年 Wayland 已經是主流這件事時回來讀">Wayland 顯示協議&lt;/a>&lt;/td>
 &lt;td>Wayland 架構、跟 X11 的差異、XWayland 相容層、2026 採用現況、為什麼 tiling WM 選 Wayland&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>macOS 讀者的主線是前兩篇（浮動 vs 平鋪、macOS 工具鏈）。Linux Tiling WM 生態和 Wayland 顯示協議是想在 VM 或實機上體驗 Linux 桌面的選讀——macOS 上用 AeroSpace 或 yabai 的讀者可以直接跳到&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/08-sync-bootstrap/" data-link-title="模組八：同步、Bootstrap 與環境重建" data-link-desc="換機器或重灌時怎麼還原工作環境 — bootstrap script 設計、套件清單管理、跨機器同步策略、secret 排除，以及 VM 快照和 dotfile 重建兩種思路的場景判讀">同步與 Bootstrap&lt;/a>。&lt;/p>
&lt;h2 id="跨分類引用">跨分類引用&lt;/h2>
&lt;ul>
&lt;li>→ &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/05-hyprland-config/" data-link-title="模組五：Hyprland 配置" data-link-desc="要在 Linux 上設定 Hyprland 平鋪式桌面時回來讀">模組五：Hyprland 配置&lt;/a>：Hyprland 的完整配置實務&lt;/li>
&lt;li>→ &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">模組六：桌面 Rice 設計&lt;/a>：compositor 之上的狀態列、啟動器、通知、配色系統&lt;/li>
&lt;li>→ &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/01-dotfile-management/" data-link-title="模組一：管理工具與目錄結構" data-link-desc="要把散落在家目錄的配置檔集中版控時，選 bare repo、stow 還是 chezmoi、目錄該怎麼組織">模組一：管理工具與目錄結構&lt;/a>：WM 配置怎麼進 dotfile repo&lt;/li>
&lt;li>→ &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/08-sync-bootstrap/" data-link-title="模組八：同步、Bootstrap 與環境重建" data-link-desc="換機器或重灌時怎麼還原工作環境 — bootstrap script 設計、套件清單管理、跨機器同步策略、secret 排除，以及 VM 快照和 dotfile 重建兩種思路的場景判讀">模組八：同步、Bootstrap 與環境重建&lt;/a>：跨機器搬移時硬體相關設定怎麼處理&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>視窗管理器（window manager, WM）負責決定螢幕上的視窗怎麼排列、怎麼切換、怎麼調整大小。每個桌面環境都有一個 WM，差別在於它是讓你用滑鼠自己拖，還是按規則自動幫你排好。</p>
<h2 id="章節文章">章節文章</h2>
<table>
  <thead>
      <tr>
          <th>文章</th>
          <th>主題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/linux/dotfile/04-window-management/floating-vs-tiling/" data-link-title="浮動式 vs 平鋪式視窗管理" data-link-desc="在手動貼齊（Rectangle）跟自動平鋪之間猶豫、或想評估自己的工作型態適不適合平鋪式 WM 時回來讀">浮動式 vs 平鋪式</a></td>
          <td>兩種視窗管理模式的差異、手動貼齊 vs 自動平鋪的三層差距、適用判讀</td>
      </tr>
      <tr>
          <td><a href="/blog/linux/dotfile/04-window-management/macos-window-tools/" data-link-title="macOS 視窗管理工具鏈" data-link-desc="macOS 上想用鍵盤管理視窗、不確定該用哪個工具時回來讀">macOS 視窗管理工具鏈</a></td>
          <td>Rectangle / Amethyst / AeroSpace / yabai 選型判讀與配置範例</td>
      </tr>
      <tr>
          <td><a href="/blog/linux/dotfile/04-window-management/linux-tiling-wm/" data-link-title="Linux Tiling WM 生態" data-link-desc="要在 Linux 上選 tiling WM（i3/sway/Hyprland/bspwm）或理解 Wayland vs X11 差異時回來讀">Linux Tiling WM 生態</a></td>
          <td>主流 tiling WM 比較（i3/sway/Hyprland/bspwm/dwm）、多螢幕處理、dotfile 中的角色</td>
      </tr>
      <tr>
          <td><a href="/blog/linux/dotfile/04-window-management/wayland-explainer/" data-link-title="Wayland 顯示協議：為什麼 Hyprland 不跑在 X11 上" data-link-desc="想理解 Hyprland 底層的圖形架構、Wayland 跟 X11 的差異、XWayland 相容層、以及 2026 年 Wayland 已經是主流這件事時回來讀">Wayland 顯示協議</a></td>
          <td>Wayland 架構、跟 X11 的差異、XWayland 相容層、2026 採用現況、為什麼 tiling WM 選 Wayland</td>
      </tr>
  </tbody>
</table>
<p>macOS 讀者的主線是前兩篇（浮動 vs 平鋪、macOS 工具鏈）。Linux Tiling WM 生態和 Wayland 顯示協議是想在 VM 或實機上體驗 Linux 桌面的選讀——macOS 上用 AeroSpace 或 yabai 的讀者可以直接跳到<a href="/blog/linux/dotfile/08-sync-bootstrap/" data-link-title="模組八：同步、Bootstrap 與環境重建" data-link-desc="換機器或重灌時怎麼還原工作環境 — bootstrap script 設計、套件清單管理、跨機器同步策略、secret 排除，以及 VM 快照和 dotfile 重建兩種思路的場景判讀">同步與 Bootstrap</a>。</p>
<h2 id="跨分類引用">跨分類引用</h2>
<ul>
<li>→ <a href="/blog/linux/dotfile/05-hyprland-config/" data-link-title="模組五：Hyprland 配置" data-link-desc="要在 Linux 上設定 Hyprland 平鋪式桌面時回來讀">模組五：Hyprland 配置</a>：Hyprland 的完整配置實務</li>
<li>→ <a href="/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">模組六：桌面 Rice 設計</a>：compositor 之上的狀態列、啟動器、通知、配色系統</li>
<li>→ <a href="/blog/linux/dotfile/01-dotfile-management/" data-link-title="模組一：管理工具與目錄結構" data-link-desc="要把散落在家目錄的配置檔集中版控時，選 bare repo、stow 還是 chezmoi、目錄該怎麼組織">模組一：管理工具與目錄結構</a>：WM 配置怎麼進 dotfile repo</li>
<li>→ <a href="/blog/linux/dotfile/08-sync-bootstrap/" data-link-title="模組八：同步、Bootstrap 與環境重建" data-link-desc="換機器或重灌時怎麼還原工作環境 — bootstrap script 設計、套件清單管理、跨機器同步策略、secret 排除，以及 VM 快照和 dotfile 重建兩種思路的場景判讀">模組八：同步、Bootstrap 與環境重建</a>：跨機器搬移時硬體相關設定怎麼處理</li>
</ul>
]]></content:encoded></item></channel></rss>