Qtile
From Qtile web site:
- Qtile 是一個全功能、可輕易修改(駭)的平鋪式窗口管理程序。 Qtile 簡單、輕巧、擴展性高。 撰寫自訂的窗口堆疊模式、插件以及指令是輕而易舉的事情。程序以及設定均是以 python 寫成,意味着:您可以使用語言所提供的所有能力及彈性來滿足您對窗口管理的需求。
安裝[編輯 | 編輯原始碼]
從下列軟件包中選擇一個進行安裝:
啟動[編輯 | 編輯原始碼]
Xorg[編輯 | 編輯原始碼]
要讓 qtile 作為一個 X11 的窗口管理器啟動, 可用 xinit 執行 qtile start
來啟動.
Wayland[編輯 | 編輯原始碼]
Qtile 同時也可作為一個 Wayland compositor 通過執行 qtile start -b wayland
來啟動.
關於 Qtile 的 wayland 端開發進度, 可以查看 這個討論.
默認配置設置了 Super+Enter
作為打開 終端 的快捷鍵, 終端通過 libqtile.utils.guess_terminal
決定, Super+Ctrl+q
可以退出 Qile.
配置[編輯 | 編輯原始碼]
根據配置查詢表, 如果未進行配置,Qtile 會使用默認配置文件中的設置。要自定義配置,先將默認配置文件複製到 ~/.config/qtile/config.py
:
$ mkdir -p ~/.config/qtile/ $ cp /usr/share/doc/<qtile_dir>/default_config.py ~/.config/qtile/config.py
qtile_dir
是安裝的軟件包名.- 或者, 可以選擇從 git 倉庫下載最新的默認配置文件: libqtile/resources/default_config.py.
- 更完整的配置請參考 qtile-examples 倉庫。
整個 Qtile 的配置均是以python寫成,存放於 ~/.config/qtile/config.py
。
用以下指令測試 config.py 文件是否有語法錯誤:
$ python3 -m py_compile ~/.config/qtile/config.py
若如果沒有其他輸出, 此設定文件應該便無重大問題.
組(Groups)[編輯 | 編輯原始碼]
在 Qtile, 工作區(workspaces or views) 被稱為 組(Groups)。他們可透過下列方式定義:
from libqtile.config import Group, Match ... groups = [ Group("term"), Group("irc"), Group("web", match=Match(title=["Firefox"])), #表示标题含此关键字的程序均放置于此组别中 ] ...
按鍵組合(Keys)[編輯 | 編輯原始碼]
按鍵組合均放置於 Key 這個類中.
底下是一個按鍵範例, 按下 Alt+Shift+q
來退出窗口管理器
from libqtile.config import Key from libqtile.command import lazy ... keys = [ Key( ["mod1", "shift"], "q", lazy.shutdown()) ] ...
可執行 Xmodmap 來得知系統按鍵與 modX
之間的對應關係.
聲音控制(Sound)[編輯 | 編輯原始碼]
你可以通過添加快捷鍵來方便地控制聲音以及狀態.
將用戶添加進 audio 用戶組並且使用 alsamixer
命令行界面, 該程序包含在 alsa-utils包 包內.
keys= [ ... # Sound Key([], "XF86AudioMute", lazy.spawn("amixer -q set Master toggle")), Key([], "XF86AudioLowerVolume", lazy.spawn("amixer -c 0 sset Master 1- unmute")), Key([], "XF86AudioRaiseVolume", lazy.spawn("amixer -c 0 sset Master 1+ unmute")) ]
顯示器(Screens)[編輯 | 編輯原始碼]
為你的每一台顯示器配置 Screen 類, 而 任務欄(bar) 則配置於 Screen 類中.
from libqtile.config import Screen from libqtile import bar, widget ... screens = [ Screen( # 一部显示器 bottom=bar.Bar([ # 将任务栏(bar)放置于屏幕底部 widget.GroupBox(), # 插件,用于显示组的状态 widget.WindowName() # 插件,用于显示当前窗口名称 ], 30)) ] ...
任務欄和小部件(Bars and Widgets)[編輯 | 編輯原始碼]
可以從 官方文檔 裡找到所有內置小部件的列表.
若想新增一個小部件, 只需要像上面任務欄設定那樣調用即可 (如 WindowName
插件). 例如, 要新增一個顯示電池狀態的小部件, 我們可使用 Battery
:
from libqtile.config import Screen from libqtile import bar, widget ... screens = [ Screen(top=bar.Bar([ widget.GroupBox(), # 插件,用于显示组的状态 widget.Battery() # 插件,用于显示电池状态 ], 30)) ] ...
啟動[編輯 | 編輯原始碼]
你可以使用 鈎(hooks) 來啟動程序, 特別是 startup
.
startup
鈎是用於 Qtile 初始化事件的鈎, 能夠在 Qtile 初始化的時連帶啟動其他的程序(一次性指令或程序).
要查看所有可用的鈎, 可參考 這個文檔
下面是 只啟動一次程序 的示例:
import os import subprocess from libqtile import hook @hook.subscribe.startup_once def autostart(): home = os.path.expanduser('~') subprocess.Popen([home + '/.config/qtile/autostart.sh'])
調試[編輯 | 編輯原始碼]
有時候會因為插件的參數沒有完整, 或者設定之間有衝突情形發生, 模組未 import 等問題出現錯誤.
需要檢查出錯位置,可以以如下方式啟動一個虛擬的 Xorg 並進行測試:
echo "exec qtile start" > /tmp/.start_qtile; xinit /tmp/.start_qtile -- :2
Qtile 將會輸出日誌到 ~/.local/share/qtile/qtile.log
裡.
參閱[編輯 | 編輯原始碼]
- Qtile 官方網站
- 官方文檔
- Comparison of tiling window managers
- xinitrc
- tilenol - 受 Qtile 啟發,以 Python3 寫成的類似窗口管理程序