GNU/Linux >> Znalost Linux >  >> Linux

Nakonfigurovat Toggleshowdesktop v Openbox tak, aby fungoval pouze na zadané vrstvě?

Mám klávesovou zkratku pro ToggleShowDesktop . Když stisknu Nabídka , všechna okna se minimalizují a vidím tapetu plochy (podle očekávání):

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

Nyní je problém v tom, že nechci vidět svou tapetu. Používám terminator jako tapetu, tj. když spustím terminator , je umístěn ve vrstvě níže:

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

Je možné nakonfigurovat ToggleShowDesktop takže ponechá vrstvu „pod“ nedotčenou? tj. Chci, aby byla minimalizována pouze normální okna, ale ne terminator . Jinými slovy, chci, aby se terminátor choval jako normální tapeta – nebyl ovlivněn ToggleShowDesktop .

Používám Debian Wheezy s LXDE .

(pomocí metody navržené @Suchipi):

Ze své původní otázky jsem vynechal několik podrobností a nyní se tyto podrobnosti zdají být přece jen relevantní:

Moje nastavení má 2 monitory a 4 virtuální plochy. Takže mám „8 tapet“, které vyplním terminator . Z toho, co jsem četl dříve, jsem předpokládal, že těchto 8 oken bude muset být rozlišitelných, takže jsem vytvořil 8 symbolů pro terminator , tj.:

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

Ve skutečnosti bylo vytvořeno 8 různých aplikací (s různými názvy).

Podobně v .config/openbox/lxde-rc.xml Nemám 1, ale 8 definic:

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

A nakonec v /.config/autostart Mám 8 *.desktop soubory, které se mají spouštět automaticky po přihlášení:

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

Zdá se mi to příliš složité a neelegantní, ale neviděl jsem žádný lepší způsob, jak to udělat.

Nyní, když postupuji podle pokynů od @Suchipi, stane se následující:

1) část s devilspie funguje OK. Ukázalo se, že potřebuji pouze jednu definici, která pokryje všech mých 8 oken (nahrazením matches pro is ):

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

A vidím to pomocí obxprop že to funguje podle očekávání.

$ 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) nyní část s xdotool je složitější:
nejprve pomocí 100% nefunguje rozlišení, tj. okno zmizí (nevidím ho). Při použití statického:

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

toto funguje pro desktop 1 monitor 1. Ale když to spustím pro jiné desktopy, nemá to žádný vliv, tj.:

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

Ve skutečnosti to funguje i na jiných počítačích, ale pouze pokud spustím xdotool příkaz na konkrétní ploše, kterou chci ovlivnit. tj. musím přepnout na plochu 2 a spusťte xdotool search --class "Terminator-wallpaper-2a" a pak to funguje.

Také mě zajímalo, zda windowsize %1 zde hraje jakoukoli roli.

AKTUALIZACE 2019-12-07:

tak se nyní pokouším nastavit stejný systém na Debian Buster (Openbox 3.6) a mám nový problém. Mám podezření, že se nějaká vlastnost v nové verzi openboxu změnila.

Všechno se zdá jako předtím, tj.:

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

Mám dva terminály jako tapetu. Ale problém je, že pouze jeden z těchto terminálů je skutečně použitelný. Druhý je „nezaostřený“ a i když na něj kliknu myší, nemohu jej zaostřit. Tj. vidím terminál, ale nemohu do něj psát.

Související:Konfigurovat postfix pro příjem pošty ze dvou sítí WAN?

Tento problém neexistoval ani dříve ve starší verzi Openbox

Jak mohu tento problém vyřešit?

Přijatá odpověď:

Openbox poskytne funkci, kterou hledáte, oknům, jejichž _OB_APP_TYPE vlastnost je nastavena na „desktop“ (můžete použít obxprop zkontrolovat vlastnosti okna).
Musíme tedy nastavit _OB_APP_TYPE pro vaše okno terminátoru na „desktop“, aby se tak stalo.

Čtení zdrojového kódu openboxu v client.c Viděl jsem, že _OB_APP_TYPE je zděděno z _NET_WM_WINDOW_TYPE . Hledal jsem tedy aplikaci, která by mohla změnit _NET_WM_WINDOW_TYPE . Aplikace, kterou jsem našel, se jmenuje devilspie .

Nejprve jej nainstalujte:

sudo apt-get install devilspie

Dále vytvoříme složku pro devilspie konfigurační soubory:

mkdir ~/.devilspie

Nyní přidáme konfigurační soubor, který říká devilspie hledat aplikace s názvem terminator a nastavte jejich typ okna na desktop . Vložte následující do ~/.devilspie/terminator.ds :

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

Nyní, pokud spustíte devilspie (nebo devilspie -a ovlivnit stávající okna namísto pouze nově vytvořených), všimnete si, pokud použijete obxprop na terminátoru, který _NET_WM_WINDOW_TYPE se změnil, ale _OB_APP_TYPE zatím ne. Použijme xdotool odmapovat a přemapovat okno (v terminologii X11 to znamená, že přestaneme kreslit a začneme kreslit okno), což by mělo přinutit openbox, aby si všiml hodnoty.

Nainstalujte xdotool:

sudo apt-get install xdotool

Poté spustíme následující skript, abychom našli terminator okno, zrušte jeho mapování, počkejte, dokud nebude odmapováno, a poté jej znovu namapujte. Také jsme změnili velikost okna, protože když bylo odmapováno a přemapováno, ztratilo svou maximalizaci:

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

Nahraďte 1024 768 s vaším předsevzetím. Všimněte si také, že novější verze xdotool než ty, které najdete v podpoře apt repo Debianu pomocí 100% 100% místo statického rozlišení. Můžete najít .deb balíčky pro novější verze xdotool na stránce googlecode xdotool.

Okno terminátoru se okamžitě přestane vyzdobit, a pokud nyní použijete obxprop , uvidíte, že obě hodnoty byly správně nastaveny. Pokud nyní stisknete klávesu, připojíte ToggleShowDesktop až několikrát, okno terminátoru zůstane vždy aktivní.

Aby to bylo trvalé, budete chtít spouštět tyto příkazy při přihlášení. Stránka LXDE Wiki pro LXSession ukazuje několik různých způsobů, jak toho dosáhnout (globálně, podle uživatele, podle profilu atd.). Za předpokladu, že chcete tato nastavení pouze pro svého uživatele a pod profilem LXDE (výchozí), budete chtít upravit ~/.config/lxsession/LXDE/autostart a přidejte příkazy, které jsme spustili, přičemž mějte na paměti, že příkaz xdotool je třeba spustit po vykreslení okna terminátoru, takže udělejte něco jako (sleep 1s & xdotool ...) . Pokud chcete, můžete tyto příkazy také nastavit jako klávesové zkratky v openboxu.

Související:Jaké příkazy Unixu lze použít jako semafor/zámek?
Linux
  1. Nakonfigurujte VNC na CentOS 6 / RHEL 6

  2. Jak nainstalovat a nakonfigurovat klienta Putty SSH na ploše Linux

  3. Nakonfigurujte IPTables na hostiteli KVM tak, aby blokoval provoz hostovaného mostu

  1. Jak nakonfigurovat Linux Bridge, aby fungoval jako rozbočovač namísto přepínače

  2. Nelze spustit příkaz Configure:„žádný takový soubor nebo adresář“?

  3. Jak nakonfigurovat plochu pro statickou IP adresu?

  1. Jak nakonfigurovat Openbox pro váš desktop Linux

  2. Jak se pohybovat na ploše GNOME Linux pouze pomocí klávesnice

  3. grep odpovídá pouze řádkům v určeném rozsahu