sudo + x11 应用程序无法正常工作

sudo + x11 应用程序无法正常工作

我无法让任何需要 x11 的程序(例如 gedit、nautilus)与 sudo 配合使用。使用 gksudo 只会默默失败,而在终端上我收到以下错误:

sudo nautilus

** (nautilus:4160): WARNING **: Command line `dbus-launch --autolaunch=cced40b4aa1d252bc89d3a6a0000000a --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n
Could not parse arguments: Cannot open display: 

在朋友的帮助下,我设法找到了一种解决方法:如果我xhost + 以非特权用户身份运行,然后export DISPLAY=:0在之后以 root 身份运行sudo su,它最终会起作用(如果没有 xhost 步骤,我会收到未定义的协议错误)。但是,我不明白为什么我首先会遇到这个问题,而且这是一个费力的解决方法 - 我考虑在 root 的 .bashrc 中添加一个“export DISPLAY=:0”,但这只有在我起诉时才会调用,而不是在我只是 sudo 时调用。

关于如何正确解决这个问题有什么想法吗?

答案1

一般来说,请记得包含您的操作系统(我想您使用的是 Linux)和发行版。

默认情况下,X 服务器不允许其他用户(例如,您这里是 root 用户)连接到现有的 X 实例。可以使用命令覆盖此xhost +设置,之后 root 用户就可以连接到您现有的 X 会话。

xhost +导出 DISPLAY 应该没有必要,你确定有必要吗?只需运行然后或其他操作即可sudo gedit。如果是这种情况(并且你不介意轻微的安全风险) 您可以添加xhost +到您的~/.bashrc


作为一个糟糕的解决方法,您可以运行sudo指定$DISPLAY变量:

sudo DISPLAY=:0 gedit

为了实现自动化,您可以将这些行添加到~/.bashrc

xhost + 
alias sudo='sudo DISPLAY=:0'

不过,这是一个糟糕的黑客行为,我想知道你是如何让自己陷入这种必要情况的 :)。正如我在上面的评论中所说,这在 Ubuntu(以及大多数其他现代桌面 Linux 系统)上应该可以开箱即用。我最后一次摆弄 xhost 和 DISPLAY 是在大约 10 年前,当时我还在使用 RedHat……

答案2

运行需要的应用程序时sudo我收到以下错误:

sudo gadmin-samba
调试1:客户端输入通道打开:ctype x11 rchan 3 win 65536 max 16384
debug1:client_request_x11:来自 127.0.0.1 37270 的请求
调试1:通道1:新[x11]
调试1:确认x11
X11 连接因身份验证错误而被拒绝。
调试1:通道1:空闲:x11,n通道2

(gadmin-samba:2166): Gtk-警告**: 无法打开显示:主机名:10.0


要让应用程序以 root 身份运行,或者通过sudo我必须遵循以下说明这里

  • 通过登录

    ssh username@machine -X
    
  • 比登录时输入

    xauth list $DISPLAY
    
  • 输出将如下所示

    hostname:10  MIT-MAGIC-COOKIE-1  47c3222525f807fc9e8b5fb56e7fee2a
    
  • 复制整行。

  • sudo xauth add hostname:10  MIT-MAGIC-COOKIE-1  47c3222525f807fc9e8b5fb56e7fee2a
    
  • 或者以 root 身份登录su root,或者sudo -i输入

    xauth add hostname:10  MIT-MAGIC-COOKIE-1  47c3222525f807fc9e8b5fb56e7fee2a
    

先决条件

  • 远程控制
  • 验证

  • 服务器上的 ssh 配置文件必须包含以下行:

X11转发 是
X11显示偏移 10
X11UseLocalhost 否
  • 客户端的 SSH 必须运行资本-X并进行故障排除-v

    ssh -X -v username@machine
    

键入echo $DISPLAY以检查 x11 转发是否正常工作。

答案3

我使用gksu它来处理安全的 xauth 转发

相关内容