Wayland 窗口激活机制

Wayland 下,客户端无法像 X11 那样直接操作窗口焦点。所有窗口激活请求都必须经过 xdg-activation-v1 协议:申请者(通常是发起激活的一方)先从 compositor 获得 token,再将 token 交给目标应用,目标应用凭 token 向 compositor 请求焦点。 整个流程分为三个阶段: sequenceDiagram participant App as 申请者 participant Comp as Compositor participant Target as 目标进程 rect rgb(60, 60, 90) Note over App,Comp: ① Token 申请 App->>Comp: get_activation_token() App->>Comp: set_serial() App->>Comp: set_surface() App->>Comp: set_app_id() App->>Comp: commit() Comp-->>App: done(token) end rect rgb(90, 60, 60) Note over App,Target: ② Token 传递 App->>Target: 环境变量 / D-Bus / socket end rect rgb(60, 90, 60) Note over Target,Comp: ③ Token 使用 Target->>Comp: activate(token, surface) Note over Comp: 验证并授权焦点 end Token 申请:谁想激活别人,谁负责向 compositor 申请 token(协议层面) Token 传递:通过环境变量、D-Bus、单例 socket 等方式将 token 从申请者交给目标进程(跨进程传递) Token 使用:目标进程将 token 提交给 compositor,获得焦点(协议层面) 本文重点分析第 2 部分(传递),基于 Qt6(qtbase)、GLib 和 KDE kio 源码。 ...

2026年8月28日 · 4000 words · rewine

几个非 NixOS 场景下的 Nix 小技巧:home-manager、system-manager 和 GPU

最近整理了一下自己的 ~/nix-dotfiles,有几处在非 NixOS 机器上很好用,尤其适合只装了 Nix、但又想把用户环境和一部分系统环境一起声明式管理的人。 这篇主要记三个点: home-manager 可以通过 flake 里的默认 app 包起来,直接 nix run system-manager 可以直接由 home-manager 安装,再手动 sudo 应用 图形程序这块更推荐 nix-system-graphics,体验比 nixGL 顺很多 ...

2026年4月3日 · 1658 words · rewine

简要介绍 wlroots 的 scene graph

wlroots 的 scene graph 是 0.15 引入的高层渲染抽象,目标是让 compositor 开发者摆脱手动管理渲染循环、damage tracking 和输入命中测试的繁琐工作。下面从架构、节点类型、坐标系、渲染流程和实际用法等几个维度展开。 整体架构 scene graph 的核心思想是把“要渲染什么”和“如何渲染”解耦。Compositor 只需构建一棵节点树来描述场景,wlroots 负责把这棵树翻译成 GPU 命令并处理 damage。 ...

2026年3月14日 · 1924 words · rewine