我有一台运行 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
(即,如果您这样su
做root
,那么就没有问题,如果对另一个用户来说,则这是有效的)可能不起作用,您需要检查/修改权限)。
答案3
Daniele 的解决方法略有改变:
xauth add $(xauth -i -f ~username/.Xauthority list | tail -1)
该-i
选项忽略锁;这样xauth list
命令就不会挂起。