如果 su 到另一个用户,X11 转发不起作用

如果 su 到另一个用户,X11 转发不起作用

我有一台运行 XVnc 的 Red Hat 7.3 服务器。在 Windows 10 桌面上,我安装了 Putty 和 Xming。 Putty 配置为 X11 转发。当我以标准/非特权用户身份通过​​ SSH 登录并启动 X 应用程序时,它会毫无问题地显示在我的 Windows 10 桌面上。

现在,在同一会话中,如果我使用权限更高的帐户并尝试运行 X 应用程序,则会失败并显示“错误:无法打开显示”。

在我的标准用户会话中,如果我回显 $DISPLAY,它会自动为我设置为“IP_ADDRESS:10.0”。在我的 su 会话下,$DISPLAY 为空。我尝试将 DISPLAY 变量导出为相同的值,但现在出现不同的错误:“PuTTY X11 代理:不支持的授权协议错误:无法打开显示:server_IP:10.0”。

如何配置 X11 转发以在其他用户的上下文中工作?

答案1

以下步骤应该可以解决您的问题。

说它正在工作user1并且你想用它user2

为了user1

$ xauth list $DISPLAY
<output1>
$ echo $DISPLAY
<outoput2>

切换到其他用户,即user2

$ xauth add <output1> 
$ export DISPLAY=<output2>

尝试:

$ xclock

答案2

那是因为X11显示连接属于用户通过 SSH 登录X11Forwarding机制不允许其他人使用该显示器。

幸运的是,有一个解决方法。使用su并成为其他用户后,发出以下命令:

xauth add $(xauth -f ~username/.Xauthority list | tail -1)

您的原始用户在哪里~username,即您连接到服务器的用户。

显然,如果您的新用户有足够的权限来读取~username/.Xauthority(即,如果您这样suroot,那么就没有问题,如果对另一个用户来说,则这是有效的)可能不起作用,您需要检查/修改权限)。

答案3

Daniele 的解决方法略有改变:

xauth add $(xauth -i -f ~username/.Xauthority list | tail -1)

-i选项忽略锁;这样xauth list命令就不会挂起。

相关内容