Ubuntu 16.04を実行すると、host
次のように設定されます。
- a
user1
でGUIログインを行った人host
。 - a
user2
、彼はasudoer
であり、ログインしていますただ文字()でssh
つなぎますssh user2@host
。
user2
たとえば、モニターでXアプリケーションを実行したいxclock
とします。user1
観点から見ると、これはそれuser1
自体が実行されるのと同じでなければなりません。user1
xclock
プロセスの所有者はプロセスを開始したユーザーであるためですxclock
。user2
重要ではない。
編集する:使用できますsudo
が、パスワードは使用できませんuser1
。パスワードがわからない。
どうすればいいですか?
私は読んだこの回答そしてこの回答しかし、これの直接的な例は含まれていません。また、クッキーのリストを読んで受信しましたが、~/.Xautority
使用できません。MIT-MAGIC-COOKIE-1
xauth list
接続プロンプトでssh
次のように試しましたuser2
。
$ env DISPLAY=:0 XAUTHORITY=/home/user1/.Xauthority xclock
ただし、これによりプロンプトは返されません。のようになることもありますのでご注意くださいsudoer
。user2
有能な.Xauthority
ホームディレクトリのファイルの読み取り/コピー/書き込み。ただし、とが同じでも上記のuser1
コマンドは機能しません。user2
user1
答え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
。
この場合、パスワードuser2
でsudoer
はなくパスワードのみが必要ですuser1
。user2
プロンプトによると:
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は常に同じではないため、これは持続可能な解決策ではありません。