Ich habe eine Tastenkombination für ToggleShowDesktop
. Wenn ich Menü drücke , alle Fenster werden minimiert und ich sehe mein Desktop-Hintergrundbild (wie erwartet):
<keybind key="Menu">
<action name="ToggleShowDesktop"/>
</keybind>
Jetzt ist das Problem, dass ich mein Hintergrundbild nicht sehen möchte. Ich verwende terminator
als Hintergrundbild, z.B. wenn ich terminator
starte , wird es auf der Ebene darunter platziert:
<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>
Ist es möglich, ToggleShowDesktop
zu konfigurieren so dass es die „untere“ Schicht unberührt lässt? d.h. ich möchte, dass nur die normalen Fenster minimiert werden, aber nicht terminator
. Mit anderen Worten, ich möchte, dass sich Terminator wie ein normales Hintergrundbild verhält – von ToggleShowDesktop
nicht beeinflusst wird .
Ich verwende Debian Wheezy
mit LXDE
.
(unter Verwendung der von @Suchipi vorgeschlagenen Methode):
Ich habe einige Details meiner ursprünglichen Frage weggelassen, und jetzt scheinen diese Details doch relevant zu sein:
Mein Setup hat 2 Monitore und 4 virtuelle Desktops. Ich habe also „8 Hintergrundbilder“, die ich mit terminator
füllen muss . Von dem, was ich zuvor gelesen habe, bin ich davon ausgegangen, dass diese 8 Fenster unterscheidbar sein müssen, also habe ich 8 Symliks zu terminator
erstellt , .d.h.:
/usr/bin/terminator-wallpaper-1a -> terminator
/usr/bin/terminator-wallpaper-1b -> terminator
/usr/bin/terminator-wallpaper-2a -> terminator
...
Tatsächlich wurden 8 verschiedene Anwendungen (mit unterschiedlichen Namen) erstellt.
Ähnlich in .config/openbox/lxde-rc.xml
Ich habe nicht 1, sondern 8 Definitionen:
<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>
Und zuletzt in /.config/autostart
Ich habe 8 *.desktop
Dateien, die nach dem Login automatisch gestartet werden:
/.config/autostar/terminator-wallpaper-1a.desktop
/.config/autostar/terminator-wallpaper-1b.desktop
/.config/autostar/terminator-wallpaper-2a.desktop
Das erscheint mir etwas zu kompliziert und unelegant, aber ich habe keinen besseren Weg gesehen, es zu tun.
Wenn ich nun den Anweisungen von @Suchipi folge, passiert Folgendes:
1) der Teil mit devilspie
funktioniert in Ordnung. Es stellt sich heraus, dass ich nur eine Definition benötige, die alle meine 8 Fenster abdeckt (durch Ersetzen von matches
für is
):
$ cat .devilspie/terminator.ds
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)
Und ich kann mit obxprop
sehen dass es wie erwartet funktioniert.
$ 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) Jetzt das Teil mit xdotool
ist kniffliger:
Zunächst einmal mit 100%
denn die Auflösung funktioniert nicht, d.h. das Fenster verschwindet (ich sehe es nicht). Bei Verwendung von static:
xdotool search --class "Terminator-wallpaper-1a" windowunmap --sync windowmap windowsize %1 1920 1056
Dies funktioniert für Desktop 1 Monitor 1. Aber wenn ich es für andere Desktops ausführe, hat es keine Auswirkung, dh:
xdotool search --class "Terminator-wallpaper-2a" windowunmap --sync windowmap windowsize %1 1920 1056
Eigentlich funktioniert es auch für andere Desktops, aber nur, wenn ich das xdotool
starte Befehl auf dem bestimmten Desktop, den ich beeinflussen möchte. d.h. ich muss auf Desktop 2
wechseln und führen Sie xdotool search --class "Terminator-wallpaper-2a"
aus und dann funktioniert es.
Außerdem habe ich mich gefragt, ob die windowsize %1
spielt hier keine Rolle.
AKTUALISIERUNG 2019-12-07:
Also versuche ich jetzt, dasselbe System auf Debian Buster (Openbox 3.6) einzurichten, und ich habe ein neues Problem. Ich vermute, dass sich einige Eigenschaften in der neuen Version von Openbox geändert haben.
Alles scheint wie vorher, dh:
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
Ich bekomme zwei Terminals als Hintergrundbild. Das Problem ist jedoch, dass nur eines dieser Terminals tatsächlich nutzbar ist. Das andere ist „unfokussiert“ und selbst wenn ich mit der Maus darauf klicke, kann ich es nicht scharfstellen. Das heißt, ich kann das Terminal sehen, aber ich kann es nicht eingeben.
Verwandt:Konfigurieren Sie Postfix so, dass es E-Mails von zwei WANs akzeptiert?Dieses Problem bestand zuvor in älteren Openbox-Versionen nicht
Wie kann ich dieses Problem beheben?
Akzeptierte Antwort:
Openbox gibt Fenstern, deren _OB_APP_TYPE
-Eigenschaft auf „desktop“ gesetzt ist (Sie können obxprop
verwenden um die Eigenschaften eines Fensters zu überprüfen).
Also müssen wir den _OB_APP_TYPE
setzen für Ihr Terminator-Fenster auf „Desktop“, damit dies geschieht.
Durchlesen des Openbox-Quellcodes in client.c
Ich konnte diesen _OB_APP_TYPE
sehen wird von _NET_WM_WINDOW_TYPE
geerbt . Also habe ich nach einer Anwendung gesucht, die _NET_WM_WINDOW_TYPE
ändern kann . Die Anwendung, die ich gefunden habe, heißt devilspie
.
Installieren Sie es zuerst:
sudo apt-get install devilspie
Als Nächstes erstellen wir den Ordner für devilspie
Konfigurationsdateien:
mkdir ~/.devilspie
Jetzt fügen wir eine Konfigurationsdatei hinzu, die devilspie
mitteilt um nach Anwendungen mit dem Namen terminator
zu suchen und setzen Sie den Fenstertyp von ihnen auf desktop
. Fügen Sie Folgendes in ~/.devilspie/terminator.ds
ein :
(if
(is (application_name) "terminator")
(begin
(wintype "desktop")
)
)
Wenn Sie jetzt devilspie
ausführen (oder devilspie -a
um vorhandene Fenster zu beeinflussen, anstatt nur neu erstellte), werden Sie feststellen, wenn Sie obxprop
verwenden auf Terminator, dass _NET_WM_WINDOW_TYPE
hat sich geändert, aber _OB_APP_TYPE
hat noch nicht. Lassen Sie uns xdotool
verwenden die Zuordnung des Fensters aufzuheben und neu zuzuordnen (in der X11-Terminologie bedeutet dies, dass wir aufhören zu zeichnen und mit dem Zeichnen des Fensters beginnen), was Openbox dazu zwingen sollte, den Wert zu bemerken.
xdotool installieren:
sudo apt-get install xdotool
Dann führen wir das folgende Skript aus, um den terminator
zu finden Fenster, heben Sie die Zuordnung auf, warten Sie, bis die Zuordnung aufgehoben wurde, und ordnen Sie sie dann erneut zu. Wir ändern auch die Größe des Fensters, weil es seine Maximierung verloren hat, als es nicht zugeordnet und neu zugeordnet wurde:
xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768
Ersetzen Sie 1024 768
mit deiner Auflösung. Beachten Sie auch, dass neuere Versionen von xdotool
als diejenigen, die in Debians apt-Repo-Unterstützung unter Verwendung von 100% 100%
zu finden sind statt einer statischen Auflösung. Sie finden .deb
Pakete für neuere Versionen von xdotool
auf der Googlecode-Seite von xdotool.
Das Terminator-Fenster wird sofort undekoriert, und wenn Sie jetzt obxprop
verwenden , sehen Sie, dass beide Werte korrekt eingestellt wurden. Wenn Sie jetzt die Taste drücken, haben Sie ToggleShowDesktop
gebunden bis einige Male bleibt das Terminator-Fenster immer aktiv.
Um dies dauerhaft zu machen, sollten Sie diese Befehle bei der Anmeldung ausführen. Die LXDE-Wiki-Seite für LXSession zeigt verschiedene Möglichkeiten, dies zu tun (global, pro Benutzer, pro Profil usw.). Angenommen, Sie möchten diese Einstellungen nur für Ihren Benutzer und unter dem LXDE-Profil (der Standardeinstellung) vornehmen, sollten Sie ~/.config/lxsession/LXDE/autostart
bearbeiten und fügen Sie die Befehle hinzu, die wir ausgeführt haben, und denken Sie daran, dass der xdotool-Befehl ausgeführt werden muss, nachdem das Terminator-Fenster gerendert wurde, also machen Sie so etwas wie (sleep 1s & xdotool ...)
. Sie können diese Befehle auch als Tastenkombinationen in Openbox einrichten, wenn Sie dies wünschen.