Waybar の修正がちゃんと効いたか、確認まで Claude Code にやらせようとした。そこで初めて、デスクトップにも画面とは別に UI を読める仕組み(アクセシビリティツリー)があると知った。ただ、Waybar のワークスペースのボタンはそこからは押せなかった。結局、最後は自分で押した。
放置していた Waybar
Waybar には前から不満があった。ワークスペースのボタンをクリックしても切り替わらないし、つながっている Wi-Fi のアクセスポイントも正しく出ない。分かってはいたが、ずっと放置していた。
ちょっとやる気が出たので、手を付けた。Claude Code に upstream を調べさせると、Hyprland の Lua 設定に合わせてワークスペースの操作を直す PR(#5013)がマージ済みだった。そこで AUR の waybar-git をビルドさせ、git 版に入れ替えさせた。
直ったかを Claude Code に確かめさせたい
入れ替えたら、次は直ったかの確認だ。ここも Claude Code に任せられないかと思った。ボタンを押して、ワークスペースが切り替わるかを見ればいい。
Claude Code は、スクリーンショットを撮らなくても、at-spi2-core のアクセシビリティツリーを D-Bus 越しにたどって、Waybar のボタンとラベルを一覧にしてみせた。
私はこういう仕組みがあることを知らなかった。API とビューを分けるという考え方からすれば当然かもしれないが、デスクトップもそうなっているとは思っていなかった。勉強になった。
見えているのに押せない
見えているなら押せるだろうと、ワークスペースのボタンに AT-SPI の Click を実行させた。切り替わらなかった。エラーも出ない。
Claude Code に Waybar の src/modules/hyprland/workspace.cpp を読ませると、ボタンはこう作られていた。
m_button.add_events(Gdk::BUTTON_PRESS_MASK);...m_button.signal_button_press_event().connect(sigc::mem_fun(*this, &Workspace::handleClicked), false);切り替えの本体 handleClicked は、マウスのボタンを押したイベントからしか呼ばれない。AT-SPI の Click はこのイベントを起こさないので空振りする、というのが Claude Code の説明だった。私はこの説明を自分では確かめていない。読ませたのは今の upstream のコードで、手元でビルドしたリビジョンとは違うかもしれない。
結局、自分で押した
確認は、自分の手でボタンを押してやった。ワークスペースは切り替わったし、Wi-Fi のアクセスポイントも正しく出るようになっていた。
確認の自動化はできなかった。でも、画面の裏に UI を読める API があると分かったのは収穫だった。