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

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

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

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

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

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

1 ответ1

1

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

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

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

(Баш [[ не нуждается в цитировании на 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .