web-dev-qa-db-ja.com

Gnome Waylandでアクティブウィンドウを取得するにはどうすればよいですか?

背景:私は ActivityWatch と呼ばれるソフトウェアで作業しています。基本的に、RescueTime、selfspy、arbttなどの問題のいくつかに対処する試み。

私たちが行う中心的なことの1つは、アクティブウィンドウに関するログ情報(クラスとタイトル)です。以前は、これはLinuxでxpropを使用して行われており、現在は問題なくpython-xlibを使用しています。

しかし、今問題があります:ウェイランドは増加傾向にあり、私が見る限り、ウェイランドにはアクティブウィンドウの概念がありません。したがって、私の恐れは、Waylandで使用可能なすべてのデスクトップ環境のサポートを実装する必要があることです(アクティブウィンドウに関する情報を取得する機能が提供されると想定)。

うまくいけば、それらは最終的に収束し、これを実行するためのいくつかの共通のインターフェースを持っているでしょうが、私は息を止めていません...

私は この問題を予想して してきました。しかし、今日、実際のWaylandユーザーから Waylandサポートの最初のユーザーリクエスト を受け取りました。大規模なディストリビューションではデフォルトのディスプレイサーバープロトコルとしてウェイランドを採用しているため(Fedora 25はすでにそれを使用しており、Ubuntuは17.10に切り替えられます)、状況は時間とともにますます重要になります。

ActivityWatchに関連する問題:

同じ機能(RescueTime、arbtt、selfspyなど)を必要とするActivityWatchのような他のアプリケーションがあり、それらは現在Waylandをサポートしていないようで、そうすることを計画しているそれらの詳細を見つけることができません。

私は今、Gnomeのサポートを実装してから始めて、パスがより明確になったときに他のユーザーにフォローアップすることに興味があります。

Westonに関する同様の質問がここで尋ねられました: wayland westonのアクティブウィンドウのリストを取得

編集:Freewayの#waylandで質問したところ、次の応答が返されました。

15:20:44  ErikBjare    Hello everybody. I'm working on a piece of self-tracking software called ActivityWatch (https://github.com/ActivityWatch/activitywatch). I know this isn't exactly the right place to ask, but I was wondering if anyone knew anything about getting the active window in any Wayland-using DE.
15:20:57  ErikBjare    Created a question on SO: https://stackoverflow.com/questions/45465016/how-do-i-get-the-active-window-on-gnome-wayland
15:21:25  ErikBjare    Here's the issue in my repo for it: https://github.com/ActivityWatch/activitywatch/issues/92
15:22:54  ErikBjare    There are a bunch of other applications that depend on it (RescueTime, selfspy, arbtt, ulogme, etc.) so they'd need it as well
15:24:23  blocage      ErikBjare, in the core protocol you cannot know which windnow has the keyboard or cursor focus
15:24:39  blocage      ErikBjare, in the wayland core protocol *
15:25:10  blocage      ErikBjare, you can just know if your window has the focus or not, it a design choise
15:25:23  blocage      avoid client spying each other
15:25:25  ErikBjare    blocage: I'm aware, that's my reason for concern. I'm not saying it should be included or anything, but as it looks now every DE would need to implement it themselves if these kind of applications are to be supported
15:25:46  ErikBjare    So wondering if anyone knew the teams working with Wayland on Gnome for example
15:26:11  ErikBjare    But thanks for confirming
15:26:29  blocage      ErikBjare, DE should create a custom extension, or use D-bus or other IPC
15:27:31  blocage      ErikBjare, I guess some compositor are around here, but I do not know myself if there is such extension already
15:27:44  blocage      compositor developers *
15:28:36  ErikBjare    I don't think there is (I've done quite a bit of searching), so I guess I need to catch the attention of some DE developers
15:29:16  ErikBjare    Thanks a lot though
15:29:42  ErikBjare    blocage: Would you mind if I shared logs of our conversation in the issue?                                     
15:30:05  blocage      just use it :) it's public                                                                                               
15:30:19  ErikBjare    ty :)

編集2:Gnomeバグトラッカーの拡張問題 を提出しました。

tl; dr:Waylandを使用しているときにGnomeでアクティブウィンドウを取得するにはどうすればよいですか?

36
erb

私の意見では、あなたが持っている最良の選択はウェイランドや利用可能なライブラリではありません(1つではありません)。実際にgnome-waylandでアクティブなウィンドウについて知っているのはMutterなので、アクティブなウィンドウをMutterするように依頼する方法を見つける必要があります。 Gnomeは、アクティブウィンドウをつぶやき、機能を復元するように内部的に要求するAPIを開発できます。しかし、実際には、それを要求する場所はありません。 Mutterは彼の内部表現にアクセスするためのAPIを開発しません。これは、Mutterのみにかなり固有であり、すべてのWaylandウィンドウマネージャーに固有ではないためです。したがって、これを外部ライブラリに追加する必要があります。このライブラリは、おそらく一般的な方法で要求を解決するために使用されている現在のウィンドウマネージャーと通信できます。

別の可能性は、すべてのウィンドウマネージャーが現在アクティブなウィンドウを共有する方法を備えたウェイランドプラグインと、機能を復元するためにウェイランドと直接通信するためのライブラリーを追加することです。

したがって、あなたのアプリは大きな問題に直面しています。あなたができることのほとんどはこれをつぶやきでリクエストすることです(どこがアクティブウィンドウを知っています)が、私の意見ではそれはつぶやきで解決することはできません。

これがあなたに役立ち、あなたが方法を見つけることができることを願っています。幸運を。

1
lestcape