无法连接到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:~$ 

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

这个答案适用于我的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在没有任何包装脚本的情况下工作。 但请注意,这会打开一个安全漏洞 :本地主机上的任何活动用户都可以访问您的键盘,鼠标,屏幕等。
  • 曾经有过sux ,由于某种原因已经停止了 – 你可能仍然可以下载并使用它。 据我所知,它的function与我的脚本类似。 不幸的是我无法找到,为什么不再保持这种状态。 (也许是因为我们现在应该使用pam_xauth – s。第一个替代方案)

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

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

默认值env_keep + =“DISPLAY”

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

在花了太多时间之后,我发现在Ubuntu 16.04上使用Gnome,正确的值是DISPLAY=:1 ,而不是DISPLAY=:0因为它是从远古时代开始的。