GNU/Linux >> Tutoriales Linux >  >> Linux

¿Configurar Toggleshowdesktop en Openbox para actuar solo en la capa especificada?

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.

Relacionado:¿Qué comandos de Unix se pueden usar como semáforo/bloqueo?
Linux
  1. Cómo instalar y configurar el cliente Putty SSH en el escritorio de Linux

  2. Cómo configurar un puente Linux para que actúe como concentrador en lugar de conmutador

  3. No se puede ejecutar el comando de configuración:¿"no existe tal archivo o directorio"?

  4. ¿Cómo configurar el escritorio para una dirección IP estática?

  5. grep coincide solo con líneas en un rango específico

Cómo configurar la dirección IP estática en Ubuntu 18.04 (escritorio)

Cómo configurar la dirección IP estática en Fedora Desktop

Cómo instalar y configurar Sysstat en el escritorio de Linux

Cómo instalar y configurar el servidor Apache SVN en el escritorio de Linux

Cómo instalar y configurar Google Cloud SDK en Linux Desktop

¿Hay alguna manera de tomar una captura de pantalla en el escritorio KDE presionando solo la tecla PrtSc?