GUIは$ XAUTHORITYが定義されていない状態で実行されますが、ルートでは実行されません。

GUIは$ XAUTHORITYが定義されていない状態で実行されますが、ルートでは実行されません。

私はXfceをデスクトップ環境として使用するCentOS 6を使用しており、ディスプレイマネージャ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

私はGUIを実行するために両方を定義する$DISPLAY必要があると思いましたが、そのようなことは起こりませんでした。$XAUTHORITY何が起こっているのか知っている人はいますか?

編集する:

ただし、確認して使用するためにコメントに提案された値は次のとおり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クライアントがそれなしで動作することは完全に大丈夫です。ユーザーを切り替えると、ホームディレクトリが異なるため、問題が発生する可能性があります。この場合、環境変数を設定すると便利です。

おすすめ記事