我使用 CentOS 6,使用 Xfce 作为桌面环境,并已切换xdm
为gdm
显示管理器。
然而,进行此更改后,我观察到一个非常奇怪的现象:图形应用程序可以在没有$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 客户端在没有它的情况下工作是完全正常的。切换用户可能会破坏它,因为主目录不同,设置环境变量在这种情况下会有所帮助。