--- title: Window Manager (視窗管理) - 從零開始的開源地下城 tags: Linux, Linux讀書會, Kernel, 從零開始的開源地下城, COMBO-tw description: 介紹與Linux Kernel相關基本知識 lang: zh-Hant GA: G-2QY5YFX2BV --- # Window Manager (視窗管理) ###### tags: `Linux` ## 目錄 [TOC] ## 簡介 ### 什麼是 Window Manager (視窗管理) 視窗管理員(Window manager)是在圖形化使用者介面中,控制窗口位置與外觀的軟體。 許多視窗管理員是為了桌面環境編寫,與桌面環境一同發布的,例如被 GNOME 使用的 Mutter。同時也存在不少獨立的視窗管理員,如 Openbox、Awesome 等。 大部分視窗管理員是為 X 視窗系統,針對 Linux、BSD 等作業系統設計編寫的,使用者可以通過選擇視窗管理員更改電腦的圖形化使用者介面外觀和使用方式。 ### 分類 * 視窗管理員根據管理窗口的方式不同,被分為幾個門類。 1. 合成式視窗管理員 (Compositing Window Manager) 2. 堆疊式視窗管理員 (Stacking Window Manager) 3. 平鋪式視窗管理員 (Tiling Window Manager) 4. 動態視窗管理員 (Dynamic Window Manager) * 而在此我們將舉 i3 為例子 * 平鋪式視窗管理員 (Tiling Window Management) ### i3 簡介 i3 是一個 X11 下的平鋪式視窗管理員,受到了 wmii 的啟發,使用 C 語言寫成。 i3 支援平鋪、層疊以及標籤式排布窗口,並能自動實現排列,使螢幕空間得到充分利用。 i3 使用純文字檔案組態,通過 Unix 域通訊端與基於 JSON 的 IPC 介面也能在多種程式語言下拓展其功能。 ## [Window Manager 介紹](https://docs.google.com/presentation/d/10EBNTM8tgNT7j9lK1UjkMqoonLBlvywtFmTiUqiVBCA/) ### Modern Linux Desktop * Gnome 3 * ![](https://hackmd.io/_uploads/B1F0XjZ83.png) * MATE * ![](https://hackmd.io/_uploads/SyJ14jWUn.png) * KDE Plasma 5 * ![](https://hackmd.io/_uploads/HkIyViWLh.png) * Flurry * ![](https://hackmd.io/_uploads/rJhkEsbUh.png) * No Desktop Environment:視窗在(0, 0)、不能 move, resize * ![](https://hackmd.io/_uploads/HJEgNjb83.png) * Desktop Environment (桌面環境) * 提供一個功能完備、風格統一、整合式的桌面環境 * Desktop Environment 自帶 Window Manager,Login Manager,整套 Utilities * ![](https://hackmd.io/_uploads/rJ9xVsZLh.png) * 詳細的將於下一章節在做介紹 #### Window Manager * Gnome, KDE, MATE … 都會附帶 WM * 其實就是一支程式 * 負責管理視窗的大小、位置、裝飾 #### Stacking / Floating (堆疊式 / 浮動式) * 每個視窗都可以自由拖曳、縮放 * 例:Gnome 的 mutter,KDE 的 KWin,及 Openbox, 2bwm, compiz ... * ![](https://hackmd.io/_uploads/r1lZNj-Ln.png) * ![](https://hackmd.io/_uploads/B1wWNiZL3.png) #### Tiling (平鋪式) * 不需手動拖曳、縮放視窗(視窗位置、大小會自動被安排) * 並「鋪」滿整個螢幕,視窗不會彼此遮蔽,因此每個都能被看見 * 例:(Linux) bspwm, Herbstluftwm;(MacOS ) chunkwm * ![](https://hackmd.io/_uploads/HJVzNs-Lh.png) #### Dynamic (動態式) * 結合 Stacking 與 Tiling,可於兩者之間切換 * 例:i3, dwm, awesome, Wmderland ... * ![](https://hackmd.io/_uploads/r15zNob8h.png) * ![](https://hackmd.io/_uploads/BynH4jZI3.png) #### Layout * Stacking * ![](https://hackmd.io/_uploads/Hkc8Nj-Lh.png) * Tiling * ![](https://hackmd.io/_uploads/SkJPEiWI3.png) ### X Window System 介紹 #### Intro * X Window System / X / X11 * Unix-like 作業系統上繪製 GUI 的 Protocol * XFree86, X.org 是它的 Implementation * XFree86 在 2004 年因更改 License 引發爭議,逐漸沒落並被 X.org 取代 * Client-Server 架構 * 有 GUI 就有 X Window System (平常我們看到的 GUI 程式都是 X Client) ![](https://hackmd.io/_uploads/ByxDOnWI2.png) * X Client * ![](https://hackmd.io/_uploads/r1tDu2ZL3.png) * GUI Toolkit * ![](https://hackmd.io/_uploads/ByB__2W8h.png) * Client Library 和 Display Server * ![](https://hackmd.io/_uploads/H1Hqu3-Uh.png) * 鍵盤、滑鼠 * ![](https://hackmd.io/_uploads/rypcOhZIh.png) * Window Manager * ![](https://hackmd.io/_uploads/rJOj_3WIh.png) ## 本章節練習與反思 * 為什麼我們需要 Window Manager? * 沒有 Window Manager 可以使用 Linux 嗎? ## 參考資料 * [視窗管理員 - wiki](https://zh.wikipedia.org/zh-tw/%E7%AA%97%E5%8F%A3%E7%AE%A1%E7%90%86%E5%99%A8) * [I3 (視窗管理員) - wiki](https://zh.wikipedia.org/zh-tw/I3_\(%E7%AA%97%E5%8F%A3%E7%AE%A1%E7%90%86%E5%99%A8\)) * [i3 - 官網](https://i3wm.org/) * [i3 - github](https://github.com/i3/i3) * [Crafting an X11 Window Manager](https://docs.google.com/presentation/d/10EBNTM8tgNT7j9lK1UjkMqoonLBlvywtFmTiUqiVBCA/edit#slide=id.g5435025dce_0_47) * [解放 Linux 桌面!用 Xlib + 樹狀結構打造自己的 Window Manager](https://www.youtube.com/watch?v=8QGKoYGwXho)