FreeBSD:rootを訴えた後にXアプリケーションを開きますか?

FreeBSD:rootを訴えた後にXアプリケーションを開きますか?

FreeBSD 8.2を使用してください。私はvncを介して私のコンピュータにアクセスするためにightvncを使用しています。私は一般ユーザーとしてログインしました。それは問題ではありません。 Xアプリケーションを開くことができ、正しく表示されます。それからルートを訴えましたが、開けませんでした。以前はxhost + localhostを実行できましたが、もう機能しませんでした。 .Xauthorityコピーについてオンラインで読んだので、ルートの.cshrcで次のようにします。

if ($user != "root") then
  setenv XAUTHORITY /home/$user/.Xauthoriy
endif

これはさらに一歩進んだが、今ではエラーが発生する。

GLib-GIO:ERROR:gdbusconnection.c:2270:initable_init: assertion failed ..

インターネットでこれを検索しましたが、誰かがコマンドの前にdbus-launchを付けるようにしました。

dbus-launch emacs

私はこれを試してみましたが、うまくいきます。シームレスなルートを使用した後にXベースのプログラムを起動できるようにするにはどうすればよいですか(FreeBSD 6.xと同様)。

答え1

これには解決策があります。このウェブサイトには説明がありますhttps://bugs.launchpad.net/ubuntu/+source/gconf/+bug/336660:

問題の説明は次のとおりです。

別のユーザーとしてログインした端末でrootとしてsuすると、新しい「su-ed」ユーザーは親シェルユーザーから環境変数を継承します。

例: ユーザー jack の DBUS_SESSION_BUS_ADDRESS 環境変数が "unix:abstract=/tmp/dbus-l5SiTFzmR8,guid=1af28c9d83400a896ef6268d4a7af59f" に設定されているとします。端末を jack として開いて su を使用してルートする場合、DBUS_SESSION_BUS_ADDRESS 変数はそのまま残す必要があります。ユーザー挿入穴として。それが問題です。まさにこの特別な環境です。変数(DBUS_SESSION_BUS_ADDRESS)が問題を引き起こします。 gedit、nautilusなどのGNOMEプログラム。 。 。 dbus プロトコルだけでなく、アプリケーション固有の設定を保存する gconf と通信するには、dbus プロトコルを使用します。たとえば、rootとして実行されたプログラムは、ユーザーjackで実行されたプログラムとは異なるD-Busセッションバスアドレスを使用します。したがって、問題はrootに切り替えましたが、DBUS_SESSION_BUS_ADDRESS変数がまだjackのdbusセッションバスアドレスを指していることです。

解決策:rootユーザーは別のdbusセッションアドレス(/root/.dbus/session-bus/...)も持っているので、端末にいてrootに「su-ed」するときはrootのdbusアドレスを使用してください。単に DBUS_SESSION_BUS_ADDRESS 変数を消去します。例:export DBUS_SESSION_BUS_ADDRESS="" gconf との dbus 通信が必要なプログラムは、この環境変数を確認し、空の場合、ユーザー ~/.dbus/session-bus/ ディレクトリ (正しい位置) から dbus アドレスを読み込みます。これを永続的にするには、root ユーザーの .bashrc ファイルに次の行を追加します。 )端末を開き、suを実行します。 DBUS_SESSION_BUS_ADDRESS変数がクリアされ、アプリケーションが正しい場所からdbusアドレスを読み取ります。

しかし、新しいdbusセッションを開始するためにdbus-launchを使用する必要はありません。これにより、アプリケーションがまだ間違った場所からdbusアドレスを読み取っても、問題はまだ存在します。

DBUS_SESSION_BUS_ADDRESSの設定を解除すると、スーツの後にXでemacsを起動できるようになりました。しかし、まだ警告が表示されます。

(emacs 1879): GLib-WARNING **: In call to g_spawn_sync()...

関連情報