Potrzebuję listy tylko tych aplikacji, które są obecnie otwarte / uruchomione w Dash, te, które mają małe białe strzałki po lewej stronie ikony.
Czy jest jakiś sposób, aby to zdobyć?
14.04
unity-dash
process
launcher
ovidb
źródło
źródło
Odpowiedzi:
Sposób na zrobienie tego
qdbus
iorg.ayatana.bamf
interfejs.Lista otwartych aplikacji według
.desktop
pliku:Korzystanie
org.ayatana.bamf.matcher.RunningApplications
iorg.ayatana.bamf.view.Name
metodyźródło
Interesujące pytanie.
Jak zawsze, istnieją różne sposoby uzyskania listy tych aplikacji, każda z nich ma określone wady i zalety.
Uzyskiwanie listy procesów reprezentowanych w programie uruchamiającym za pomocą listy okien
Ponieważ w programie uruchamiającym pojawiają się tylko aplikacje z (odwzorowanym) oknem, używając:
(
wmctrl
domyślnie nie jest instalowany), możemy uzyskać listę otwartych okien i proces, do którego należą okna. Format wyniku jest następujący:gdzie dla nas najważniejsze informacje:
0x05204641
); to jest okno -id12618
); to jest identyfikator procesu (pid), do którego należy okno, i,verhaal (~) - gedit
); to jest nazwa okna .Po otrzymaniu pid możemy wyszukać odpowiednią nazwę procesu za pomocą polecenia:
Możemy napisać powyższe kroki i wyświetlić listę wyników dla istniejących okien, wyglądających jak (za pomocą
python
):Powikłania
Wydaje się to proste. Jednak, jak zawsze, rzeczywistość jest nieco bardziej skomplikowana. Jest kilka wyjątków i komplikacji, które musimy rozwiązać:
Idle
(python
IDE) lubtkinter
są takimi oknami.wmctrl
, ale nie pojawiają się osobno w Dash.LibreOffice
wszystkie moduły mają nazwę procesusoffice.bin
. Jednocześnie uruchomienie poleceniasoffice.bin
nie będzie działać. W przypadku trzeba określić moduły (Calc
,Writer
etc.) osobno, trzeba by uzyskać dodatkowe informacje, z okna za nazwą na przykład.gnome-terminal
, która pojawia się na liście procesów, tak jak na wyjściups -e ww
. W 1404,gnome-terminal
pojawia sięgnome-terminal
jednak w 15.04 / 15.10 to pokazuje:/usr/lib/gnome-terminal/gnome-terminal-server
.Co musimy naprawić przynajmniej
Aby rozwiązać najważniejsze powyższe problemy, musisz:
dodaj zaznaczenie, czy okno jest „prawdziwe” czy „normalne”, sprawdzając za pomocą
Jeśli wynik zawiera wiersz:
Okno jest prawidłowym oknem w sensie Unity Launcher
gnome-terminal
w15.x
(zakładając, że chcesz mieć przedstawioną nazwę procesugnome-terminal
), musimy dodać wyjątek, aby zmienić nazwę nazwy procesu na,gnome-terminal
jeśli wygląda na/usr/lib/gnome-terminal/gnome-terminal-server
Scenariusz
Jak używać
Skrypt potrzebuje
wmctrl
:skopiuj powyższy skrypt do pustego pliku, zapisz go jako
get_running.py
uruchom go za pomocą polecenia:
Wyjdzie jak:
lub uruchom z argumentem
-list
:Notatki
Z twojego pytania nie jest całkowicie jasne, jaki jest dokładnie cel znalezionej listy. Jeśli potrzebujesz mieć nazwę aplikacji, tak jak pojawia się ona w interfejsie („czytelne” nazwy), może być odpowiednie zupełnie inne podejście:
.desktop
plik/usr/share/applications
. W większości przypadków możemy wyciągnąć nazwę procesu i nazwę interfejsu aplikacji z jego.desktop
pliku. Korzystając z tych informacji, moglibyśmy stosunkowo łatwo stworzyć listę uruchomionych aplikacji GUI, przedstawionych według ich „czytelnej” nazwy.Jednak również w tym przypadku rzeczywistość jest bardziej skomplikowana niż teoria, jak wyjaśniono tutaj .
źródło