GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Konfigurieren Sie Toggleshowdesktop in Openbox so, dass es nur auf einer bestimmten Ebene wirkt?

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.

Verwandte:Welche Unix-Befehle können als Semaphor/Sperre verwendet werden?
Linux
  1. So installieren und konfigurieren Sie den Putty SSH-Client auf einem Linux-Desktop

  2. So konfigurieren Sie eine Linux-Bridge so, dass sie als Hub statt als Switch fungiert

  3. Konfigurationsbefehl kann nicht ausgeführt werden:„keine solche Datei oder kein solches Verzeichnis“?

  4. Wie konfiguriere ich Desktop für eine statische IP-Adresse?

  5. Konfigurieren Sie IPTables auf dem KVM-Host, um den Gastbrückenverkehr zu blockieren

So konfigurieren Sie eine statische IP-Adresse unter Ubuntu 18.04 (Desktop)

So konfigurieren Sie eine statische IP-Adresse auf Fedora Desktop

So installieren und konfigurieren Sie Sysstat auf einem Linux-Desktop

So installieren und konfigurieren Sie Apache SVN Server auf einem Linux-Desktop

So installieren und konfigurieren Sie das Google Cloud SDK auf einem Linux-Desktop

Gibt es eine Möglichkeit, einen Screenshot im KDE-Desktop zu machen, indem man nur die PrtSc-Taste drückt?