当第一个用户使用 display:0 时,如何启用第二个用户的 xhost 访问?

当第一个用户使用 display:0 时,如何启用第二个用户的 xhost 访问?

这是我的情况:

我的一台机器上有两个(sudo)用户:

  1. userA(首先在机器上创建。这也是:0连接显示器的地方)
  2. userB(稍后创建)

正在userA我做:

export DISPLAY=:0.0
xclock

时钟DISPLAY:0按预期打开。

现在,我希望以相同的步骤进行操作userB。但不幸的是,它表明:

No protocol specified
xhost:  unable to open display ":0.0"

我尝试过的:

  1. 使用以下命令创建受信任的 xauth 密钥:xauth generate :0.0 . trusted再次显示unable to open display ":0.0"
  2. 复制/home/userA/.Xauthority/home/userB/.Xauthority. (注意:我没有在userAxauth 列表中看到任何与 display :0 相关的密钥,尽管它有效。)
  3. :0为on创建受信任的 xauth 密钥userA并将该密钥复制到userB.

这些都不起作用。

什么有效:

  1. 我登录到userA.export DISPLAY=:0.0然后我xhost +启用所有客户端的访问。
  2. 我重新登录到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。使用上面的命令,您可以使用suorsudo代替ssh,或者您可以分两步完成,等等。

相关内容