Claude 与 Skill
让 Claude Code 验证 Waybar 修复:AT-SPI 看得见按钮,却按不动它
作者让 Claude Code 不只修 Waybar 的 bug,还负责验证修复是否生效。过程中发现桌面端存在独立于屏幕画面的 accessibility tree(AT-SPI),AI 能借此读到 Waybar 的按钮和标签,但执行 Click 动作却无法切换工作区。最终查明原因并手动完成了验证。
今天就能做
- 遇到 GUI 工具的疑难 bug,可以让 Claude Code 先查上游是否已有合并的修复 PR,再决定是否从 git 版本构建
- 想让 AI 读取桌面应用界面,可以试试 at-spi2-core 的 accessibility tree,不必依赖截图
- AI 给出的源码分析要标注为待验证结论,关键修复仍需自己动手确认
背景:两个搁置已久的 Waybar 问题
- 点击工作区按钮无法切换工作区,Wi-Fi 热点名称显示错误,作者一直忍着没修
- 让 Claude Code 查上游,发现修复 Hyprland Lua 配置下工作区命令的 PR #5031 已合并
- 于是让 Claude Code 从 AUR 构建 waybar-git 并替换现有版本
意外发现:屏幕背后还有一棵 UI 树
- 验证修复时,Claude Code 没有截图,而是通过 D-Bus 走 at-spi2-core 的 accessibility tree,列出了 Waybar 的按钮和标签
- 作者此前不知道桌面也有类似 API 与视图分离的机制,认为这是本次最大的收获
- 这意味着 AI 可以不依赖像素截图,直接以结构化方式读取桌面 UI
看得见,按不动
- 作者以为能读到按钮就能点击,让 Claude Code 对工作区按钮执行 AT-SPI 的 Click 动作,结果毫无反应,也没有报错
- 让 Claude Code 阅读 Waybar 源码 src/modules/hyprland/workspace.cpp,按钮通过 add_events(Gdk::BUTTON_PRESS_MASK) 并连接 signal_button_press_event 来响应点击
- Claude Code 的解释:AT-SPI 的 Click 不会触发 button press 事件,所以 handleClicked 不会执行。作者注明这是 AI 的分析,且读的是当前上游代码,未必等于自己构建的版本
最后还是手动验证
- 作者自己动手点击,工作区切换正常,Wi-Fi 热点显示也正确了
- 验证环节没能自动化,但了解到屏幕背后存在可读取 UI 的 API,作者认为已经值回票价
- 文章由 AI 辅助撰写并经作者审阅
对 AI 辅助开发的启示
- 让 AI 负责「验证」而不只是「修复」,是很好的分工思路,但验证手段本身可能存在盲区
- AI 能快速定位源码并给出合理解释,但作者保持了「未经自己核实」的谨慎态度
- 无障碍接口是 AI 与 GUI 交互的一条新通路,目前对自绘事件的支持还不完整
原文:I Had Claude Code Check My Waybar Fix: AT-SPI Could See the Button but Not Press It
来源:DEV Community · 2026-11-04
查看原文本文由 AI 阅读原文后整理,未经人工逐字核对,内容以原文为准。
登录后可以点赞、查看和发表评论