<?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>Qml on Tarragon</title><link>https://tarrragon.github.io/blog/tags/qml/</link><description>Recent content in Qml on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 03 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/qml/index.xml" rel="self" type="application/rss+xml"/><item><title>Quickshell（QML 桌面 shell runtime）</title><link>https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/quickshell/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/quickshell/</guid><description>&lt;p>Quickshell 是建在 Qt6/QML 上的桌面 shell runtime：一個在 Wayland &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/compositor/" data-link-title="Compositor（合成器）" data-link-desc="教材反覆出現 compositor / 合成器、想確認它到底負責什麼、跟 window manager 和桌面環境差在哪時讀 — Wayland 下把畫面合成與視窗管理合一的核心程式">compositor&lt;/a> 之上渲染桌面 UI 元件（狀態列、啟動器、通知、鎖屏）的執行框架。它自己不是一套桌面——它提供 QML 執行環境跟一組系統整合 API（Hyprland IPC、視窗預覽、auto-reload），桌面長什麼樣由使用者（或像 Caelestia 這樣的專案）用 QML 寫出來。&lt;/p>
&lt;p>跟 Caelestia 的關係是「runtime 與成品」：&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/06-rice-design/caelestia-overview/" data-link-title="Caelestia 總覽：預組裝的 Hyprland 桌面 Shell" data-link-desc="考慮用 Caelestia 取代手動拼裝 waybar&amp;#43;wofi&amp;#43;mako、或評估預組裝桌面 shell 的 trade-off 時回來讀">Caelestia&lt;/a> 是一套用 Quickshell 寫成的完整桌面 shell（QML 元件 + 配置 + CLI），Quickshell 是跑它的引擎。這個分工解釋了兩件教材裡的實務約束：其一，Caelestia 要求 &lt;code>quickshell-git&lt;/code>（&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/aur/" data-link-title="AUR（Arch User Repository）" data-link-desc="教材裡叫你 paru -S 某個套件、或說某工具「官方 repo 沒有、要走 AUR」、想搞懂 AUR 是什麼、跟官方 repo 差在哪、build-from-source 的代價時讀">AUR&lt;/a> 的開發版套件）——穩定版缺它需要的 API，裝穩定版 shell 起不來；其二，Quickshell 目前只有 Arch 生態打包，桌面層清單因此是平台專屬的維護對象（見&lt;a href="https://tarrragon.github.io/blog/linux/install/platform-divergence-map/" data-link-title="平台與發行版差異的判讀地圖" data-link-desc="跨 macOS / Linux 或跨發行版寫 bootstrap、某個 app 在 ARM/aarch64 裝不起來、或除錯時不確定該用哪個工具與套件名時回來讀">平台差異地圖&lt;/a>）。&lt;/p>
&lt;p>它的資源足跡是「整合式 shell vs 手動拼裝」選型的主要成本項。&lt;code>quickshell&lt;/code> 套件本身約 213 MB，Qt6 函式庫（&lt;code>qt6-declarative&lt;/code>、&lt;code>qt6-base&lt;/code>）還是額外相依；對照手動拼裝的 waybar + wofi + mako 合計不到 5 MB。這筆成本買到的是單一 runtime 內風格一致、能共享狀態與動畫的整套 UI——取捨的完整推導見&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/06-rice-design/integrated-shell-vs-manual-assembly/" data-link-title="整合式 Shell vs 手動拼裝：實測足跡、失敗半徑、配色一致性與選型判準" data-link-desc="在整合式桌面 shell（如 Caelestia）與手動拼裝 waybar&amp;#43;wofi&amp;#43;mako 之間選型、需要實測的資源足跡、失敗半徑與配色一致性數據來判斷時回來讀">整合式 shell 與手動拼裝的選擇&lt;/a>。&lt;/p>
&lt;p>除錯時它有兩個判讀陷阱，都源自「一個 runtime 畫整個桌面」的架構：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>行程名是 &lt;code>qs&lt;/code> 不是 &lt;code>quickshell&lt;/code>&lt;/strong>：可執行檔叫 &lt;code>quickshell&lt;/code>，但透過 &lt;code>/usr/bin/qs&lt;/code> 這個 symlink 啟動時行程表裡的 comm 是 &lt;code>qs&lt;/code>——&lt;code>pgrep quickshell&lt;/code> 跟 &lt;code>pgrep caelestia&lt;/code> 都落空，容易誤判成掛了。判程式活著的通用紀律見&lt;a href="https://tarrragon.github.io/blog/linux/debug/process-service-state-diagnosis/" data-link-title="程序、服務與狀態怎麼判" data-link-desc="要判斷一個程式活著沒、某個系統服務現在由誰提供、桌面 session 有沒有被鎖、或終端機多工器的 session 還在不在時，用對的權威來源而不是靠畫面或猜的名字">程序、服務與狀態怎麼判&lt;/a>。&lt;/li>
&lt;li>&lt;strong>畫得出來不等於還活著&lt;/strong>：QML scene 裡某個物件初始化失敗變 null 時，進程還在、bar 還停在最後一幀，但互動接線已死。這類「進程活著、內部子系統死了」的故障與復原見&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/07-desktop-maintenance/common-failures-recovery/" data-link-title="常見故障場景與恢復操作" data-link-desc="Hyprland 黑屏、waybar 消失、畫面凍結、記憶體爆掉或 config 寫錯導致進不了桌面時，按症狀查恢復操作">常見故障場景與恢復操作&lt;/a>。&lt;/li>
&lt;/ul>
&lt;p>同源架構也放大了故障的連帶範圍：Caelestia 的鎖屏由 Quickshell 主程式畫，主程式死掉時 compositor 依 ext-session-lock 維持鎖定進入失效保護——狀態列、通知、鎖屏一起消失，復原路徑見 &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/session-lock/" data-link-title="Wayland Session Lock（鎖屏安全狀態）" data-link-desc="hyprlock / swaylock 畫面卡住、pkill 後進不了桌面、或要在 VM / 自動化環境測試鎖屏時回來讀">Session Lock&lt;/a>。&lt;/p>
&lt;p>相關概念：&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/compositor/" data-link-title="Compositor（合成器）" data-link-desc="教材反覆出現 compositor / 合成器、想確認它到底負責什麼、跟 window manager 和桌面環境差在哪時讀 — Wayland 下把畫面合成與視窗管理合一的核心程式">Compositor&lt;/a>（Quickshell 在其上渲染、由它持有畫面）、&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/session-lock/" data-link-title="Wayland Session Lock（鎖屏安全狀態）" data-link-desc="hyprlock / swaylock 畫面卡住、pkill 後進不了桌面、或要在 VM / 自動化環境測試鎖屏時回來讀">Session Lock&lt;/a>（Quickshell 持鎖死掉時的失效保護）、&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/aur/" data-link-title="AUR（Arch User Repository）" data-link-desc="教材裡叫你 paru -S 某個套件、或說某工具「官方 repo 沒有、要走 AUR」、想搞懂 AUR 是什麼、跟官方 repo 差在哪、build-from-source 的代價時讀">AUR&lt;/a>（&lt;code>quickshell-git&lt;/code> 的來源與 &lt;code>-git&lt;/code> 依賴衝突）、&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/rice/" data-link-title="Rice（桌面視覺客製化）" data-link-desc="Linux 桌面文章裡看到 rice / ricing / ricer 不確定意思時回來讀">Rice&lt;/a>（它服務的桌面客製文化）。&lt;/p></description><content:encoded><![CDATA[<p>Quickshell 是建在 Qt6/QML 上的桌面 shell runtime：一個在 Wayland <a href="/blog/linux/dotfile/knowledge-cards/compositor/" data-link-title="Compositor（合成器）" data-link-desc="教材反覆出現 compositor / 合成器、想確認它到底負責什麼、跟 window manager 和桌面環境差在哪時讀 — Wayland 下把畫面合成與視窗管理合一的核心程式">compositor</a> 之上渲染桌面 UI 元件（狀態列、啟動器、通知、鎖屏）的執行框架。它自己不是一套桌面——它提供 QML 執行環境跟一組系統整合 API（Hyprland IPC、視窗預覽、auto-reload），桌面長什麼樣由使用者（或像 Caelestia 這樣的專案）用 QML 寫出來。</p>
<p>跟 Caelestia 的關係是「runtime 與成品」：<a href="/blog/linux/dotfile/06-rice-design/caelestia-overview/" data-link-title="Caelestia 總覽：預組裝的 Hyprland 桌面 Shell" data-link-desc="考慮用 Caelestia 取代手動拼裝 waybar&#43;wofi&#43;mako、或評估預組裝桌面 shell 的 trade-off 時回來讀">Caelestia</a> 是一套用 Quickshell 寫成的完整桌面 shell（QML 元件 + 配置 + CLI），Quickshell 是跑它的引擎。這個分工解釋了兩件教材裡的實務約束：其一，Caelestia 要求 <code>quickshell-git</code>（<a href="/blog/linux/dotfile/knowledge-cards/aur/" data-link-title="AUR（Arch User Repository）" data-link-desc="教材裡叫你 paru -S 某個套件、或說某工具「官方 repo 沒有、要走 AUR」、想搞懂 AUR 是什麼、跟官方 repo 差在哪、build-from-source 的代價時讀">AUR</a> 的開發版套件）——穩定版缺它需要的 API，裝穩定版 shell 起不來；其二，Quickshell 目前只有 Arch 生態打包，桌面層清單因此是平台專屬的維護對象（見<a href="/blog/linux/install/platform-divergence-map/" data-link-title="平台與發行版差異的判讀地圖" data-link-desc="跨 macOS / Linux 或跨發行版寫 bootstrap、某個 app 在 ARM/aarch64 裝不起來、或除錯時不確定該用哪個工具與套件名時回來讀">平台差異地圖</a>）。</p>
<p>它的資源足跡是「整合式 shell vs 手動拼裝」選型的主要成本項。<code>quickshell</code> 套件本身約 213 MB，Qt6 函式庫（<code>qt6-declarative</code>、<code>qt6-base</code>）還是額外相依；對照手動拼裝的 waybar + wofi + mako 合計不到 5 MB。這筆成本買到的是單一 runtime 內風格一致、能共享狀態與動畫的整套 UI——取捨的完整推導見<a href="/blog/linux/dotfile/06-rice-design/integrated-shell-vs-manual-assembly/" data-link-title="整合式 Shell vs 手動拼裝：實測足跡、失敗半徑、配色一致性與選型判準" data-link-desc="在整合式桌面 shell（如 Caelestia）與手動拼裝 waybar&#43;wofi&#43;mako 之間選型、需要實測的資源足跡、失敗半徑與配色一致性數據來判斷時回來讀">整合式 shell 與手動拼裝的選擇</a>。</p>
<p>除錯時它有兩個判讀陷阱，都源自「一個 runtime 畫整個桌面」的架構：</p>
<ul>
<li><strong>行程名是 <code>qs</code> 不是 <code>quickshell</code></strong>：可執行檔叫 <code>quickshell</code>，但透過 <code>/usr/bin/qs</code> 這個 symlink 啟動時行程表裡的 comm 是 <code>qs</code>——<code>pgrep quickshell</code> 跟 <code>pgrep caelestia</code> 都落空，容易誤判成掛了。判程式活著的通用紀律見<a href="/blog/linux/debug/process-service-state-diagnosis/" data-link-title="程序、服務與狀態怎麼判" data-link-desc="要判斷一個程式活著沒、某個系統服務現在由誰提供、桌面 session 有沒有被鎖、或終端機多工器的 session 還在不在時，用對的權威來源而不是靠畫面或猜的名字">程序、服務與狀態怎麼判</a>。</li>
<li><strong>畫得出來不等於還活著</strong>：QML scene 裡某個物件初始化失敗變 null 時，進程還在、bar 還停在最後一幀，但互動接線已死。這類「進程活著、內部子系統死了」的故障與復原見<a href="/blog/linux/dotfile/07-desktop-maintenance/common-failures-recovery/" data-link-title="常見故障場景與恢復操作" data-link-desc="Hyprland 黑屏、waybar 消失、畫面凍結、記憶體爆掉或 config 寫錯導致進不了桌面時，按症狀查恢復操作">常見故障場景與恢復操作</a>。</li>
</ul>
<p>同源架構也放大了故障的連帶範圍：Caelestia 的鎖屏由 Quickshell 主程式畫，主程式死掉時 compositor 依 ext-session-lock 維持鎖定進入失效保護——狀態列、通知、鎖屏一起消失，復原路徑見 <a href="/blog/linux/dotfile/knowledge-cards/session-lock/" data-link-title="Wayland Session Lock（鎖屏安全狀態）" data-link-desc="hyprlock / swaylock 畫面卡住、pkill 後進不了桌面、或要在 VM / 自動化環境測試鎖屏時回來讀">Session Lock</a>。</p>
<p>相關概念：<a href="/blog/linux/dotfile/knowledge-cards/compositor/" data-link-title="Compositor（合成器）" data-link-desc="教材反覆出現 compositor / 合成器、想確認它到底負責什麼、跟 window manager 和桌面環境差在哪時讀 — Wayland 下把畫面合成與視窗管理合一的核心程式">Compositor</a>（Quickshell 在其上渲染、由它持有畫面）、<a href="/blog/linux/dotfile/knowledge-cards/session-lock/" data-link-title="Wayland Session Lock（鎖屏安全狀態）" data-link-desc="hyprlock / swaylock 畫面卡住、pkill 後進不了桌面、或要在 VM / 自動化環境測試鎖屏時回來讀">Session Lock</a>（Quickshell 持鎖死掉時的失效保護）、<a href="/blog/linux/dotfile/knowledge-cards/aur/" data-link-title="AUR（Arch User Repository）" data-link-desc="教材裡叫你 paru -S 某個套件、或說某工具「官方 repo 沒有、要走 AUR」、想搞懂 AUR 是什麼、跟官方 repo 差在哪、build-from-source 的代價時讀">AUR</a>（<code>quickshell-git</code> 的來源與 <code>-git</code> 依賴衝突）、<a href="/blog/linux/dotfile/knowledge-cards/rice/" data-link-title="Rice（桌面視覺客製化）" data-link-desc="Linux 桌面文章裡看到 rice / ricing / ricer 不確定意思時回來讀">Rice</a>（它服務的桌面客製文化）。</p>
]]></content:encoded></item></channel></rss>