Узнайте менеджер окон 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"