无法连接到 Mir:无法连接到服务器套接字:没有此文件或目录

无法连接到 Mir:无法连接到服务器套接字:没有此文件或目录

以其他用户身份登录后,如何运行 GUI 程序?

thufir@doge:~$ 
thufir@doge:~$ sudo -u hawat -i
hawat@doge:~$ 
hawat@doge:~$ whoami
hawat
hawat@doge:~$ 
hawat@doge:~$ pwd
/home/hawat
hawat@doge:~$ 
hawat@doge:~$ echo $HOME
/home/hawat
hawat@doge:~$ 
hawat@doge:~$ firefox
No protocol specified
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :0
hawat@doge:~$ 

答案1

export DISPLAY=:0对我有用。请确保在连接系统上执行该命令,而不是在您正在连接的系统上执行该命令!

答案2

这个答案适用于我的 Ubuntu 16.04 和 Mir(略有改动):

使用 xauth 以另一个用户身份运行 x 命令

包装器 bash 脚本:

为了方便,我创建了一个包装器 bash 脚本,您可能想要下载/usr/local/bin/xsudo并标记为可执行文件(chmod +x /usr/local/bin/xsudo)。

然后只需运行:

xsudo hawat firefox

潜在的替代方案:

  • 作为一种更简单的替代方法,您可以研究pam_xauth(s。这个答案)然而出于某些原因,这对我来说不起作用。(我仍然收到有关 Firefox 无法连接到显示器的错误:0)
  • 在很多论坛中,你可能会看到xhost +local:类似这样的命令,将要gksudo -u hawat firefox无需任何包装脚本即可工作。然而请注意,这将打开一个安全漏洞:您本地主机上的任何活动用户都能够访问您的键盘、鼠标、屏幕等。
  • 过去有糟糕,由于某种原因,它已停止使用 - 但您可能仍可以下载并使用它。据我所知,它的功能与我的脚本类似,只是功能更多。不幸的是,我无法找出为什么不再维护它。(可能是因为我们现在应该改用 pam_xauth - s. 第一个替代方案)

答案3

在此问题上花费了太多时间之后,我发现在 Ubuntu 16.04 上的 Gnome 中,正确的值是DISPLAY=:1,而不是DISPLAY=:0像以前那样。

答案4

导出显示=:0工作正常,但这是一个临时解决方案,因为您每次打开终端时都需要输入此内容。

永久解决方案: 问题可能是由于 /etc/sudoers 中的 env_keep 变量引起的。使用 gedit 在 /etc/sudoers 末尾添加以下行,或使用须藤维须藤

默认 env_keep+="DISPLAY"

笔记 : 请记住始终使用"+="同时添加到 env_keep。如果还有其他 env_keep 具有"="将其更改为"+="因为使用"="将覆盖其他值。

相关内容