I have a keybinding for ToggleShowDesktop
. When I press Menu, all windows get minimized and I see my Desktop Wallpaper (as expected):
<keybind key="Menu">
<action name="ToggleShowDesktop"/>
</keybind>
Now the problem is, I don't want to see my wallpaper. I am using terminator
as my wallpaper, i.e. when I start terminator
, it is placed on the layer below:
<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>
Is it possible to configure ToggleShowDesktop
so that it leaves the "below" layer unaffected? i.e. I want only the normal windows to be minimized, but not terminator
. In other words, I want terminator to behave as normal wallpaper would – be unaffected by ToggleShowDesktop
.
I am using Debian Wheezy
with LXDE
.
(using method suggested by @Suchipi):
I have left out few details from my original question, and now these details seem to be relevant after all:
My setup has 2 monitors and 4 virtual desktops. So I have "8 wallpapers" to fill with terminator
. From what I have read previously, I assumed that these 8 windows will have to be distinguishable, so I have created 8 symliks to terminator
, .i.e.:
/usr/bin/terminator-wallpaper-1a -> terminator
/usr/bin/terminator-wallpaper-1b -> terminator
/usr/bin/terminator-wallpaper-2a -> terminator
...
In effect created 8 different applications (with different names).
Similarly, in .config/openbox/lxde-rc.xml
I have not 1, but 8 definitions:
<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>
And lastly, in /.config/autostart
I have 8 *.desktop
files, to be started automatically after login:
/.config/autostar/terminator-wallpaper-1a.desktop
/.config/autostar/terminator-wallpaper-1b.desktop
/.config/autostar/terminator-wallpaper-2a.desktop
This seems to me quiete overcomplicated and inelegant, but I didn't see any better way to do it.
Now, when I follow the instructions from @Suchipi, the following happens:
1) the part with devilspie
works OK. It turns out, I need only one definition which covers all my 8 windows (substituting matches
for is
):
$ cat .devilspie/terminator.ds
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)
And I can see with obxprop
that it works as expected.
$ 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) now the part with xdotool
is more tricky:
first of all, using 100%
for the resolution does not work, i.e. the window disappears (I don't see it). When using static:
xdotool search --class "Terminator-wallpaper-1a" windowunmap --sync windowmap windowsize %1 1920 1056
this works for desktop 1 monitor 1. But when I run it for other desktops, it has no effect, i.e.:
xdotool search --class "Terminator-wallpaper-2a" windowunmap --sync windowmap windowsize %1 1920 1056
Actually, it works for other desktops as well, but only if I run the xdotool
command on the specific desktop, which I want to affect. i.e. I have to switch to desktop 2
and run xdotool search --class "Terminator-wallpaper-2a"
and then it works.
Also, I was wondering whether the windowsize %1
plays any role here.
UPDATE 2019-12-07:
so, I am now trying to set up same system on Debian Buster (Openbox 3.6) and I am experiencing a new problem. I suspect some property has changed in new version of openbox.
Everything seems to as before, ie:
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
I get two terminals as wallpaper. But the problem is, only one of these terminals is actually usable. The other is "unfocused" and even when I click on it with mouse, I cannot bring it into focus. Ie, I can see the terminal, but I cannot type in it.
This problem did nor exist before, in older Openbox version
How can I fix this problem ?
Best Answer
Openbox will give the functionality you are looking for to windows whose
_OB_APP_TYPE
property is set to "desktop" (You can useobxprop
to check the properties of a window). So we need to set the_OB_APP_TYPE
for your terminator window to "desktop" so that this will happen.Reading through the openbox source code, in
client.c
I could see that_OB_APP_TYPE
is inherited from_NET_WM_WINDOW_TYPE
. So I looked for an application that could change_NET_WM_WINDOW_TYPE
. The application I found is calleddevilspie
.First, install it:
Next, we'll create the folder for
devilspie
configuration files:Now we will add a config file that tells
devilspie
to look for applications namedterminator
and set the window type of them todesktop
. Put the following into~/.devilspie/terminator.ds
:Now, if you run
devilspie
(ordevilspie -a
to affect existing windows instead of just newly created ones) you'll notice if you useobxprop
on terminator that_NET_WM_WINDOW_TYPE
has changed, but_OB_APP_TYPE
has not yet. Let's usexdotool
to unmap and remap the window (in X11 terminology this means we will stop drawing and begin drawing the window), which should force openbox to notice the value.Install xdotool:
Then we run the following script to find the
terminator
window, unmap it, wait until it has been unmapped, then remap it. We also resize the window because when it was unmapped and remapped it lost its maximization:Replace
1024 768
with your resolution. Also note that newer versions ofxdotool
than those found in Debian's apt repo support using100% 100%
instead of a static resolution. You can find.deb
packages for newer versions ofxdotool
at xdotool's googlecode page.The terminator window will immediately become undecorated, and if you now use
obxprop
, you will see that both values have been set properly. If you now press the key you boundToggleShowDesktop
to a few times, the terminator window will always stay active.To make this persistent, you'll want to run these commands on login. The LXDE Wiki Page for LXSession shows several different ways to do this (global, per-user, per-profile, etc). Assuming you want these settings just for your user and under the LXDE profile (the default), you'll want to edit
~/.config/lxsession/LXDE/autostart
and add the commands we ran, keeping in mind that the xdotool command needs to be run after terminator's window has been rendered, so do something like(sleep 1s & xdotool ...)
. You could also set these commands up as keybinds in openbox if you wish.