对我来说,很奇怪的是,当使用带有 X11 转发的 ssh 连接时,用户和 root 能够看到xclock
,但另一个用户却看不到。为什么?
mahmood@cluster:~$ xclock
^C
mahmood@cluster:~$ su
Password:
root@cluster:mahmood# xclock
^C
root@cluster:mahmood# su - hmousavi
hmousavi@cluster:~$ xclock
MobaXterm X11 proxy: Authorisation not recognised
Error: Can't open display: localhost:10.0
hmousavi@cluster:~$
PS:^C
意味着我能够看到该xclock
窗口,因此我按下^C
返回终端。
答案1
连接到 X11 显示器需要两条信息:显示器名称(通常在DISPLAY
环境变量中传递)和曲奇饼,这是每个应用程序在连接时必须显示的显示器密码。通常,cookie 存储在 中~/.Xauthority
,但也可以存储在XAUTHORITY
环境变量指示的不同文件中。
看来DISPLAY
SSH 设置的值被两次调用保留了su
。然而 cookie 位于~mahmood/.Xauthority
;当您以 hmousavi 运行程序时,程序会在其中查找 cookie~hmousavi/.Xauthority
并找到不同的值。
原则上您可以运行XAUTHORITY=~mahmood/.Xauthority xclock
,但 hmousavi 可能没有读取该文件的权限 -.Xauthority
其他用户不应该读取该文件。您可以使用该xauth
命令两次,一次作为 mahmood 来提取 cookie 值 ( xauth list localhost:10.0
),一次作为 hmousavi 来导入该值 ( xauth merge
),但这很麻烦。让 X11 应用程序工作的最简单方法是全程使用 SSH,因为 SSH 会自动设置 X11 转发:
mahmood@cluster:~$ ssh -X hmousavi@localhost
hmousavi@cluster:~$ xclock
将 mahmood 的 SSH 公钥添加到 hmousavi 中.ssh/authorized_keys
以允许此操作。