从 X 客户端找到 X 服务器窗口管理器

从 X 客户端找到 X 服务器窗口管理器

我使用 登录到远程机器ssh -X。我的本地机器运行非重父 WM。

远程机器需要知道运行 X 服务器的机器使用什么 WM,以便设置或取消设置 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_CHECKX11 根窗口的属性,然后查询返回的窗口 ID 的属性。

$ 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"

相关内容