为什么无法从命令行打开 gparted?

为什么无法从命令行打开 gparted?

我似乎无法从命令行启动 gparted。我正在使用 Trisquel 8(基于 Ubuntu 16.04)和 LXDE。如果我尝试打开它,则会收到以下错误并且没有任何反应:

$ sudo gparted

(gpartedbin:7820): Gtk-WARNING **: cannot open display: 

然而,它似乎从图形应用程序菜单中打开得很好。

我在网上搜索了一下,一个建议是尝试:

xhost +localhost

然而,这并没有帮助。显然,在 Wayland 中以 root 身份从命令行打开 gtk 应用程序似乎可能存在问题;不过我用的是X11。这仅在本地笔记本电脑上 - 不涉及 ssh 或远程系统。

这看起来很奇怪,因为我过去一直能够从命令行打开 gparted。我也尝试过重新安装 gparted,但这似乎没有帮助。

更新:

按照 meuh 在评论中的建议,我添加DISPLAY=:0到 /etc/environment 文件中,因此在使用 sudo 时应该传递它。但是,我仍然遇到错误,但现在已经改变了:

$ sudo gparted
No protocol specified

(gpartedbin:5549): Gtk-WARNING **: cannot open display: :0

似乎现在正在传递 DISPLAY 变量,但我不确定“无协议”消息的含义。

答案1

要访问 X,您需要环境变量DISPLAYXAUTHORITY.根据设置,sudo 可能会删除它们。您可以通过检查来sudo env查看环境变量。

要保护您的用户环境,您可以使用sudo -E.这HOME对您的用户主页有一个陷阱设置,并且配置文件可能会获得错误的文件权限。然而,为了避免这种情况,sudo -H设置HOME/root.

将其组合为 gparted:

sudo -EH gparted

只能使用以下命令设置所需的变量:

sudo env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gparted

错误信息:

cannot open display:表示DISPLAY为空或不存在。

no protocol specified表示DISPLAY已设置且有效,但XAUTHORITY指向身份验证 cookie 未设置或 cookie 无效。或者,xhost +SI:localuser:root允许 root 临时访问 X,直到注销。


使用 和 访问 WaylandWAYLAND_DISPLAY也是如此XDG_RUNTIME_DIR。 Wayland root 访问问题sudo -EH也可以通过 解决。有关详细信息和陷阱,请XDG_RUNTIME_DIR参阅Wayland 会支持图形化 sudo 吗?

答案2

kdesudogsudo、 和其他一些sudo可以解决这个问题。

这是我一起破解的(未经安全审核/测试)。

#/bin/bash

inner() {
    su  - "$user" -c "xauth list" |
        grep "$(echo "$display" |
                cut -d ':' -f 2 |
                cut -d '.' -f 1 |
                sed -e s/^/:/ ) " |
        xargs -n 3 xauth add &&
        "$@"
}

if [ "$1" = "---innermode" ]
then
    shift
    user="$1"
    display="$2"
    shift 2
    inner "$@"
else
    self="$0"
    sudo "${self}" ---innermode "$USER" "$DISPLAY" "$@"
fi

相关内容