J'ai besoin d'une liste avec uniquement les applications qui sont actuellement ouvertes / en cours d'exécution dans Dash, celles qui ont cette ou ces petites flèches blanches sur le côté gauche de l'icône.
Y a-t-il un moyen de l'obtenir?
14.04
unity-dash
process
launcher
ovidb
la source
la source
Réponses:
La façon de le faire avec
qdbus
et l'org.ayatana.bamf
interface.Liste des candidatures ouvertes par
.desktop
fichier:Utilisation
org.ayatana.bamf.matcher.RunningApplications
etorg.ayatana.bamf.view.Name
méthodesla source
Question interessante.
Comme toujours, il existe différentes façons d'obtenir une liste de ces applications, chacune avec des annonces et des inconvénients spécifiques.
Obtention d'une liste de processus, représentés dans le lanceur, à l'aide de la liste des fenêtres
Étant donné que seules les applications avec une fenêtre (mappée) apparaissent dans le lanceur, en utilisant:
(
wmctrl
n'est pas installé par défaut), nous pouvons obtenir une liste des fenêtres ouvertes et le processus auquel les fenêtres appartiennent. Le format de la sortie est:où se trouvent pour nous les informations les plus importantes:
0x05204641
); c'est la fenêtre -id12618
); c'est l' identifiant du processus (pid) auquel la fenêtre appartient, et,verhaal (~) - gedit
); c'est le nom de la fenêtre .Une fois que nous avons le pid, nous pouvons rechercher le nom du processus correspondant par la commande:
Nous pouvons écrire les étapes ci-dessus et lister les sorties pour les fenêtres existantes, ressemblant à (en utilisant
python
):Complications
Cela semble simple. Cependant, comme toujours, la réalité est un peu plus compliquée. Il y a quelques exceptions et complications dont nous devons prendre soin:
Idle
(python
IDE) outkinter
sont de telles fenêtres.wmctrl
, mais n'apparaissent pas séparément dans Dash.LibreOffice
où tous les modules ont le nom du processussoffice.bin
. Dans le même temps, l'exécution de la commandesoffice.bin
ne fonctionnera pas. Dans le cas où vous devez identifier les modules (Calc
,Writer
etc.) séparément, vous devrez obtenir des informations supplémentaires, du nom de la fenêtre par exemple.gnome-terminal
, tel qu'il apparaît dans la liste des processus, comme dans la sortie deps -e ww
. En 14.04,gnome-terminal
apparaît commegnome-terminal
, cependant, 15,04 / 15,10 il montre:/usr/lib/gnome-terminal/gnome-terminal-server
.Ce que nous devons corriger au moins
Pour résoudre les problèmes les plus importants ci-dessus, vous devez:
ajouter une vérification si la fenêtre est une fenêtre "réelle" ou "normale", en vérifiant avec
Si la sortie comprend la ligne:
La fenêtre est une fenêtre valide au sens du lanceur Unity
gnome-terminal
dans15.x
(en supposant que vous vouliez que le nom du processus présenté soitgnome-terminal
), nous devons ajouter une exception, pour renommer le nom du processusgnome-terminal
s'il apparaît comme/usr/lib/gnome-terminal/gnome-terminal-server
Scénario
Comment utiliser
Le script a besoin de
wmctrl
:copiez le script ci-dessus dans un fichier vide, enregistrez-le sous
get_running.py
exécutez-le par la commande:
Il sortira comme:
ou, exécutez avec l'argument
-list
:Remarques
D'après votre question, il n'est pas complètement clair quel est exactement le but de la liste trouvée. Si vous avez besoin d'avoir le nom de l'application, tel qu'il apparaît dans l'interface (noms "lisibles"), une approche complètement différente pourrait convenir:
.desktop
fichier/usr/share/applications
. Dans la plupart des cas, nous pouvons conclure le nom du processus et le nom d'interface de l'application à partir de son.desktop
fichier. En utilisant ces informations, nous pourrions relativement facilement créer une liste d'applications GUI en cours d'exécution, présentées par leur nom "lisible".Dans ce cas également, la réalité est également plus compliquée que la théorie, comme expliqué ici .
la source