Узнайте менеджер окон X-сервера от X-клиента

298
Gauthier

Я вхожу на удаленную машину с ssh -X. Моя локальная машина работает без переучивания WM.

Удаленная машина должна знать, какой WM использует машина, на которой работает X-сервер, чтобы установить или сбросить переменную среды для Java.

Другими словами, мне нужно сделать что-то вроде этого ~/.bashrcна удаленной машине:

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

Проблема в том DESKTOP_SESSION, что там ничего не сказано. Мне нужно что-то, что говорит удаленной машине, в какой среде будут отображаться окна.

Это можно обойти?

0

1 ответ на вопрос

1
grawity

(Ничто не устанавливает и не использует $ DESKTOP_VERSION. Вы имели в виду $ DESKTOP_SESSION? Именно здесь менеджеры дисплея сохраняют имя выбранного файла xsession.)

Чтобы запросить имя текущего оконного менеджера, используйте wmctrl -m. Не забывайте правильно цитировать, так как в имени могут быть пробелы.

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

(Bash [[не нужно цитировать на LHS, но POSIX [делает.)

Механизм работает, сначала запрашивая _NET_SUPPORTING_WM_CHECKсвойство корневого окна X11, а затем запрашивая свойства возвращенного идентификатора окна.

$ 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" 
Хорошо, я имею в виду DESKTOP_SESSION, спасибо. Я бы не хотел добавлять зависимость к `wmctrl`. Использование `xprop` для изучения WM кажется интересным, у меня нет` _NET_SUPPORTING_WM_CHECK`, но, возможно, есть что-то, чтобы там покопаться. Gauthier 5 лет назад 0