Para tener una opción de "minimizar ventana" haciendo clic derecho en un ícono en el iniciador de Unity (Ubuntu 14.04), seguí las instrucciones detalladas aquí sobre cómo cambiar un .desktop
archivo e hice un Firefox
iniciador personalizado en la ~/.local/share/applications/
carpeta. La parte relevante del archivo .desktop es:
Actions=NewWindow;NewPrivateWindow;Minimize
[Desktop Action NewWindow]
Name=Open a New Window
Exec=firefox -new-window
OnlyShowIn=Unity;
[Desktop Action NewPrivateWindow]
Name=Open a New Private Window
Exec=firefox -private-window
OnlyShowIn=Unity;
[Desktop Action Minimize]
Name=Minimize Windows
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
OnlyShowIn=Unity;
La acción de escritorio "Minimizar" invoca un script de shell simple, minimize.sh
que tiene el siguiente contenido:
#/bin/bash
name=$1
for i in $(xdotool search --class "$name"); do
xdotool windowminimize $i
done
El script usa xdotool
, que se puede instalar desde los repositorios oficiales, para encontrar todas las firefox
ventanas, iterar sobre ellas y minimizarlas.
El script funciona y la opción del menú derecho del iniciador "Minimizar Windows" también funciona, pero tan pronto como se minimizan las ventanas, el puntero del mouse se pone en modo "ocupado" y permanece así durante unos 20 segundos (aunque las acciones del mouse siguen siendo sensible).
¿Alguien sabe por qué iniciar un script de shell desde una opción de menú correcta en Unity podría conducir a este comportamiento?
EDITAR : Aparentemente, el período de espera es inevitable, como se explica en la respuesta de Jacob Vlijm. Como el mouse permanece receptivo, evitar la transformación del puntero en la rueda giratoria es una solución estética parcial, como se explica en askubuntu .
EDIT2 : dar al sistema una ventana falsa es una mejor solución, como explica Jacob a continuación.
Respuestas:
Excelente pregunta
La causa
Normalmente, al iniciar aplicaciones GUI desde el Lanzador de Unity, el iniciador espera a que aparezca una ventana. Mientras espera, muestra la "rueca". Sin embargo, no esperará para siempre; Después de unos 20 segundos, el iniciador asume que la ventana no aparecerá y deja de esperar.
1. El comando principal del iniciador de una aplicación
En un
.desktop
archivo, relacionado con la primeraExec=
línea (el comando principal), puede decirle al iniciador que espere o no, en una línea:para hacerla esperar, o
para que no espere
2. Elementos de la lista rápida de un lanzador
Sin embargo, para posibles elementos de lista rápida (clic derecho) de un lanzador, el valor predeterminado es
StartupNotify=true
. Desafortunadamente, este valor es fijo y no puede ser cambiado por nada.Eso significa que si comienzas cualquier comando haciendo clic derecho en el ícono del iniciador en el Iniciador de Unity, el iniciador espera una ventana y la espera, mostrando la rueda giratoria.
La conclusión es que, aunque se puede explicar, parece que no hay solución al problema en este momento, aparte de crear un iniciador dedicado para su script y agregar la línea
StartupNotify=false
al archivo.La prueba
Puede probar el comportamiento usted mismo. Crea dos lanzadores:
y:
Guárdelos como
test1.desktop
ytest2.desktop
arrastre ambos lanzadores al iniciador de Unity. Haga clic en ellos y vea la diferencia en el comportamiento.Editar; si realmente te molesta, dale a Unity una ventana falsa
Si tiene muchos scripts en las listas rápidas, y / o realmente le molesta, hay otra solución cosmética; podemos falsificar , invisible (totalmente transparente) para mostrar una ventana, que se incluirá en su secuencia de comandos. su guión sería entonces (por ejemplo)
donde el comando
fake_window
llamará a nuestra ventana (falsa), haciendo que Unity termine la rueda giratoria.Como instalar
~/bin
Copie el script a continuación en un archivo vacío, guárdelo como
fake_window
(sin extensión)~/bin
y hágalo ejecutableAgregue al final de su script el comando:
Cerrar sesión y volver a iniciar sesión (o ejecutar
source ~/.profile
)Eso es todo, la rueda ahora solo girará mientras se ejecute el script.
Explicación
El guión hace crear una ventana minimalista. Sin embargo, la ventana es totalmente transparente y tiene un tamaño de 0x0 píxeles y, por lo tanto, es invisible. Se destruirá a sí mismo instantáneamente una vez que exista.
Llamando a la ventana al final de su guión, satisfará el deseo de Unity de una ventana, deteniendo la rueda para girar.
fuente
Solo quería agregar una implementación alternativa de fake_window que sea un poco más simple y no active advertencias de Python en un sistema Ubuntu 16.04.
fuente