最近、X11(またはいくつかの組み合わせ)の代わりにWaylandを使用するUbuntu 17.10をインストールしました。以前は、xprop -root|grep ^_NET_CLIENT_LIST
wmctrl()またはwmctrl()を使用してすべてのwmctrl -lpGxu
アクティブウィンドウのリストをインポートしていました。これは、すべてのgnomeアプリケーション(端末など)やその他のアプリケーション(nautliusなど)では機能しなくなりました。これらをリストする方法はありますか?
ベストアンサー1
修正する
残念ながら、セキュリティ上の理由で、Gnome 41では動作しなくなりました。
Looking Glassで実行すると、global.context.unsafe_mode = true
機能は再び有効になりますが、一時的にのみ可能です。
元の答え
はい、Waylandでは残念ながらXorgユーティリティは機能しwmctrl
ませんxdotool
。代わりにウィンドウマネージャと会話できます。
Gnomeの場合は実行できます。gdbus
一部のGJSを実行するためにDBUSメッセージを送信する(GNOME C API用のJavaScriptバインディング)。
クラスとタイトルを含むウィンドウのリストを取得するには(美化に使用)sed
:jq
$ gdbus call \
--session \
--dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval "
global
.get_window_actors()
.map(a=>a.meta_window)
.map(w=>({class: w.get_wm_class(), title: w.get_title()}))" \
| sed -E -e "s/^\(\S+, '//" -e "s/'\)$//" \
| jq .
出力例:
[
{
"class": "firefox",
"title": "Mozilla Firefox"
},
{
"class": "org.gnome.Nautilus",
"title": "Downloads"
},
{
"class": "Google-chrome",
"title": "ubuntu - Bash command to focus a specific window - Super User - Google Chrome"
},
{
"class": "sublime_text",
"title": "untitled (dotfiles) - Sublime Text"
},
{
"class": "gnome-terminal-server",
"title": "Projects"
},
{
"class": "Gnome-shell",
"title": "gnome-shell"
}
]
現在フォーカスされたウィンドウのクラスを取得するには:
$ gdbus call \
--session \
--dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval "
global
.get_window_actors()
.map(a=>a.meta_window)
.find(w=>w.has_focus())
.get_wm_class()" \
| cut -d'"' -f 2
gnome-terminal-server
Gnomeの「Looking Glass」デバッガを使用してGJSの可能性を試すことができます。Alt + F2を押してから、次の手順を実行します。lg