无法连接至Mir:无法连接至服务器套接字:无此类文件或目录


18

以其他用户身份登录后,如何运行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:~$ 

Answers:


13

export DISPLAY=:0为我工作。确保在连接的系统上而不是在要连接的系统上执行命令!


2
在我用来连接的机器上,而不是您要连接的机器上。
user2938093 '02

啊,这是在同一盒子上。差异帐户。
Thufir

1
对我的计算机没有任何影响
ComputerScientist

不适合我。我不知道为什么会这样。
陈金

6

此答案适用于我的Ubuntu 16.04和Mir(稍作改动):

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

包装bash脚本:

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

然后只需运行:

xsudo hawat firefox

潜在的替代方案:

  • 作为一种更简单的替代方法,您可以研究pam_xauth(s。this answer)但是,由于某些原因,这对我不起作用。(我仍然收到关于firefox无法连接到显示器的错误:0)
  • 在很多论坛上,你可能会看到命令xhost +local:或类似的,这使得gksudo -u hawat firefox工作没有任何包装脚本。但是请注意,这会打开一个安全漏洞:本地主机上的任何活动用户都可以访问您的键盘,鼠标,屏幕等。
  • 曾经是sux,由于某种原因它已被终止-尽管您仍然可以下载和使用它。据我所知,它所做的事情与我的脚本类似,但更多。不幸的是,我找不到,为什么不再维护它。(也许是因为我们现在应该使用pam_xauth代替-s。第一种选择)

3

在花了太多时间后,我发现在Ubuntu 16.04上使用Gnome时,正确的值为DISPLAY=:1,而不是DISPLAY=:0从古至今。


1

export DISPLAY =:0可以正常工作,但这是一个临时解决方案,因为每次打开终端时都需要键入此命令。

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

默认值env_keep + =“ DISPLAY”

注意: 请记住在添加到env_keep时始终使用“ + =”。如果还有其他带有“ =”的 env_keep,请将其更改为“ + =”,因为使用“ =”会覆盖其他值。


仅供参考:请记住,您不应该直接编辑sudoers文件,而应使用visudo包装器,该包装器在编写新的sudoers文件之前会提供一些完整性检查。
加百利博览会
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.