Oct*_*pus 55 kde gui debian x11
我昨晚在我的机器上安装了 debian。现在,我不明白为什么在以 root 身份运行时无法从终端运行 GUI 应用程序。
例如:
sudo -i
glxgears
Run Code Online (Sandbox Code Playgroud)
生成以下输出:
No protocol specified
Error: couldn't open display :0
Run Code Online (Sandbox Code Playgroud)
但是当我第一次打开终端时,我可以glxgears从用户帐户运行。只有在我这样做之后sudo -i,问题才会出现。我尝试运行的任何 GUI 应用程序都会发生这种情况。我认为它可能与 X11 有关,但我不确定。
mic*_*has 52
访问 X 服务器需要做两件事:
$DISPLAY指向正确显示的变量(通常为:0)身份验证信息可以通过 明确指定$XAUTHORITY,~/.Xauthority否则默认为。
如果$DISPLAY和$XAUTHORITY为您的用户sudo设置,也会为新的 shell 设置它们,一切都应该正常工作。
如果未设置它们,它们可能会默认为错误的值并且您无法启动 X 应用程序。
在 Debian$XAUTHORITY中通常没有明确设置。只需添加
export XAUTHORITY=~/.Xauthority
Run Code Online (Sandbox Code Playgroud)
对您.bashrc或明确说XAUTHORITY=~/.Xauthority sudo ...,一切都应该有效。
您还可以使用xauth list来检查是否有正确的身份验证信息可用。
Huy*_*ens 30
我和你有同样的问题,但对于普通用户。假设我想使用用户帐户 foo 启动 Firefox。我以 bar 身份登录:
[bar@localhost ~]$ sudo -u foo -H firefox
Run Code Online (Sandbox Code Playgroud)
遗憾的是,该命令失败并出现与问题相同的错误(即未指定协议且无法打开显示)
我的解决方案是简单地将用户 foo 添加到 X 服务器的授权访问列表中。
xhost si:localuser:foo
Run Code Online (Sandbox Code Playgroud)
就是这样,然后我就可以使用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 ON 的 Fedora 22 上测试)。
X T*_*ian 11
你可以
通过添加指定要在命令行上使用的显示 -display :0.0
或者
在 root 的登录脚本(.bashrc、.profile、.bash_profile ... 之一)中设置环境变量。
export DISPLAY=:0.0
你可以检查它是否设置,
$ env |grep DISPLAY
DISPLAY=:0.0
Run Code Online (Sandbox Code Playgroud)
要以普通用户身份为所有主机的所有用户打开显示,您可以使用以下命令:
xhost +
编辑:感谢并感谢@Toby Speight 在下面对更有针对性的建议发表评论,而不是向任何人开放。
xhost +si:localuser:root
Run Code Online (Sandbox Code Playgroud)
鉴于您使用的是 Debian,简单且受支持的解决方案是安排sudo复制您的 X11 授权凭证。 正是为此目的pam_xauth而包含在libpam-modules包装中;要使用它,您只需要添加
session optional pam_xauth.so
Run Code Online (Sandbox Code Playgroud)
到您的/etc/pam.d/sudo文件。您也可以选择将其添加到su。当然,有关完整信息,请参阅pam_xauth手册页。