修正する

修正する

最近、X11(またはいくつかの組み合わせ)の代わりにWaylandを使用するUbuntu 17.10をインストールしました。以前は、xprop -root|grep ^_NET_CLIENT_LISTwmctrl()または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バインディング)。

クラスとタイトルを含むウィンドウのリストを取得するには(美化に使用)sedjq

$ 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

おすすめ記事