GUI 在未定义 $XAUTHORITY 的情况下运行,但不适用于 root

GUI 在未定义 $XAUTHORITY 的情况下运行,但不适用于 root

我使用 CentOS 6,使用 Xfce 作为桌面环境,并已切换xdmgdm显示管理器。

然而,进行此更改后,我观察到一个非常奇怪的现象:图形应用程序可以在没有$XAUTHORITY定义的情况下运行:

$ echo $DISPLAY
:0.0
$ echo $XAUTHORITY

$ zenity --error --text ".........."
$ echo $?
0

然而,当我 sudo 时:

$ sudo -s
[sudo] password for xxxxxx: 
# echo $DISPLAY
:0.0
# echo $XAUTHORITY

# zenity --error --text "........."
No protocol specified

(zenity:3793): Gtk-WARNING **: cannot open display: :0.0

我认为 和 都$DISPLAY需要$XAUTHORITY定义才能运行 GUI,但这并没有发生。有人知道发生了什么事吗?

编辑:

评论中建议检查和使用 的值DBUS_SESSION_ADDRESS_VALUE,但是:

$ echo $DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-ypE50rEtQu,guid=7e2bc970a8ca43af3f7bb01000000255
$ echo $DISPLAY
:0.0
$ sudo -s
# export DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-ypE50rEtQu,guid=7e2bc970a8ca43af3f7bb01000000255"
# echo $DISPLAY
:0.0
# echo $DBUS_SESSION_BUS_ADDRESS 
unix:abstract=/tmp/dbus-ypE50rEtQu,guid=7e2bc970a8ca43af3f7bb01000000255
# zenity --error --text "..........."
No protocol specified

(zenity:16931): Gtk-WARNING **: cannot open display: :0.0

答案1

X(7) 概述手册页(顺便推荐阅读整篇文章)告诉我们:

Xlib从中提取授权数据的文件可以使用环境变量XAUTHORITY指定,默认为主目录中的文件.Xauthority。

因此,如果您的授权文件位于常用位置,则 XAUTHORITY 不是强制性的。 X 客户端在没有它的情况下工作是完全正常的。切换用户可能会破坏它,因为主目录不同,设置环境变量在这种情况下会有所帮助。

相关内容