Finden Sie den X-Server-Fenstermanager vom X-Client aus

435
Gauthier

Ich melde mich auf einem entfernten Rechner mit an ssh -X. Mein lokaler Computer führt ein nicht reparierendes WM aus.

Der Remotecomputer muss wissen, welches WM der Computer verwendet, auf dem der X-Server ausgeführt wird, um eine Umgebungsvariable für Java festzulegen oder zu deaktivieren.

Mit anderen Worten, ich muss so etwas in ~/.bashrcder Remote-Maschine tun :

if [ $DESKTOP_SESSION == xmonad ] ; then export _JAVA_AWT_WM_NONREPARENTING=1 fi 

Das Problem ist, dass DESKTOP_SESSIONdort nichts gesagt wird. Ich brauche etwas, das der entfernten Maschine mitteilt, in welcher Umgebung die Fenster angezeigt werden.

Gibt es da einen Weg?

0

1 Antwort auf die Frage

1
grawity

(Nichts definiert oder verwendet $ DESKTOP_VERSION. Meinten Sie $ DESKTOP_SESSION? Hier speichern Display-Manager den Namen der von ihnen ausgewählten Xsession-Datei.)

Verwenden Sie, um den Namen des aktuellen Fenstermanagers abzufragen wmctrl -m. Vergessen Sie nicht die richtige Anführungszeichen, da der Name Leerzeichen enthalten kann.

wm=$(wmctrl -m | sed -n 's/^Name: //p') if [ "$wm" = xmonad ]; then ... fi 

(Bashs [[muss nicht auf LHS zitiert werden, POSIX [jedoch.)

Der Mechanismus arbeitet, indem er zuerst die _NET_SUPPORTING_WM_CHECKEigenschaft des X11-Stammfensters abfragt und dann die Eigenschaften der zurückgegebenen Fenster-ID abfragt.

$ xprop -root _NET_SUPPORTING_WM_CHECK _NET_SUPPORTING_WM_CHECK(WINDOW): window id # 0x600006  $ xprop -id 0x600006 _NET_WM_NAME _NET_WM_NAME(UTF8_STRING) = "GNOME Shell" 
Richtig, ich meine DESKTOP_SESSION, danke. Ich möchte lieber keine Abhängigkeit zu `wmctrl` hinzufügen. Die Verwendung von "xprop" zum Untersuchen des WM scheint interessant zu sein. Ich habe nicht _NET_SUPPORTING_WM_CHECK, aber vielleicht gibt es da etwas zu suchen. Gauthier vor 5 Jahren 0