![当第一个用户使用 display:0 时,如何启用第二个用户的 xhost 访问?](https://linux22.com/image/181409/%E5%BD%93%E7%AC%AC%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%20display%3A0%20%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E5%90%AF%E7%94%A8%E7%AC%AC%E4%BA%8C%E4%B8%AA%E7%94%A8%E6%88%B7%E7%9A%84%20xhost%20%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
这是我的情况:
我的一台机器上有两个(sudo)用户:
userA
(首先在机器上创建。这也是:0
连接显示器的地方)userB
(稍后创建)
正在userA
我做:
export DISPLAY=:0.0
xclock
时钟DISPLAY:0
按预期打开。
现在,我希望以相同的步骤进行操作userB
。但不幸的是,它表明:
No protocol specified
xhost: unable to open display ":0.0"
我尝试过的:
- 使用以下命令创建受信任的 xauth 密钥:
xauth generate :0.0 . trusted
再次显示unable to open display ":0.0"
- 复制
/home/userA/.Xauthority
到/home/userB/.Xauthority
. (注意:我没有在userA
xauth 列表中看到任何与 display :0 相关的密钥,尽管它有效。) :0
为on创建受信任的 xauth 密钥userA
并将该密钥复制到userB
.
这些都不起作用。
什么有效:
- 我登录到
userA
.export DISPLAY=:0.0
然后我xhost +
启用所有客户端的访问。 - 我重新登录到
userB
.我export DISPLAY=:0.0
然后xclock
。
userA
我想消除第 1 步。我不想每次都登录。我确实尝试了xhost +
from userB
,这显示了上面已经显示的错误。
我怎样才能运行xhost +
,userB
同时又让它认为它有访问DISPLAY:0
权限?
编辑:正如@user414777提到的,我能够:
# On userA
$ xhost +si:localuser:userB
# On userB
$ export DISPLAY=:0.0 ; xclock
并使其发挥作用。但这些更改在重新启动后不会保留。
# After rebooting, on userB
$ export DISPLAY=:0.0 ; xclock
Invalid MIT-MAGIC-COOKIE-1 keyError: Can't open display: :0.0
我正在运行 Ubuntu 18.04 LTS,4.18.0-15-generic
解决了
我最终接受了 @user414777 提出的稍微不安全且经过修改的建议。我没有在~/.xsession
或中添加更改Xsession.d
,而是在 中添加了该行/etc/profile
,这将更改应用于所有用户。
答案1
在大多数“现代”Linux 系统上,您可以执行以下操作:
xhost +si:localuser:userB
userA
作为(已经有权访问显示器的人)运行,然后userB
将能够连接(如果她设置了正确的DISPLAY
环境变量或使用了正确的-display
命令--display
行选项)。
这是相当不安全的,但是(至少在 Debian 上)这是 唯一支持的东西Xwayland
,而且它们已经强迫它即使是常规的Xorg
。
xauth(1)
手册页以及此处和其他地方的许多答案中已经提到的常规方法是:
xauth extract - "$DISPLAY" | ssh userB@localhost xauth merge -
但在我的系统上,这只适用于Xorg
,而不适用于Xwayland
。使用上面的命令,您可以使用su
orsudo
代替ssh
,或者您可以分两步完成,等等。