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 写成的类似窗口管理程序