GNU/Linux >> Linux Esercitazione >  >> Linux

Configurare Toggleshowdesktop in Openbox per agire solo su un livello specificato?

Ho una combinazione di tasti per ToggleShowDesktop . Quando premo Menu , tutte le finestre vengono ridotte a icona e vedo il mio sfondo del desktop (come previsto):

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

Ora il problema è che non voglio vedere il mio sfondo. Sto usando terminator come sfondo, ovvero quando avvio terminator , viene posizionato sul livello sottostante:

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

È possibile configurare ToggleShowDesktop in modo da lasciare inalterato lo strato "sotto"? cioè voglio che solo le normali finestre siano ridotte a icona, ma non terminator . In altre parole, voglio che il terminatore si comporti come farebbe lo sfondo normale, non influenzato da ToggleShowDesktop .

Sto usando Debian Wheezy con LXDE .

(usando il metodo suggerito da @Suchipi):

Ho omesso alcuni dettagli dalla mia domanda originale e ora questi dettagli sembrano essere rilevanti dopo tutto:

La mia configurazione ha 2 monitor e 4 desktop virtuali. Quindi ho "8 sfondi" da riempire con terminator . Da quello che ho letto in precedenza, presumevo che queste 8 finestre dovessero essere distinguibili, quindi ho creato 8 simboli per terminator , cioè:

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

In effetti ha creato 8 diverse applicazioni (con nomi diversi).

Allo stesso modo, in .config/openbox/lxde-rc.xml Non ho 1, ma 8 definizioni:

<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 infine, in /.config/autostart Ho 8 *.desktop file, da avviare automaticamente dopo il login:

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

Questo mi sembra troppo complicato e poco elegante, ma non vedevo un modo migliore per farlo.

Ora, quando seguo le istruzioni di @Suchipi, accade quanto segue:

1) la parte con devilspie funziona bene. Si scopre che ho bisogno solo di una definizione che copra tutte le mie 8 finestre (sostituendo matches per is ):

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

E posso vedere con obxprop che funzioni come previsto.

$ 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) ora la parte con xdotool è più complicato:
prima di tutto, usando 100% per la risoluzione non funziona, cioè la finestra scompare (non la vedo). Quando si utilizza statico:

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

questo funziona per desktop 1 monitor 1. Ma quando lo eseguo per altri desktop, non ha alcun effetto, ad es.:

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

In realtà, funziona anche per altri desktop, ma solo se eseguo xdotool comando sul desktop specifico, che voglio influenzare. cioè devo passare al desktop 2 ed esegui xdotool search --class "Terminator-wallpaper-2a" e poi funziona.

Inoltre, mi chiedevo se il windowsize %1 gioca un ruolo qui.

AGGIORNAMENTO 07-12-2019:

quindi, ora sto provando a configurare lo stesso sistema su Debian Buster (Openbox 3.6) e sto riscontrando un nuovo problema. Sospetto che alcune proprietà siano cambiate nella nuova versione di openbox.

Tutto sembra come prima, ovvero:

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

Ricevo due terminali come sfondo. Ma il problema è che solo uno di questi terminali è effettivamente utilizzabile. L'altro è "sfocato" e anche quando ci clicco sopra con il mouse, non riesco a metterlo a fuoco. Cioè, posso vedere il terminale, ma non riesco a digitarlo.

Correlati:configurare suffisso per accettare la posta da due WAN?

Questo problema non esisteva né esisteva prima, nella versione precedente di Openbox

Come posso risolvere questo problema?

Risposta accettata:

Openbox darà la funzionalità che stai cercando alle finestre il cui _OB_APP_TYPE la proprietà è impostata su "desktop" (puoi usare obxprop per controllare le proprietà di una finestra).
Quindi dobbiamo impostare il _OB_APP_TYPE per la finestra del terminatore su "desktop" in modo che ciò avvenga.

Leggere il codice sorgente di openbox, in client.c Ho potuto vedere quel _OB_APP_TYPE viene ereditato da _NET_WM_WINDOW_TYPE . Quindi ho cercato un'applicazione che potesse cambiare _NET_WM_WINDOW_TYPE . L'applicazione che ho trovato si chiama devilspie .

Innanzitutto, installalo:

sudo apt-get install devilspie

Successivamente, creeremo la cartella per devilspie file di configurazione:

mkdir ~/.devilspie

Ora aggiungeremo un file di configurazione che dice a devilspie per cercare applicazioni denominate terminator e imposta il tipo di finestra su desktop . Inserisci quanto segue in ~/.devilspie/terminator.ds :

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

Ora, se esegui devilspie (o devilspie -a per influenzare le finestre esistenti anziché solo quelle appena create) noterai se usi obxprop sul terminatore quel _NET_WM_WINDOW_TYPE è cambiato, ma _OB_APP_TYPE non ha ancora. Usiamo xdotool per annullare la mappatura e rimappare la finestra (nella terminologia X11 questo significa che smetteremo di disegnare e inizieremo a disegnare la finestra), il che dovrebbe forzare openbox a notare il valore.

Installa xdotool:

sudo apt-get install xdotool

Quindi eseguiamo il seguente script per trovare il terminator finestra, annulla la mappatura, attendi fino a quando non è stata annullata la mappatura, quindi rimappala. Ridimensioniamo anche la finestra perché quando è stata non mappata e rimappata ha perso la sua massimizzazione:

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

Sostituisci 1024 768 con la tua risoluzione Tieni inoltre presente che le versioni più recenti di xdotool rispetto a quelli trovati nel supporto per repository apt di Debian usando 100% 100% invece di una risoluzione statica. Puoi trovare .deb pacchetti per le versioni più recenti di xdotool alla pagina googlecode di xdotool.

La finestra del terminatore diventerà immediatamente non decorata e se ora usi obxprop , vedrai che entrambi i valori sono stati impostati correttamente. Se ora premi il tasto, hai associato ToggleShowDesktop per alcune volte, la finestra del terminatore rimarrà sempre attiva.

Per renderlo persistente, ti consigliamo di eseguire questi comandi all'accesso. La pagina wiki di LXDE per LXSession mostra diversi modi per farlo (globale, per utente, per profilo, ecc.). Supponendo che tu voglia queste impostazioni solo per il tuo utente e sotto il profilo LXDE (l'impostazione predefinita), ti consigliamo di modificare ~/.config/lxsession/LXDE/autostart e aggiungi i comandi che abbiamo eseguito, tenendo presente che il comando xdotool deve essere eseguito dopo il rendering della finestra di terminator, quindi fai qualcosa come (sleep 1s & xdotool ...) . Puoi anche impostare questi comandi come combinazioni di tasti in openbox, se lo desideri.

Correlati:quali comandi Unix possono essere utilizzati come semaforo/blocco?
Linux
  1. Configura VNC su CentOS 6 / RHEL 6

  2. Come installare e configurare il client Putty SSH su desktop Linux

  3. Come configurare un Bridge Linux per fungere da Hub anziché da Switch

  4. Impossibile eseguire il comando di configurazione:"nessun file o directory di questo tipo"?

  5. Come configurare il desktop per un indirizzo IP statico?

Come configurare l'indirizzo IP statico su Ubuntu 18.04 (desktop)

Come configurare l'indirizzo IP statico su Fedora Desktop

Come installare e configurare Sysstat su desktop Linux

Come installare e configurare il server Apache SVN su desktop Linux

Come installare e configurare Google Cloud SDK su desktop Linux

C'è un modo per fare uno screenshot nel desktop KDE premendo solo il tasto PrtSc?