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.