Selcuk は私にこの質問を指摘したので、今後の検索のためにここで回答を得るために。
グローバル デスクトップ リスナーを設定して変更をフォーカスできるようにするライブラリは、libatspi (GNOME アクセシビリティ フレームワークのクライアント側ライブラリ) です。C、pyatspi2 (python 手動バインディング)、または gobject-introspection ベースのバインディング (つまり、javascript) を直接使用できます。したがって、フォーカスが変更されるたびに、フォーカスされたオブジェクトの name:role_name を出力する小さな JavaScript プログラムは次のようになります。
const Atspi = imports.gi.Atspi;
function onChanged (event) {
log(event.source.get_name() + ',' + event.source.get_role_name());
}
Atspi.init();
let atspiListener = Atspi.EventListener.new(onChanged);
atspiListener.register("object:state-changed:focused");
Atspi.event_main();
いずれにせよ、コード例については、最近追加された gnome-shell magnifier (javascript を使用した小さいサイズの例) または Orca (GNOME スクリーン リーダー、大きいサイズの例、pyatspi2 を使用) に追加されたフォーカス/キャレット トラッキング機能を参照できます。
libatspi リファレンスはこちら: https://developer.gnome.org/libatspi/
gnome-shell magnifier コードはこちら: https://git.gnome.org/browse/gnome-shell/tree/js/ui/magnifier.js