web-dev-qa-db-ja.com

シェルでユーザーを切り替えて、既存のgnomeディスプレイセッションを使用するにはどうすればよいですか?

端末でユーザーを切り替えた場合。

su bob

geditがディスプレイを所有していないため、bobを開けません。

私が実行する場合

xhost +

bobに切り替える前に、一部のアプリケーションでディスプレイを開くことができますが、すべてではありません。 geditを実行しようとすると、次の出力が表示されます。

(crashreporter:4415):GnomeUI-WARNING * :セッションマネージャーへの接続中:指定された認証プロトコルはいずれもサポートされていません。
*
GLib-GIO:ERROR:/build/buildd/glib2.0-2.28.6 /./ gio/gdbusconnection.c:2279:initable_init:assertion failed:(connection-> initialization_error ==ヌル)

4
z7sg

ユーザーbobがコマンドラインから既存のXセッションにアクセスできるようにする場合は、ターミナルプロンプトで次のコマンドを入力できます。

xauth nextract - $DISPLAY | Sudo -u bob xauth nmerge -

Thiusは xauth コマンドを使用して、現在のユーザー(コマンドの最初の部分、|の前)の認証情報を抽出し、それをユーザーbob$HOME/.Xauthorityファイルにマージします。ユーザーbobとしてコマンドを実行できるように設定するには/etc/sudoersが必要であることに注意してください(これはUbuntuボックスの管理ユーザーの場合のデフォルトです)。

その後、su -lでユーザーbobに切り替えることができます。

または、次の個別のコマンドを発行できます。

xauth nextract - $DISPLAY > /tmp/xauth.temporary.file
su -l bob -c 'xauth nmerge - < /tmp/xauth.temporary.file'
rm /tmp/xauth.temporary.file

ご了承ください:

1)一時ファイルには、ユーザーbobが読み取れる権限が必要です(多くの場合、システム上のanyユーザーが読み取れることを意味します) );

2)一時ファイルを読み取ることができるすべてのユーザーがXディスプレイにアクセスできる時間枠があります。

したがって、これらの欠点がないため、Sudoアプローチを使用することをお勧めします。

3
Riccardo Murri

別の方法、xhost +が実行された後:

dbus-launch gedit --sm-client-disable
0
enzotib