他のユーザーのモニターでXプログラムを実行する

他のユーザーのモニターでXプログラムを実行する

Ubuntu 16.04を実行すると、host次のように設定されます。

  • auser1でGUIログインを行った人host
  • a user2、彼はasudoerであり、ログインしていますただ文字()でsshつなぎますssh user2@host

user2たとえば、モニターでXアプリケーションを実行したいxclockとします。user1観点から見ると、これはそれuser1自体が実行されるのと同じでなければなりません。user1xclock

プロセスの所有者はプロセスを開始したユーザーであるためですxclockuser2重要ではない

編集する:使用できますsudoが、パスワードは使用できませんuser1。パスワードがわからない。

どうすればいいですか?


私は読んだこの回答そしてこの回答しかし、これの直接的な例は含まれていません。また、クッキーのリストを読んで受信しましたが、~/.Xautority使用できません。MIT-MAGIC-COOKIE-1xauth list

接続プロンプトでssh次のように試しましたuser2

$ env DISPLAY=:0 XAUTHORITY=/home/user1/.Xauthority xclock

ただし、これによりプロンプトは返されません。のようになることもありますのでご注意くださいsudoeruser2有能な.Xauthorityホームディレクトリのファイルの読み取り/コピー/書き込み。ただし、とが同じでも上記のuser1コマンドは機能しません。user2user1

答え1

私はそれを使用したことがありませんが、sudoモニターに他のユーザーを置く標準的な手順は、認証情報をxauth(1)手動で使用する代わりにエクスポートを使用することです~/.Xauthority

したがって、user1モニターにログインしている場合、guest(user2)は次のコマンドを実行する必要があります。

user2$ export DISPLAY=:0
user2$ ssh user1@localhost "xauth extract - $DISPLAY" | xauth merge -
user2$ xclock

su次の代わりに使用できますssh

user2$ su - user1 -c "xauth extract - $DISPLAY" | xauth merge -

答え2

他の人のX11セッションに接続するには、正しいDISPLAY環境変数の値と他のユーザーのファイルの内容が必要です~/.Xauthority

user1ローカルにログオンした場合、:0.0これは最初のローカルX11ディスプレイであるため、DISPLAY変数はほぼ常に設定されます。

その後、user2次のようにすることができます。

export DISPLAY=':0.0'
sudo cp ~user1/.Xauthority $TMP/user1_Xauthority
sudo chown user2 $TMP/user1_Xauthority
export XAUTHORITY=$TMP/user1_Xauthority
xclock &

なぜなら、DISPLAY=':0.0'X11アプリケーションに接続するように指示するからです。地元のUNIXソケットを介して表示するには、/tmp/.X11-unix/X0これらのコマンドを物理ディスプレイと同じホストで実行する必要があります。

歴史的に、X11プロトコルはもともとTCPポート(6000 +モニター番号)を使用してネットワーク経由でモニターに接続できるように設計されていましたが、これは安全ではないことが証明されており、最新のLinux / Unixシステムではデフォルトで無効になることがよくありますexport DISPLAY=remotehost:0.0。たとえば、X11アプリケーションの出力を接続されたモニタにプッシュすることは、特に有効にしない限り機能しません(これを有効にするのは一般的に悪い考えです)。remotehost

答え3

みんなすべての回答のメモは便利ですが、提案されたコマンドのどれも要求される解決策ではありません。明確にするためにここに提供しようとしています。

最良の方法はmosvy方法のようです。また、ファイル権限が非常に厳しいからです~user1/.Xauthority

DISPLAY使用されたアクティビティの数を最初に取得する必要があります。user1たとえば、の出力から取得することwhoができます一般的です:0

この場合、パスワードuser2sudoerはなくパスワードのみが必要ですuser1user2プロンプトによると:

user2$ export DISPLAY=:0
user2$ sudo -u user1 -i xauth extract - $DISPLAY | xauth merge -
user2$ xclock

または(として行動user1):

user2$ sudo -u user1 DISPLAY=:0 xclock &

答え4

sudoをまったく使用していないため、完全なソリューションを提供することはできません。 user1でxclockを実行する前に、DISPLAYとXAUTHORITYをエクスポートする必要があります。

su -l user1 -c 'export DISPLAY=:0.0;XAUTHORITY=/home/user1/XAUTHORITY;xclock&'

DISPLAYとXAUTHORITYは常に同じではないため、これは持続可能な解決策ではありません。

関連情報