Waylandをクリックしてウィンドウを識別する方法

Waylandをクリックしてウィンドウを識別する方法

Waylandのどのプロセスにウィンドウが属しているかを確認したいと思います。xpropユーザーがウィンドウをクリックして選択し、すべてのウィンドウの詳細(PIDを含む)を出力できるXのようなものはありますか?

答え1

xprop良いニュースは、Xorgとは異なり、Gnome Shellにも同様の機能が組み込まれていることです。そしてウェイランド。 KDE、i3、またはその他のツールを使用している場合、これは最終的に他のツールのドメインになる可能性があります。

まずキーボードで「ALT+F2」と入力すると、次のメニューが表示されます。

代替足

表示されたら、コマンドlg(「ミラー」)を実行します。

これにより、ウィンドウ情報を抽出できるビューガラスウィンドウが開きます。ミラーの右上にある「ウィンドウ」を選択します。

窓部分

これには、識別したいウィンドウ名をクリックできるウィンドウのリストが表示されます。

リスト

この場合、例としてgeditを選択しました。

編集者

この出力の最初の行で、次のことを確認できます。

Inspecting object: object instance proxy GType: MetaWindowX11 ...

MetaWindowX11「GType」はまたはいずれかですMetaWindowWayland

この情報は以下で提供されます。https://fedoraproject.org/wiki/How_to_debug_Wayland_problems

答え2

これが特に不足している部分であることに気づき、そうするためにギストを作りました。

より:wlprop

wlprop端末に入力してウィンドウをクリックすると、そのウィンドウのスウェートツリー出力が表示されます。

$ wlprop
# A prompt to select a window will appear
{
  "id": 72,
  "type": "con",
  "orientation": "none",
  "percent": 0.5002881844380404,
  "urgent": false,
  "marks": [],
  "focused": false,
  "layout": "none",
  "border": "pixel",
  "current_border_width": 2,
  "rect": {
    "x": 0,
    "y": 26,
    "width": 868,
    "height": 1130
  },
  "deco_rect": {
    "x": 0,
    "y": 0,
    "width": 0,
    "height": 0
  },
  "window_rect": {
    "x": 2,
    "y": 2,
    "width": 864,
    "height": 1126
  },
  "geometry": {
    "x": 0,
    "y": 0,
    "width": 1328,
    "height": 858
  },
  "name": "How to identify window by clicking in Wayland - Unix & Linux Stack Exchange — Mozilla Firefox",
  "window": null,
  "nodes": [],
  "floating_nodes": [],
  "focus": [],
  "fullscreen_mode": 0,
  "sticky": false,
  "pid": 47844,
  "app_id": "firefox",
  "visible": true,
  "max_render_time": 0,
  "shell": "xdg_shell",
  "inhibit_idle": false,
  "idle_inhibitors": {
    "user": "none",
    "application": "none"
  }
}

以下を使用して特定の要素でフィルタリングできますjq

$ wlprop | jq -r '.name'
# The same prompt will appear
How to identify window by clicking in Wayland - Unix & Linux Stack Exchange — Mozilla Firefox

xpropこの解決策がすべての人の心の穴を埋めるほどエレガントであることを願っています。

答え3

持つxdg-foreignプロトコル拡張ドラフトwl_surface、他のWaylandクライアントが作成したハンドルを取得できます。このハンドルを使用すると、クライアントサーフェスで得られるすべてのものを取得できます。ただし、プロトコルにはまだ制限があります。

  • 明らかに、クライアントに実装されていない場合は機能しません。
  • そのターゲット顧客は知るしたがって、これをトリガーする方法を提供しません。クライアントは何とか外部クライアントと通信しますが、拡張は含まれません。その後、外部クライアントはこの拡張を介してクライアントにハンドルを公開します。
  • に比べてあまりにも多くの制御力を得ますxprop。実際、外国の表面にも塗ることができます!

したがって、これはすべてのクライアントがすべてのクライアントからサーフェスパラメータを取得する普遍的な方法ではない可能性があります。しかし、希望を失わないでください。テクノロジーの歴史には、もともと1つの目的で設計されたテクノロジーが、後に自動車シガーライターやAndroidのアクセシビリティAPIなどの他の目的に広く使用されているケースがたくさんあります。さらに、将来的には間違いなく必要になるため、あなたの仕事に適したプロトコル拡張が発生する可能性があります(時間トラッカーなど)。

答え4

Swayではswaymsg -t get_treegrepに似ていますxpropが、同時にすべてのウィンドウに対してgrepを実行できます。

関連情報