%3A.png)
Tengo una combinación de teclas para ToggleShowDesktop
. Cuando presiono Menu, 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. Lo estoy usando terminator
como fondo de pantalla, es decir, cuando comienzo 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 configurarlo ToggleShowDesktop
para que no afecte la capa "inferior"? es decir, quiero que sólo 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, después de todo, estos detalles parecen ser relevantes:
Mi configuración tiene 2 monitores y 4 escritorios virtuales. Así que tengo "8 fondos de pantalla" para llenar terminator
. Por lo que leí anteriormente, supuse que estas 8 ventanas tendrán que ser distinguibles, así que he creado 8 símbolos 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, /.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 bastante complicado y poco elegante, pero no vi otra manera mejor de hacerlo.
Ahora, cuando sigo las instrucciones de @Suchipi, sucede lo siguiente:
1) la pieza devilspie
funciona bien. Resulta que solo necesito una definición que cubra todas mis 8 ventanas (en sustitución matches
de is
):
$ cat .devilspie/terminator.ds
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)
Y puedo ver con obxprop
eso 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 complicada: en primer lugar, usar 100%
para la resolución no funciona, es decir, la ventana desaparece (no la veo). Cuando se utiliza estática:
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 el xdotool
comando en el escritorio específico que quiero afectar. es decir, tengo que cambiar al escritorio 2
y ejecutarlo xdotool search --class "Terminator-wallpaper-2a"
y luego funciona.
Además, me preguntaba si esto windowsize %1
juega algún papel aquí.
ACTUALIZACIÓN 2019-12-07:
Entonces, ahora estoy intentando 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 sólo 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 el terminal, pero no puedo escribir en él.
Este problema no existía antes, en la versión anterior de Openbox.
Como puedo solucionar este problema ?
Respuesta1
Openbox le dará la funcionalidad que busca a las ventanas cuya _OB_APP_TYPE
propiedad esté configurada en "escritorio" (puede usarla obxprop
para verificar las propiedades de una ventana). Entonces necesitamos establecer el_OB_APP_TYPE
ventana de su terminador en "escritorio" para que esto suceda.
Al leer el código fuente de Openbox, client.c
pude ver que _OB_APP_TYPE
se hereda de _NET_WM_WINDOW_TYPE
. Entonces 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
los archivos de configuración:
mkdir ~/.devilspie
Ahora agregaremos un archivo de configuración que le indicará devilspie
buscar aplicaciones nombradas terminator
y establecer su tipo de ventana en desktop
. Pon lo siguiente en ~/.devilspie/terminator.ds
:
(if
(is (application_name) "terminator")
(begin
(wintype "desktop")
)
)
Ahora, si ejecuta devilspie
(o devilspie -a
afecta las ventanas existentes en lugar de las recién creadas), notará si usa obxprop
un terminador que _NET_WM_WINDOW_TYPE
ha cambiado, pero _OB_APP_TYPE
que aún no lo ha hecho. Usemos xdotool
para desasignar y reasignar la ventana (en la terminología 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 la terminator
ventana, desasignarla, esperar hasta que se desasigne y luego reasignarla. También cambiamos el tamaño de la ventana porque cuando fue desasignada y reasignada perdió su maximización:
xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768
Reemplace 1024 768
con su resolución. También tenga en cuenta que las versiones más nuevas xdotool
que las que se encuentran en el repositorio apt de Debian admiten el uso 100% 100%
en lugar de una resolución estática. Puede encontrar .deb
paquetes para versiones más recientes dexdotool
enPágina de código de Google 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 que vinculó ToggleShowDesktop
varias veces, la ventana del terminador siempre permanecerá activa.
Para que esto sea persistente, querrás ejecutar estos comandos al iniciar sesión. ElPágina Wiki de LXDE para LXSessionmuestra varias formas diferentes de hacer esto (global, por usuario, por perfil, etc.). Suponiendo que desea estas configuraciones solo para su usuario y bajo el perfil LXDE (el predeterminado), querrá editar ~/.config/lxsession/LXDE/autostart
y agregar los comandos que ejecutamos, teniendo en cuenta que el comando xdotool debe ejecutarse después de que se haya renderizado la ventana del terminador. Entonces haz algo como (sleep 1s & xdotool ...)
. También puedes configurar estos comandos como combinaciones de teclas en Openbox si lo deseas.
Respuesta2
Se me ocurrió el siguiente script que parece que resuelve tus problemas.
#!/bin/sh
make_wid_desktop_app() {
# set the type of the window to
xprop -id $1 -f _NET_WM_WINDOW_TYPE 32a -set _NET_WM_WINDOW_TYPE _NET_WM_WINDOW_TYPE_DESKTOP
xprop -id $1 -f _MOTIF_WM_HINTS 32c -set _MOTIF_WM_HINTS 0
xprop -id $1 -remove _MOTIF_WM_HINTS
}
get_wids() {
xdotool search --class $1
}
for id in $(get_wids $1); do
make_wid_desktop_app $id;
done
Puedes usarlo así.
desktop_terminal terminator-wallpaper
Busca todas las ventanas que tengan la clase terminator-wallpaper
with xdotools
y la cambia _NET_WM_WINDOW_TYPE
a _NET_WM_WINDOW_TYPE_DESKTOP
with xprop
.
Dado que Openbox no verifica si este tipo se cambió después de crear una ventana, debemos engañar a Openbox para que haga esto. Esto se hace configurándolos _MOTIF_WM_HINTS
y eliminándolos.
Lo mismo se puede lograr devilspie
cuando agregas
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
(undecorate)
)
)
ya que configurar la ventana (undecorate)
también es usar el _MOTIF_WM_HINTS
truco.
Respuesta3
Si entiendo la pregunta correctamente, entonces su pregunta es la siguiente: cada vez que hace clic en, ToggleShowDesktop
desea que se minimicen todas las aplicaciones abiertas excepto terminator
.
Si esto es así, entonces puede lograrlo escribiendo un script contenedor, que llamará internamente dos comandos.
#!/bin/sh
xdotool key "super+d"
wmctrl -a "terminator"
Reemplace el script/binario ToggleShowDesktop real por el script contenedor mencionado anteriormente
Puede parecer un truco sucio, pero funciona.