Necesito una lista con solo aquellas aplicaciones que están actualmente abiertas / ejecutándose en Dash, las que tienen esa pequeña flecha blanca en el lado izquierdo del icono.
¿Hay alguna forma de conseguirlo?
14.04
unity-dash
process
launcher
ovidb
fuente
fuente
Respuestas:
La forma de hacerlo
qdbus
eorg.ayatana.bamf
interactuar.Lista de aplicaciones abiertas por
.desktop
archivo:Uso
org.ayatana.bamf.matcher.RunningApplications
yorg.ayatana.bamf.view.Name
métodosfuente
Interesante pregunta.
Como siempre, hay diferentes formas de obtener una lista de estas aplicaciones, cada una con anuncios y desventajas específicas.
Obtener una lista de procesos, representados en el Iniciador, usando la lista de ventanas
Dado que solo las aplicaciones con una ventana (asignada) aparecen en el Iniciador, usando:
(
wmctrl
no está instalado por defecto), podemos obtener una lista de ventanas abiertas y el identificador de proceso al que pertenecen las ventanas. El formato de la salida es:donde para nosotros la información más importante está en:
0x05204641
); esta es la ventana -id12618
); esta es la identificación del proceso (pid) a la que pertenece la ventana, yverhaal (~) - gedit
); Este es el nombre de la ventana .Una vez que tenemos el pid, podemos buscar el nombre del proceso correspondiente mediante el comando:
Podemos guiar los pasos anteriores y enumerar los resultados para las ventanas existentes, con el siguiente aspecto (usando
python
):Complicaciones
Esto parece sencillo. Sin embargo, como siempre, la realidad es un poco más complicada. Hay algunas excepciones y complicaciones de las que debemos ocuparnos:
Idle
(python
IDE) otkinter
son tales ventanas.wmctrl
, pero no aparecen por separado en Dash.LibreOffice
que todos los módulos tengan el nombre del procesosoffice.bin
. Al mismo tiempo, ejecutar el comandosoffice.bin
no funcionará. En caso de que necesite identificar los módulos (Calc
,Writer
etc.) por separado, necesitaría obtener información adicional, por ejemplo, del nombre de la ventana .gnome-terminal
, como aparece en la lista de procesos, como en la salida deps -e ww
. En 14.04,gnome-terminal
aparece comognome-terminal
, sin embargo, en 15.04 / 15.10 se muestra:/usr/lib/gnome-terminal/gnome-terminal-server
.Lo que necesitamos arreglar al menos
Para solucionar los problemas más importantes anteriores, debe:
agregue un cheque si la ventana es una ventana "real" o "normal", verificando con
Si la salida incluye la línea:
La ventana es una ventana válida en el sentido de Unity Launcher
gnome-terminal
en in15.x
(suponiendo que desea que sea el nombre del proceso presentadognome-terminal
) necesitamos agregar una excepción, para cambiar el nombre del procesognome-terminal
si aparece como/usr/lib/gnome-terminal/gnome-terminal-server
Guión
Cómo utilizar
El script necesita
wmctrl
:copie el script anterior en un archivo vacío, guárdelo como
get_running.py
ejecútelo con el comando:
Saldrá como:
o, corre con el argumento
-list
:Notas
De su pregunta, no está completamente claro cuál es exactamente el propósito de la lista encontrada. Si necesita tener el nombre de la aplicación, tal como aparece en la interfaz (nombres "legibles"), un enfoque completamente diferente podría ser adecuado:
.desktop
archivo/usr/share/applications
. En la mayoría de los casos, podemos concluir el nombre del proceso y el nombre de la interfaz de la aplicación a partir de su.desktop
archivo. Con esta información, podríamos crear una lista de aplicaciones GUI en ejecución relativamente fácil, presentada por su nombre "legible".Sin embargo, también en este caso, la realidad también es más complicada que la teoría, como se explica aquí .
fuente