Qtile

出自 Arch Linux 中文维基

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 的配置均是以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 裡.

參閱[編輯 | 編輯原始碼]