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

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

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

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

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

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

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

1 ответ

(Ничто не устанавливает и не использует $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"
Другие вопросы по тегам