web-dev-qa-db-fra.com

Comment obtenir la fenêtre active sur Gnome Wayland?

Contexte: Je travaille sur un logiciel appelé ActivityWatch qui enregistre ce que vous faites sur votre ordinateur. Fondamentalement, une tentative de résoudre certains des problèmes avec: RescueTime, selfspy, arbtt, etc.

L'une des choses essentielles que nous faisons est de consigner des informations sur la fenêtre active (classe et titre). Dans le passé, cela a été fait en utilisant Linux avec xprop et maintenant python-xlib sans problème.

Mais maintenant nous avons un problème: Wayland est en hausse, et pour autant que je puisse voir Wayland n'a aucune notion d'une fenêtre active. Donc, je crains que nous devions implémenter la prise en charge de chaque environnement de bureau disponible pour Wayland (en supposant qu'ils fourniront la capacité d'obtenir des informations sur la fenêtre active).

J'espère qu'ils finiront par converger et auront une interface commune pour y arriver, mais je ne retiens pas mon souffle ...

J'ai été anticipant ce problème . Mais aujourd'hui, nous avons reçu notre première demande d'utilisateur pour le support de Wayland par un utilisateur réel de Wayland. Alors que les plus grandes distributions adoptent Wayland comme protocole de serveur d'affichage par défaut (Fedora 25 l'utilise déjà, Ubuntu passera en 17.10 qui arrive bientôt), la situation deviendra plus critique au fil du temps.

Problèmes pertinents pour ActivityWatch:

Il existe d'autres applications comme ActivityWatch qui nécessiteraient les mêmes fonctionnalités (RescueTime, arbtt, selfspy, etc.), elles ne semblent pas prendre en charge Wayland pour le moment et je ne trouve aucun détail à leur sujet.

Je suis maintenant intéressé à implémenter le support de Gnome pour commencer et suivre avec les autres à mesure que le chemin devient plus clair.

Une question similaire concernant Weston a été posée ici: obtenir la liste des fenêtres actives dans wayland weston

Edit: J'ai demandé dans #wayland sur Freenode, j'ai obtenu la réponse suivante:

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 :)

Edit 2: Dépôt d'un problème d'amélioration dans le bugtracker de Gnome .

tl; dr: Comment obtenir la fenêtre active sur Gnome lorsque j'utilise Wayland?

36
erb

À mon avis, le meilleur choix que vous avez n'est ni Wayland ni aucune bibliothèque disponible (il n'y en a pas). En fait, qui sait dans gnome-wayland sur les fenêtres actives est Mutter, vous devez donc trouver un moyen de demander à Mutter les fenêtres actives. Gnome peut développer une API pour demander en interne de murmurer la fenêtre active et restaurer la fonctionnalité. Mais vraiment, vous n'avez pas d'endroit pour le demander. Mutter ne développera pas d'API pour accéder à sa représentation interne, car ce sera assez spécifique de Mutter uniquement et pas à tous les gestionnaires de fenêtres Wayland. Donc, cela doit être ajouté à une bibliothèque externe, où cette bibliothèque pourrait probablement parler avec le gestionnaire de fenêtres actuel qui est utilisé pour résoudre votre demande de manière générale.

Une autre possibilité est d'ajouter un plugin Wayland où tous les gestionnaires de fenêtres auront un moyen de partager les fenêtres actives actuelles et d'une certaine manière une bibliothèque pour parler directement avec wayland pour restaurer la fonctionnalité.

Votre application rencontre donc un gros problème. Tout ce que vous pouvez faire est de demander cela sur mutter (où sont les fenêtres actives), mais à mon avis, cela ne peut pas être résolu dans Mutter.

J'espère que cela vous aidera et que vous pourrez trouver un moyen. Bonne chance.

1
lestcape