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

tic*_*e76 4 rhel putty x11 xming

我有一台运行 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 转发以在其他用户的上下文中工作?

小智 6

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

说它正在工作user1并且您想将其用于user2

对于user1

$ xauth list $DISPLAY
<output1>
$ echo $DISPLAY
<outoput2>
Run Code Online (Sandbox Code Playgroud)

切换到其他用户,即 user2

$ xauth add <output1> 
$ export DISPLAY=<output2>
Run Code Online (Sandbox Code Playgroud)

尝试:

$ xclock
Run Code Online (Sandbox Code Playgroud)


Mr *_*unz 3

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

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

xauth add $(xauth -f ~username/.Xauthority list | tail -1)
Run Code Online (Sandbox Code Playgroud)

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

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