Tengo una combinación de teclas para ToggleShowDesktop
. Cuando presiono Menú , todas las ventanas se minimizan y veo mi fondo de escritorio (como se esperaba):
<keybind key="Menu">
<action name="ToggleShowDesktop"/>
</keybind>
Ahora el problema es que no quiero ver mi fondo de pantalla. Estoy usando terminator
como fondo de pantalla, es decir, cuando inicio terminator
, se coloca en la capa de abajo:
<application name="terminator">
<focus>yes</focus>
<layer>below</layer>
<desktop>1</desktop>
<position>
<y>0</y>
<x>0</x>
</position>
<skip_taskbar>yes</skip_taskbar>
<maximized>true</maximized>
</application>
¿Es posible configurar ToggleShowDesktop
? para que no se vea afectada la capa "debajo"? es decir, solo quiero que se minimicen las ventanas normales, pero no terminator
. En otras palabras, quiero que Terminator se comporte como lo haría un fondo de pantalla normal:no se verá afectado por ToggleShowDesktop
.
Estoy usando Debian Wheezy
con LXDE
.
(usando el método sugerido por @Suchipi):
He omitido algunos detalles de mi pregunta original, y ahora estos detalles parecen ser relevantes después de todo:
Mi configuración tiene 2 monitores y 4 escritorios virtuales. Así que tengo "8 fondos de pantalla" para llenar con terminator
. Por lo que he leído anteriormente, asumí que estas 8 ventanas tendrán que ser distinguibles, así que he creado 8 symliks para terminator
, es decir:
/usr/bin/terminator-wallpaper-1a -> terminator
/usr/bin/terminator-wallpaper-1b -> terminator
/usr/bin/terminator-wallpaper-2a -> terminator
...
En efecto creó 8 aplicaciones diferentes (con diferentes nombres).
Del mismo modo, en .config/openbox/lxde-rc.xml
No tengo 1, sino 8 definiciones:
<application name="terminator-wallpaper-1a">
<desktop>1</desktop>
<position>
<monitor>1</monitor>
</position>
...
</application>
<application name="terminator-wallpaper-1b">
<desktop>1</desktop>
<position>
<monitor>2</monitor>
</position>
...
</application>
<application name="terminator-wallpaper-2a">
<desktop>2</desktop>
<position>
<monitor>1</monitor>
</position>
...
</application>
Y por último, en /.config/autostart
Tengo 8 *.desktop
archivos, que se iniciarán automáticamente después de iniciar sesión:
/.config/autostar/terminator-wallpaper-1a.desktop
/.config/autostar/terminator-wallpaper-1b.desktop
/.config/autostar/terminator-wallpaper-2a.desktop
Esto me parece demasiado complicado y poco elegante, pero no encontré una mejor manera de hacerlo.
Ahora, cuando sigo las instrucciones de @Suchipi, sucede lo siguiente:
1) la parte con devilspie
funciona bien Resulta que solo necesito una definición que cubra todas mis 8 ventanas (sustituyendo matches
para is
):
$ cat .devilspie/terminator.ds
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)
Y puedo ver con obxprop
que funciona como se esperaba.
$ obxprop | egrep '(_OB_APP|_NET_WM_WINDOW_TYPE)'
_OB_APP_TYPE(UTF8_STRING) = "normal"
_OB_APP_TITLE(UTF8_STRING) = "None"
_OB_APP_CLASS(UTF8_STRING) = "Terminator-wallpaper-1"
_OB_APP_NAME(UTF8_STRING) = "terminator-wallpaper-1"
_OB_APP_ROLE(UTF8_STRING) =
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DESKTOP
2) ahora la parte con xdotool
es más complicado:
en primer lugar, usar 100%
porque la resolución no funciona, es decir, la ventana desaparece (no la veo). Al usar estático:
xdotool search --class "Terminator-wallpaper-1a" windowunmap --sync windowmap windowsize %1 1920 1056
esto funciona para el monitor 1 del escritorio 1. Pero cuando lo ejecuto para otros escritorios, no tiene ningún efecto, es decir:
xdotool search --class "Terminator-wallpaper-2a" windowunmap --sync windowmap windowsize %1 1920 1056
En realidad, también funciona para otros escritorios, pero solo si ejecuto xdotool
comando en el escritorio específico, que quiero afectar. es decir, tengo que cambiar al escritorio 2
y ejecuta xdotool search --class "Terminator-wallpaper-2a"
y luego funciona.
Además, me preguntaba si windowsize %1
juega algún papel aquí.
ACTUALIZACIÓN 2019-12-07:
entonces, ahora estoy tratando de configurar el mismo sistema en Debian Buster (Openbox 3.6) y estoy experimentando un nuevo problema. Sospecho que alguna propiedad ha cambiado en la nueva versión de openbox.
Todo parece como antes, es decir:
terminator-wallpaper-1a --profile wallpaper -b &
terminator-wallpaper-1b --profile wallpaper -b &
xdotool search --class 'Terminator-wallpaper-1a' windowunmap --sync windowmap windowsize %1 1920 1180
xdotool search --class 'Terminator-wallpaper-1b' windowunmap --sync windowmap windowsize %1 1920 1180
Me salen dos terminales como fondo de pantalla. Pero el problema es que solo uno de estos terminales es realmente utilizable. El otro está "desenfocado" e incluso cuando hago clic en él con el mouse, no puedo enfocarlo. Es decir, puedo ver la terminal, pero no puedo escribir en ella.
Relacionado:¿Configurar postfix para aceptar correo de dos WAN?Este problema no existía antes, en la versión anterior de Openbox
¿Cómo puedo solucionar este problema?
Respuesta aceptada:
Openbox dará la funcionalidad que buscas a las ventanas cuyo _OB_APP_TYPE
propiedad está establecida en "escritorio" (puede usar obxprop
para verificar las propiedades de una ventana).
Entonces, debemos configurar el _OB_APP_TYPE
para su ventana de terminador en "escritorio" para que esto suceda.
Leyendo el código fuente de openbox, en client.c
Pude ver que _OB_APP_TYPE
se hereda de _NET_WM_WINDOW_TYPE
. Así que busqué una aplicación que pudiera cambiar _NET_WM_WINDOW_TYPE
. La aplicación que encontré se llama devilspie
.
Primero, instálalo:
sudo apt-get install devilspie
A continuación, crearemos la carpeta para devilspie
archivos de configuración:
mkdir ~/.devilspie
Ahora agregaremos un archivo de configuración que le dice a devilspie
para buscar aplicaciones llamadas terminator
y establezca el tipo de ventana de ellos en desktop
. Pon lo siguiente en ~/.devilspie/terminator.ds
:
(if
(is (application_name) "terminator")
(begin
(wintype "desktop")
)
)
Ahora, si ejecutas devilspie
(o devilspie -a
para afectar las ventanas existentes en lugar de solo las recién creadas) notará si usa obxprop
en el terminador que _NET_WM_WINDOW_TYPE
ha cambiado, pero _OB_APP_TYPE
todavía no ha. Usemos xdotool
para desasignar y reasignar la ventana (en la terminología de X11, esto significa que dejaremos de dibujar y comenzaremos a dibujar la ventana), lo que debería obligar a openbox a notar el valor.
Instalar xdotool:
sudo apt-get install xdotool
Luego ejecutamos el siguiente script para encontrar el terminator
ventana, desasignarlo, esperar hasta que se haya desasignado, luego reasignarlo. También cambiamos el tamaño de la ventana porque cuando se desasignó y reasignó perdió su maximización:
xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768
Reemplazar 1024 768
con tu resolución. También tenga en cuenta que las versiones más recientes de xdotool
que los que se encuentran en el soporte de repositorio apt de Debian usando 100% 100%
en lugar de una resolución estática. Puede encontrar .deb
paquetes para versiones más nuevas de xdotool
en la página de googlecode de xdotool.
La ventana del terminador quedará inmediatamente sin decoración, y si ahora usa obxprop
, verá que ambos valores se han configurado correctamente. Si ahora presiona la tecla, vinculará ToggleShowDesktop
varias veces, la ventana del terminador siempre permanecerá activa.
Para que esto sea persistente, querrá ejecutar estos comandos al iniciar sesión. La página wiki de LXDE para LXSession muestra varias formas diferentes de hacer esto (global, por usuario, por perfil, etc.). Suponiendo que desea esta configuración solo para su usuario y bajo el perfil LXDE (el predeterminado), querrá editar ~/.config/lxsession/LXDE/autostart
y agregue los comandos que ejecutamos, teniendo en cuenta que el comando xdotool debe ejecutarse después de que se haya renderizado la ventana del terminador, así que haga algo como (sleep 1s & xdotool ...)
. También puede configurar estos comandos como combinaciones de teclas en openbox si lo desea.