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

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

Eu tenho um atalho de teclado para ToggleShowDesktop. Quando pressiono Menu, todas as janelas são minimizadas e vejo meu papel de parede da área de trabalho (conforme esperado):

<keybind key="Menu">
  <action name="ToggleShowDesktop"/>
</keybind>

Agora o problema é que não quero ver meu papel de parede. Estou usando terminatorcomo papel de parede, ou seja, quando inicio terminator, ele é colocado na camada abaixo:

<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>

É possível configurar ToggleShowDesktoppara que a camada "abaixo" não seja afetada? ou seja, quero que apenas as janelas normais sejam minimizadas, mas não terminator. Em outras palavras, quero que o terminador se comporte como um papel de parede normal - não seja afetado por ToggleShowDesktop.

Estou usando Debian Wheezycom LXDE.

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

Deixei de fora alguns detalhes da minha pergunta original e agora esses detalhes parecem ser relevantes, afinal:

Minha configuração possui 2 monitores e 4 desktops virtuais. Portanto, tenho "8 papéis de parede" para preencher terminator. Pelo que li anteriormente, presumi que essas 8 janelas terão que ser distinguíveis, então criei 8 símbolos para terminator, .ie:

/usr/bin/terminator-wallpaper-1a  -> terminator
/usr/bin/terminator-wallpaper-1b  -> terminator
/usr/bin/terminator-wallpaper-2a  -> terminator
...

Com efeito foram criados 8 aplicativos diferentes (com nomes diferentes).

Da mesma forma, .config/openbox/lxde-rc.xmlnão tenho 1, mas 8 definições:

<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>

E por último, /.config/autostarttenho 8 *.desktoparquivos, para serem iniciados automaticamente após o login:

/.config/autostar/terminator-wallpaper-1a.desktop
/.config/autostar/terminator-wallpaper-1b.desktop
/.config/autostar/terminator-wallpaper-2a.desktop

Isso me parece muito complicado e deselegante, mas não vi maneira melhor de fazer isso.

Agora, quando sigo as instruções do @Suchipi, acontece o seguinte:

1) a parte com devilspiefunciona bem. Acontece que preciso apenas de uma definição que cubra todas as minhas 8 janelas (substituindo matches) is:

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

E posso ver obxpropque funciona conforme o esperado.

$ 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) agora a parte com xdotoolé mais complicada: antes de mais nada, usar 100%para a resolução não funciona, ou seja, a janela desaparece (não vejo). Ao usar estática:

xdotool search --class "Terminator-wallpaper-1a" windowunmap --sync windowmap windowsize %1 1920 1056

isso funciona para o monitor 1 da área de trabalho 1. Mas quando executo para outros desktops, não tem efeito, ou seja:

xdotool search --class "Terminator-wallpaper-2a" windowunmap --sync windowmap windowsize %1 1920 1056

Na verdade, funciona também para outras áreas de trabalho, mas apenas se eu executar o xdotoolcomando na área de trabalho específica que desejo afetar. ou seja, tenho que mudar para a área de trabalho 2e executar xdotool search --class "Terminator-wallpaper-2a"e então funciona.

Além disso, eu queria saber se windowsize %1desempenha algum papel aqui.

ATUALIZAÇÃO 07/12/2019:

então, agora estou tentando configurar o mesmo sistema no Debian Buster (Openbox 3.6) e estou enfrentando um novo problema. Suspeito que alguma propriedade tenha mudado na nova versão do openbox.

Tudo parece como antes, ou seja:

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

Recebo dois terminais como papel de parede. Mas o problema é que apenas um desses terminais é realmente utilizável. O outro está "desfocado" e mesmo quando clico nele com o mouse, não consigo focalizá-lo. Ou seja, consigo ver o terminal, mas não consigo digitar nele.

Este problema não existia antes, na versão mais antiga do Openbox

Como posso resolver este problema ?

Responder1

O Openbox dará a funcionalidade que você procura às janelas cuja _OB_APP_TYPEpropriedade esteja definida como "desktop" (você pode usar obxproppara verificar as propriedades de uma janela). Portanto, precisamos definir a _OB_APP_TYPEjanela do seu terminador como "desktop" para que isso aconteça.

Lendo o código-fonte do openbox, client.cpude ver que _OB_APP_TYPEé herdado de _NET_WM_WINDOW_TYPE. Então procurei um aplicativo que pudesse mudar o _NET_WM_WINDOW_TYPE. O aplicativo que encontrei se chama devilspie.

Primeiro, instale-o:

sudo apt-get install devilspie

A seguir, criaremos a pasta para devilspieos arquivos de configuração:

mkdir ~/.devilspie

Agora adicionaremos um arquivo de configuração que informa devilspiepara procurar aplicativos nomeados terminatore definir o tipo de janela deles como desktop. Coloque o seguinte em ~/.devilspie/terminator.ds:

(if
(is (application_name) "terminator")
(begin
(wintype "desktop")
)
)

Agora, se você executar devilspie(ou devilspie -aafetar as janelas existentes em vez das recém-criadas), notará se usar obxpropum terminador que _NET_WM_WINDOW_TYPEmudou, mas _OB_APP_TYPEainda não. Vamos usar xdotoolpara desmapear e remapear a janela (na terminologia X11 isso significa que vamos parar de desenhar e começar a desenhar a janela), o que deve forçar o openbox a perceber o valor.

Instale o xdotool:

sudo apt-get install xdotool

Em seguida, executamos o script a seguir para encontrar a terminatorjanela, desmapeá-la, esperar até que ela seja desmapeada e, em seguida, remapeá-la. Também redimensionamos a janela porque quando ela foi desmapeada e remapeada ela perdeu sua maximização:

xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768

Substitua 1024 768pela sua resolução. Observe também que versões mais recentes xdotooldaquelas encontradas no repositório apt do Debian suportam o uso 100% 100%de uma resolução estática. Você pode encontrar .debpacotes para versões mais recentes xdotoolemPágina googlecode do xdotool.

A janela do terminador ficará imediatamente sem decoração e, se você usar agora obxprop, verá que ambos os valores foram definidos corretamente. Se você pressionar a tecla vinculada ToggleShowDesktopalgumas vezes, a janela do terminador sempre permanecerá ativa.

Para tornar isso persistente, você desejará executar esses comandos no login. OPágina Wiki do LXDE para LXSessionmostra várias maneiras diferentes de fazer isso (global, por usuário, por perfil, etc.). Supondo que você queira essas configurações apenas para o seu usuário e no perfil LXDE (o padrão), você desejará editar ~/.config/lxsession/LXDE/autostarte adicionar os comandos que executamos, tendo em mente que o comando xdotool precisa ser executado após a renderização da janela do terminador, então faça algo como (sleep 1s & xdotool ...). Você também pode configurar esses comandos como atalhos de teclado no openbox, se desejar.

Responder2

Eu criei o seguinte script que parece resolver seus 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

Você pode usá-lo assim.

desktop_terminal terminator-wallpaper

Ele procura todas as janelas que possuem a classe terminator-wallpaperwith xdotoolse muda _NET_WM_WINDOW_TYPEpara _NET_WM_WINDOW_TYPE_DESKTOPwith xprop.

Como o Openbox não verifica se esse tipo foi alterado após a criação de uma janela, precisamos enganar o Openbox para fazer isso. Isso é feito configurando _MOTIF_WM_HINTSe removendo-os.

A mesma coisa pode ser alcançada devilspiequando você adiciona

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

já que definir a janela (undecorate)também está usando o _MOTIF_WM_HINTStruque.

Responder3

Se eu entendi a pergunta corretamente, então sua pergunta é assim: sempre que você clicar em ToggleShowDesktop, você deseja que todos os aplicativos abertos sejam minimizados, exceto terminator.

Se for assim, você pode conseguir isso escrevendo um script wrapper, que chamará internamente dois comandos

#!/bin/sh
xdotool key "super+d" 
wmctrl -a "terminator"

Substitua o binário/script ToggleShowDesktop real pelo script wrapper mencionado acima

Pode parecer um truque sujo, mas funciona.

informação relacionada