(usando el método sugerido por @Suchipi):

(usando el método sugerido por @Suchipi):

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 terminatorcomo 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 ToggleShowDesktoppara 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 Wheezycon 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.xmlno 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/autostarttengo 8 *.desktoparchivos 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 devilspiefunciona bien. Resulta que solo necesito una definición que cubra todas mis 8 ventanas (en sustitución matchesde is):

$ cat .devilspie/terminator.ds 
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)

Y puedo ver con obxpropeso 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 xdotooles 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 xdotoolcomando en el escritorio específico que quiero afectar. es decir, tengo que cambiar al escritorio 2y ejecutarlo xdotool search --class "Terminator-wallpaper-2a"y luego funciona.

Además, me preguntaba si esto windowsize %1juega 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_TYPEpropiedad esté configurada en "escritorio" (puede usarla obxproppara 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.cpude ver que _OB_APP_TYPEse 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 devilspielos archivos de configuración:

mkdir ~/.devilspie

Ahora agregaremos un archivo de configuración que le indicará devilspiebuscar aplicaciones nombradas terminatory 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 -aafecta las ventanas existentes en lugar de las recién creadas), notará si usa obxpropun terminador que _NET_WM_WINDOW_TYPEha cambiado, pero _OB_APP_TYPEque aún no lo ha hecho. Usemos xdotoolpara 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 terminatorventana, 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 768con su resolución. También tenga en cuenta que las versiones más nuevas xdotoolque 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 .debpaquetes 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ó ToggleShowDesktopvarias 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/autostarty 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-wallpaperwith xdotoolsy la cambia _NET_WM_WINDOW_TYPEa _NET_WM_WINDOW_TYPE_DESKTOPwith 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_HINTSy eliminándolos.

Lo mismo se puede lograr devilspiecuando agregas

(if
   (matches (application_name) "terminator-wallpaper")
   (begin
       (wintype "desktop")
       (undecorate)
   )
)

ya que configurar la ventana (undecorate)también es usar el _MOTIF_WM_HINTStruco.

Respuesta3

Si entiendo la pregunta correctamente, entonces su pregunta es la siguiente: cada vez que hace clic en, ToggleShowDesktopdesea 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.

información relacionada