ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Ubuntu/Debian 上安装与启动 Qtile 平铺窗口管理器:依赖清单、uv 工具链与 X11/Wayland 双后端实践

2026/10/6 22:15:35 拓冰建站 浏览量
Ubuntu/Debian 上安装与启动 Qtile 平铺窗口管理器:依赖清单、uv 工具链与 X11/Wayland 双后端实践 桌面应用操作系统【免费下载链接】qtile:cookie: A full-featured, hackable tiling window manager written and configured in Python (X11 Wayland)项目地址https://gitcode.com/gh_mirrors/qt/qtile点击查看免费下载导读本文基于 docs/manual/install/ubuntu.rst 与其父级安装指南 docs/manual/install/index.rst系统讲解在 Ubuntu / Debian 系列发行版上安装、配置与启动 Qtile 的完整路径——包括新版发行版的软件包直装方案、旧版发行版的系统依赖准备、基于uv tool的现代 Python 工具链安装方式以及 X11 / Wayland 双后端的启动方法与硬件权限udev 规则配置。读完本文你可以在一台全新的 Ubuntu 或 Debian 机器上从零把 Qtile 跑起来并接入自己的登录管理器。Qtile 是一个使用 Python 编写和配置的全功能平铺窗口管理器Tiling Window Manager同时支持 X11 与 Wayland 两种后端仓库描述见 README.rst。由于它完全用 Python 驱动安装环节的核心就是把系统依赖和 Python 环境准备到位。本文按照官方文档的顺序把从系统包到 Python 工具链、从启动方式到硬件权限的全部环节串起来并结合仓库源码给出可验证的实现细节。一、两种安装时代先判断你的发行版版本ubuntu.rst明确区分了两个阶段安装前请先确认自己的发行版版本新版发行版Debian 13Ubuntu 25.04仓库已经打包了 Qtile直接使用系统包管理器安装即可。每个发行版发布版本对应的 Qtile 具体版本号可以分别到packages.debian.org或packages.ubuntu.com的软件包搜索页关键词qtile查询。旧版发行版Debian / Ubuntu 11系统仓库中没有 Qtile 本体但提供了运行 Qtile 所需的全部系统依赖Qtile 本身需要从 PyPI 或 GitHub 仓库安装。因此本指南的默认前提是旧版发行版场景这同时也覆盖了新版发行版中想使用比系统包更新的 Qtile的情况。二、系统级依赖准备旧版发行版从一份最小化的 Debian/Ubuntu 安装出发官方文档给出的系统包清单如下sudo apt install xserver-xorg xinit sudo apt install libpangocairo-1.0-0 sudo apt install uv # 如果你的发行版没有 uv 包可以尝试官方安装脚本 # curl -LsSf https://astral.sh/uv/install.sh | sh这三组包分别解决三个问题包名作用对应源码层xserver-xorgxinit提供 X11 显示服务器与startx/xinit启动链路是 X11 后端运行的前提libqtile/backend/x11/libpangocairo-1.0-0提供 Pango Cairo 的 C 库Qtile 用它把文本绘制到 bar 和 popup 上libqtile/pangocffi.py、libqtile/pango_ffi.pyuv极速 Python 包管理器官方推荐的 Qtile 安装工具链pyproject.toml需要注意的是libpangocairo-1.0-0是 C 库层面的依赖python3-cairocffi才是 Python 绑定层两者都要装齐Qtile 的 bar 才能正常渲染文字。完整依赖对照表index.rst中给出了 Qtile 运行时的核心依赖与 Ubuntu 包名的完整对照表。Qtile 可以运行在两种后端之一X11 或 Wayland因此只需要满足其中一个后端的依赖依赖Ubuntu 包名用途核心依赖CFFIpython3-cffibar 与 popup 的 C 接口绑定cairocffipython3-cairocffi在 bar 和 popup 上绘图libpangocairolibpangocairo-1.0-0在 bar 和 popup 上书写文本dbus-fast--可选通过 dbus 发送通知X11 后端X serverxserver-xorgX11 后端xcffibpython3-xcffibX11 后端必需Wayland 后端wlrootslibwlroots-devWayland 后端见下文说明wayland-scanner--为 Wayland 后端生成 C 头文件wayland-protocolswayland-protocols额外的标准 Wayland 协议从 pyproject.toml 的[project]段可以看到当前仓库声明的强制 Python 依赖为requires-python 3.12 dependencies [ cairocffi 1.7.0, cffi 1.1.0, xcffib 1.4.0, ]也就是说任何后端场景下 cairocffi、cffi、xcffib 三者都会随包安装Ubuntu 侧的python3-cffi/python3-cairocffi对应的是系统层面的同名包如果你采用uv tool安装见下文Qtile 会被装入独立的环境这些 Python 依赖由uv自行解决系统包只需保证libpangocairo-1.0-0这类 C 库到位。关于 Wayland 依赖还有一个重要提醒原文明确强调wlroots 处于快速开发迭代中部分发行版打包的 wlroots 版本可能过旧Qtile 官方在努力跟进最新的 wlroots release。如果你的发行版 wlroots 版本太旧导致 Wayland 后端无法启动优先考虑从较新的发行版仓库或源码构建 wlroots。Python 解释器CPython 与 PyPy官方对 Python 解释器的支持策略index.rst是始终支持 CPython 最近三个版本同时通常支持 PyPy 的最新稳定版。当前仓库在 pyproject.toml 中声明requires-python 3.12分类器classifiers明确标注支持 CPython 3.12 / 3.13 以及 PyPy。两者的取舍官方给出如下结论PyPy对会被反复执行多次的 Python 代码片段通常比对应版本的 CPython 更快CPython启动速度更快且对外部 C 扩展库的兼容性更好。配置文件中能否使用某些 Python 语言特性会受解释器版本影响这是两个解释器之间最主要的实际差异。三、用 uv 工具链安装 Qtile装好系统依赖后安装 Qtile 本体最推荐的方式是uv tooluv tool会把 Qtile 装进独立环境并为其创建可执行命令入口# 安装稳定版来自 PyPI uv tool install qtile # 附带依赖集安装 uv tool install qtile[widgets] # 安装全部 widget 依赖 uv tool install qtile[all] # 安装全部可选依赖从 GitHub 源码安装qtile-git想跟进最新开发版官方推荐直接 clone 仓库后用uv tool安装git clone https://github.com/qtile/qtile.git cd qtile uv tool install . # 最小依赖 uv tool install .[dev,widgets,optional-core] # 全部依赖关于第二行的 extras 名称仓库 pyproject.toml 中[project.optional-dependencies]实际定义的键为dev、optional_core、widgets、docs。optional-core与optional_core在 extras 归一化规则PEP 685下等价均可使用。各 extras 的组成以当前仓库为准为extra包含内容用途widgetsimaplib2、keyring、mailbox、psutil、pulsectl、pulsectl_asyncio、python-mpd2、pyxdg、xmltodict、aiohttp各类 widget 的第三方依赖邮件、媒体、系统监控等optional_coredbus-fast、libcst、setproctitle、prompt_toolkit通知dbus、进程名设置、REPL 等可选核心能力devcoverage、pytest 系列、mypy、pre-commit、PyGObject 等开发与测试工具链docssphinx、libcst 等构建文档其中setproctitle对应源码 libqtile/scripts/start.py 中的rename_process()安装了它Qtile 进程标题会被设为qtile从而可以直接killall qtile未安装时该函数静默失败不影响运行。给 Qtile 环境补装额外的 Python 模块Qtile 的配置是 Python 代码你很可能想在配置里 import 一些第三方模块。由于uv tool会创建独立的工具环境任何要在配置中使用的 Python 模块都必须装进同一个环境。官方文档给出两种做法1. 安装时一并指定推荐最清晰# 从 PyPI 安装额外包qtile[widgets] 等 extras 同样适用 uv tool install --with package-name qtile # 从 GitHub 仓库安装 uv tool install --with githttps://github.com/elParaguayo/qtile-extras/ . # 从自定义 requirements 文件安装 uv tool install --with-requirements /path/to/requirements.txt .2. 安装后补装官方明确指出安装后再往uv tool环境里补包并没有被官方正式支持但以下命令在实践中可用cd $(uv tool dir)/qtile uv pip install package-name四、启动 QtileX11 场景index.rst总结了四种进入 Qtile 会话的方式由易到难排列如下。方式一通过登录管理器显示管理器菜单最常规的方式是在 X 会话管理器的菜单中加入 Qtile 条目——在/usr/share/xsessions目录下创建qtile.desktop文件。仓库自带的 resources/qtile.desktop 内容如下[Desktop Entry] NameQtile CommentQtile Session Exec/usr/bin/qtile start TypeApplication Keywordswm;tiling复制到目标位置后SDDM、LightDM、GDM 等显示管理器的会话选择列表里就会出现 Qtile 条目。方式二自定义 X session适合做启动前预处理当你需要在 Qtile 启动前执行自定义初始化例如把 Caps Lock 映射为 Control、设置桌面壁纸、加载键盘映射等可以走自定义 X session创建custom.desktop内容与qtile.desktop类似但Exec/etc/X11/xsession编写自己的~/.xsession在文件末尾调用 Qtile。这种方式允许你用任意参数启动 Qtile官方仓库的 qtile-examples 中有大量社区成员分享的~/.xsession示例可供参考。方式三无显示管理器直接从 ~/.xinitrc 启动如果机器上没有安装任何显示管理器在~/.xinitrc末尾加入一行即可exec qtile start使用exec让 Qtile 取代 shell 进程成为会话主进程会话结束时进程自然退出。方式四崩溃自愈循环特殊情况在非常特殊的场景下例如 Qtile 在会话中频繁崩溃官方建议用循环包裹启动命令从而在崩溃后自动拉起、保住已运行的应用while true; do qtile doneqtile start 的可选参数源码级从 libqtile/scripts/start.py 可以看到qtile start子命令支持以下参数在自定义 session 或.xinitrc中组合使用参数含义-b, --backend指定后端可选项为libqtile.backend.CORES中的键即 x11 / wayland-c, --config path使用指定配置文件默认由 libqtile/utils.py 的get_config_file()定位-d, --use-default-config使用内置默认配置源码中会解析内置默认配置模板路径-s, --socket path为 IPC 指定 socket 路径-n, --no-spawn不自动启动应用Qtile 重启时使用--with-state pickle载入序列化的 QtileState重启时恢复布局等状态此外libqtile/scripts/main.py 为全局命令定义了通用参数-l/--log-levelDEBUG/INFO/WARNING/ERROR/CRITICAL默认 WARNING与-p/--log-path以及-v/--version。同文件还注册了shell、top、run_cmd、cmd_obj、check、migrate、launch、repl、x11_identify_output等子命令模块安装完成后可运行qtile --help查看完整命令树。一个值得留意的细节start.py中若指定的配置文件不存在Qtile 会尝试把内置的默认配置模板复制到该路径日志提示Copied default_config.py to ...也就是说首次启动没有配置文件也不会白屏它会先给你一份可运行的默认配置。五、Wayland 后端除了作为 X11 窗口管理器Qtile 也可以作为 Wayland 合成器运行。仓库的 Wayland 后端实现在 libqtile/backend/wayland/底层基于 wlroots 合成器库。在 Wayland 依赖齐全的前提下从 TTY 直接启动或在已有的 X11 / Wayland 会话内以嵌套窗口方式启动qtile start -b wayland从 libqtile/scripts/start.py 的make_qtile()可以确认后端选择逻辑-b未指定时通过libqtile.backend.detect_backend()自动探测显式指定后端后若检测到缺少必需 Python 依赖会列出缺失项并退出。-b的合法取值即libqtile.backend.CORES的键。与 X11 场景类似登录管理器也可以使用 Wayland 会话文件在/usr/share/wayland-sessions下创建qtile-wayland.desktop。仓库自带的 resources/qtile-wayland.desktop 内容为[Desktop Entry] NameQtile (Wayland) CommentQtile Session Execqtile start -b wayland TypeApplication Keywordswm;tilingWayland 场景还有几点官方提醒XWaylandQtile 支持 XWayland 运行 X11-only 程序前提是 wlroots 编译时带上了 XWayland 支持、且系统装有 XWaylandXWayland 会在首次需要时自动启动。已知问题可参考仓库 issue #3675切换焦点后指针事件偶发传播到错误窗口。配置按后端区分若希望同一份配置在不同后端下采用不同设置可以像 docs/manual/wayland.rst 中那样读取当前后端名from libqtile import qtile if qtile.core.name x11: term urxvt elif qtile.core.name wayland: term footWayland 下 wlroots 的版本兼容性是重点见第二节末尾的提醒更多 Wayland 运行细节参见 docs/manual/wayland.rst。六、udev 规则让硬件 widget 获得写权限Qtile 有多个 widget 负责管理硬件——LCD 背光、键盘背光、电池充电阈值——它们通过内核暴露的 sysfs 端点/sys/class/...工作。要让这些 widget 能写入对应文件需要给 Qtile 授予写权限官方为此在仓库中维护了一份 udev 规则文件 resources/99-qtile.rules。从源码安装的用户应将其安装到/etc/udev/rules.d/官方给出的安装命令# 把仓库内的 udev 规则文件复制到正确位置让 udev 生效 cat ./resources/99-qtile.rules | sudo tee /etc/udev/rules.d/99-qtile.rules这份规则文件做了三件事对照 resources/99-qtile.rules 内容LCD 背光对SUBSYSTEMbacklight的设备把/sys/class/backlight/%k/brightness开放为ow对应 widget 实现见 libqtile/widget/backlight.py键盘背光对SUBSYSTEMleds的设备开放/sys/class/leds/%k/brightness电池充电阈值按 ACPI 驱动名asus-wmi、dell-laptop、huawei-wmi、lg-laptop、msi-ec、samsung-galaxybook、system76_acpi、thinkpad_acpi、toshiba_acpi在设备加载时开放charge_control_start_threshold/charge_control_end_threshold两个 sysfs 文件对应 widget 实现见 libqtile/widget/battery.py。规则文件中的注释也透露了两个实战细节一是充电阈值文件由驱动加载时创建而非电池被识别时创建因此规则里把设备名硬编码为BAT0——如果你有多个电池可以按相同格式手动追加 BAT1 的规则二是这些驱动的清单含 Linux 内核版本号会在规则文件中定期更新核对使用前建议先确认自己内核对应的驱动名。七、安装后的验证与常见问题安装完成后可以按以下顺序自查确认命令可用qtile --version应输出版本号由 libqtile/scripts/main.py 的-v分支提供确认后端依赖直接执行qtile start若缺失后端必需 Python 依赖libqtile/scripts/start.py 的make_qtile()会打印缺失项并以退出码 1 结束检查配置文件语法与内容仓库内置了配置检查工具libqtile/scripts/check.py可用于校验你的~/.config/qtile/config.py日志定位通过-l DEBUG与-p 路径打开更详细日志方便排查启动失败start.py启动时也会把 Qtile 版本与库路径写入日志xsession 无效时确认qtile.desktop位于/usr/share/xsessions且Exec中的路径与which qtile一致例如uv tool安装时入口通常位于~/.local/bin/qtileresources/qtile.desktop 中写的是/usr/bin/qtile start实际路径不一致时可改用不带绝对路径的qtile start或qtile-generic.desktop写法见 resources/qtile-generic.desktop。小结在 Ubuntu / Debian 上部署 Qtile 的完整链路可以归纳为四步先判断发行版是否自带 Qtile 包Debian 13 / Ubuntu 25.04 可直装再按后端选型补齐系统依赖X11 需要xserver-xorgxinitpython3-xcffibWayland 需要 wlroots 系列两者共用libpangocairo-1.0-0随后用uv tool install安装 Qtile 本体与附加模块最后选定启动方式显示管理器菜单、自定义 xsession、.xinitrc或崩溃循环并按需安装 resources/99-qtile.rules 释放硬件 widget 权限。全部过程都以本仓库的 docs/manual/install/ubuntu.rst 和 docs/manual/install/index.rst 为官方基准源码与资源文件可在上文各链接处继续深入查阅。赞分享桌面应用操作系统【免费下载链接】qtile:cookie: A full-featured, hackable tiling window manager written and configured in Python (X11 Wayland)项目地址https://gitcode.com/gh_mirrors/qt/qtile点击查看免费下载相关推荐高效视频编辑神器3分钟全面掌握Avidemux2开源视频编辑器高效视频编辑神器3分钟全面掌握Avidemux2开源视频编辑器 Avidemux2是一款专业级的开源视频编辑软件提供跨平台视频剪辑、编码转换和滤镜处理功能。桌面应用操作系统在 iOS Share 与 Action 扩展中集成 OpenMedKit 端侧文本脱敏在 iOS Share 与 Action 扩展中集成 OpenMedKit 端侧文本脱敏 OpenMedKit 为 iOS 提供了一套可直接复用的 Share桌面应用操作系统Qtile 文档体系与入门指南用 Python 编写和配置的平铺窗口管理器X11 WaylandQtile 文档体系与入门指南用 Python 编写和配置的平铺窗口管理器X11 Wayland 本文是 Qtile 官方文档入口 docs/ind桌面应用操作系统上一篇推荐开源项目Taplo —— 强大的TOML工具包下一篇Destiny高级技巧处理循环依赖、测试文件和链接文件的完整方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考