Ich benötige eine Liste mit nur den Apps, die derzeit in Dash geöffnet sind / ausgeführt werden. Diese Apps haben die kleinen weißen Pfeile auf der linken Seite des Symbols.
Gibt es eine Möglichkeit, es zu bekommen?
14.04
unity-dash
process
launcher
ovidb
quelle
quelle
Antworten:
Der Weg, es mit
qdbus
undorg.ayatana.bamf
Schnittstelle zu tun .Liste der geöffneten Anwendungen nach
.desktop
Datei:Verwendung
org.ayatana.bamf.matcher.RunningApplications
undorg.ayatana.bamf.view.Name
Methodenquelle
Interessante Frage.
Wie immer gibt es verschiedene Möglichkeiten, eine Liste dieser Anwendungen zu erhalten, jede mit spezifischen Anzeigen- und Nachteilen.
Abrufen einer Liste von Prozessen, die im Launcher mithilfe der Fensterliste dargestellt werden
Da im Launcher nur Anwendungen mit einem (zugeordneten) Fenster angezeigt werden, verwenden Sie:
(
wmctrl
ist nicht standardmäßig installiert), wir können eine Liste der geöffneten Fenster und die Prozess-ID erhalten, zu der die Fenster gehören. Das Format der Ausgabe lautet:Wo für uns die wichtigsten Informationen sind:
0x05204641
); Dies ist die Fenster-ID12618
); Dies ist die Prozess-ID (pid), zu der das Fenster gehört, und,verhaal (~) - gedit
); dies ist der Fenstername .Sobald wir die pid haben, können wir den entsprechenden Prozess nachschlagen Namen mit dem Befehl:
Wir können die obigen Schritte skripten und die Ausgabe (n) für vorhandene Fenster wie folgt
python
auflisten:Komplikationen
Dies scheint unkompliziert zu sein. Die Realität ist jedoch wie immer etwas komplizierter. Es gibt einige Ausnahmen und Komplikationen, um die wir uns kümmern müssen:
Idle
(python
IDE) odertkinter
sind solche Fenster.wmctrl
, in Dash jedoch nicht separat angezeigt.LibreOffice
wenn alle Module den Prozessnamen habensoffice.bin
. Gleichzeitig funktioniert das Ausführen des Befehlssoffice.bin
nicht. Für den Fall , müssen Sie die identifizieren Module (Calc
,Writer
etc.) getrennt, müssen Sie zusätzliche Informationen zu erhalten, aus dem Fenster Namen zum Beispiel.gnome-terminal
, wie er in der Prozessliste angezeigt wird, wie in der Ausgabe vonps -e ww
. In 14.04gnome-terminal
erscheint jedoch wiegnome-terminal
in 15.04 / 15.10 :/usr/lib/gnome-terminal/gnome-terminal-server
.Was wir zumindest reparieren müssen
Um die oben genannten wichtigsten Probleme zu beheben, müssen Sie:
Fügen Sie eine Überprüfung hinzu, ob das Fenster ein "echtes" oder "normales" Fenster ist, und überprüfen Sie mit
Wenn die Ausgabe die Zeile enthält:
Das Fenster ist ein gültiges Fenster im Sinne des Unity Launcher
gnome-terminal
in zu15.x
korrigieren (vorausgesetzt, Sie möchten, dass der präsentierte Prozessname lautetgnome-terminal
), müssen Sie eine Ausnahme hinzufügen, um den Prozessnamen in umzubenennen,gnome-terminal
wenn er als angezeigt wird/usr/lib/gnome-terminal/gnome-terminal-server
Skript
Wie benutzt man
Das Skript benötigt
wmctrl
:Kopieren Sie das obige Skript in eine leere Datei und speichern Sie es unter
get_running.py
Führen Sie es mit dem folgenden Befehl aus:
Es wird wie folgt ausgegeben:
oder führen Sie mit dem Argument aus
-list
:Anmerkungen
Aus Ihrer Frage geht nicht ganz hervor, was genau der Zweck der gefundenen Liste ist. Wenn Sie den Namen der Anwendung benötigen, wie er in der Benutzeroberfläche angezeigt wird ("lesbare" Namen), ist möglicherweise ein völlig anderer Ansatz geeignet:
.desktop
Datei in/usr/share/applications
. In den meisten Fällen können wir den Prozessnamen und den Schnittstellennamen der Anwendung aus ihrer.desktop
Datei schließen. Mit diesen Informationen könnten wir relativ einfach eine Liste laufender GUI-Anwendungen erstellen, die durch ihren "lesbaren" Namen dargestellt wird.Auch in diesem Fall ist die Realität jedoch komplizierter als die Theorie, wie hier erläutert .
quelle