除了普通用户外,我和您有相同的问题。假设我要使用用户帐户foo启动firefox。我以酒吧身份登录:
[bar@localhost ~]$ sudo -u foo -H firefox
遗憾的是,该命令失败并出现与问题相同的错误(即,未指定协议且无法打开显示)
我的解决方案是简单地将用户foo添加到对X服务器的授权访问列表中。
xhost si:localuser:foo
就是这样,然后我可以使用sudo
和用户foo 启动Firefox(和其他X应用程序)。
背景:在X Window上,有一个客户机/服务器体系结构。启动应用程序时,您需要X服务器授权才能显示它。默认情况下,打开会话(以图形方式登录)后,显然(您的用户)可以与您的服务器通信并显示应用程序。除非您指定其他权限,否则其他用户没有此权限。xhost
是用于处理权限列表的工具。在si
表示该规则是服务器端,并授权本地用户foo
来显示应用。X Window在这方面非常强大,您可以通过使用DISPLAY
环境变量和xhost
(但不限于它们)在本地显示远程应用程序。在较早的时候,人们打字xhost +
并且隐含地允许每个人使用X会话,可以在屏幕上显示应用程序作恶作剧;-)如今已经不那么多了,因为人们越来越少地使用X Window客户端/服务器体系结构(至少对于我在过去10年)。
PS:我这样做是为了以一种“监狱”的方式启动Firefox(以避免将来出现类似pdf.js的漏洞)。但是我很快发现,通过sudo调用Firefox将不允许它访问音频或视频硬件。但是有一个人清楚地解释了通过sudo调用Firefox时如何激活视频硬件加速和音频。带有这些说明的YMMV,例如,我仍然拒绝音频许可,但视频没问题(在SELinux启用的Fedora 22上测试)。