我似乎无法从命令行启动 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,您需要环境变量DISPLAY
和XAUTHORITY
.根据设置,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
有kdesudo
、gsudo
、 和其他一些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