Gtk 警告:无法打开显示::0(对于本地用户!)

Gtk 警告:无法打开显示::0(对于本地用户!)

我知道有很多类似的问题,但它们都是关于 X-Forewarding 和 SSH 会话的。

我在具有特定脚本特权的本地用户身上遇到了这个问题......

问题

在 ubuntu 16.04 下我想要一个特定的用户客人能够运行一个特定的脚本/usr/sbin/测试.sh具有root权限(例如,该脚本进行一些系统设置和挂载)。

设置

我延长/etc/sudoers包含以下行的文件:

guest   ALL = NOPASSWD: /usr/sbin/test.sh

guest 不是sudo小组里!(<-- 猜想这就是问题所在)

剧本

为了简单起见:

#!/bin/bash

zenity --info --text="Testing Sudo X"

如果执行sudo /usr/sbin/test.sh如果以 sudo 组成员身份执行,或者没有对话框显示,则意味着:使终端窗口中的文本和操作正常运行)。

如果guest登录(通过欢迎程序)并在 Unity 中启动一个新的 gnome-terminal 来执行,sudo /usr/sbin/test.sh则会失败并出现错误(希望德语没问题):

No protocol specified
Failed to connect to Mir: Failed to connect to server socket: Datei oder Verzeichnis nicht gefunden
Unable to init server: Verbindung ist gescheitert: Verbindungsaufbau abgelehnt

(zenity:19225): Gtk-WARNING **: cannot open display: :0

我试过....

  • $DISPLAY在之前或之中导出变量test.sh
  • cp.Xauthority别人/home/user/到我的guest
  • xauth add生成另一个xauth list用户的xauth cookie
  • 加入Defaults env_keep += "DISPLAY"/etc/sudoers (这里犯了一个错误!!!)

问题/结论

这些都不起作用。我认为调试guest通常不会有帮助,因为该命令使用 sudo 运行。所以我需要找到一种方法来为这个单个命令授予sudo或sudo 的guest权限。$DISPLAY.Xauthority

答案1

从 Ubuntu 16.04 开始,DISPLAY不再位于 上:0。 它位于一个数字上,该数字可能因同时登录到控制台的用户数量而异。

为了解决这个问题,您需要配置sudo来保存DISPLAY环境变量。

在目录中添加一个配置文件/etc/sudoers.d,包含以下内容:

Defaults env_keep += "DISPLAY"

这将允许sudo将环境变量传递DISPLAY给它运行的程序,然后这些程序将能够连接到正确的DISPLAY

答案2

您需要安装 xhost

对于拱门:

sudo pacman -S xorg-xhost

然后运行:

xhost +

相关内容