回答:
別のユーザーになるときは、一般的に使用したいですsu - user2
。ダッシュはuser2の.bash_profile
ソースを強制します。
さらに、ユーザーにディスプレイへのアクセスを許可する必要があります。これはXによって管理されます。このコマンドxhost +
を使用して、user1のデスクトップにGUIを表示する許可を他のユーザーに許可できます。
注:実行している場合はxhost +
、あなたがUSER1に属しているシェルではまだこの中を実行することをお勧めします。
user2になったら、環境変数を設定する必要があります$DISPLAY
。
$ export DISPLAY=:0.0
xhost +user2
まだこのエラーが発生します- xhost: bad hostname "user2"
。私はいくつかをグーグルで検索しましたが、xhost +user2@laptop
どちらを行う必要があるのかxhost +user2@localhost
、どちらがいいのかわかりません それからそれは言うxhost +user2@localhost being added to access control list
。
xhost
、指定した後でもexport DISPLAY=:0.0
、実行するとleafpad
まだが表示され、実行にNo protocol specified leafpad: Cannot open display:
失敗します。このリンクはlinuxquestions.org/questions/linux-newbie-8/…で見つけました。これには、魔法のCookieとがありxauth
ます。これらの機能がコンピューター上で機能することをテストしましたか?たぶん私の構成と何か違うのでしょうか?私はDebian + LXDEを使用しています。
xhost +
動作し、他に何も必要ないようです(設定する必要はありません$DISPLAY
)。回答を更新してもらえますか、それを受け入れますか?
xhost
するとリストがの形式SI:localuser:USERNAME
で表示されるため、動作するxhost SI:localuser:user2
はずです。ああ、ユーザーの表示はを使用して見つけることができますw
。
xhost +
x-serverに接続できるすべてのホストのユーザーが画面にアクセスできるようにします。xhost +SI:localuser:user2
Debianで動作します。
user1から認証トークンを共有する必要があります(user1の~
ホームであると仮定):
cat ~/.Xauthority | sudo -u user2 -i tee .Xauthority > /dev/null
tee -a
既存の情報を破壊することを避けるために使用する方 が安全かもしれません.Xauthority
。
X11転送を使用できます。
ssh -XY otheruser@localhost your-gui-program-name-here
別のユーザーからアプリを起動できます。ユーザー1でログイン(GUI)しながら、ユーザー2からgimpアプリを起動します。
$ xhost +
$ sudo su user2
(パスを入力)
$ gimp
楽しい :)
export DISPLAY
受け入れ答えが言うように、最初の)
$ xhost -
suxコマンドを試すことができます:
sux user2
suxが$ DISPLAYを処理します。以下を使用してインストールする必要がある場合があります。
sudo apt-get install sux
Debian / Ubuntuの下。
sux
DebianまたはUbuntuによって出荷されなくなりました。私が見つけることができる最良の代替案は、永続的に許可するか使用するためにxhost SI:localuser:root
(または任意のユーザー)を追加することです~/.xprofile
runuser
gksu
/ gksudo
代替がありました。Sidのままですが、セキュリティ上の問題のためBusterで削除されます。
の代わりにsux
、(firefox-esr
以下の例の)グラフィカルコマンドを安全に実行するには$AUTHUSER
(guest
次の例のように):
AUTHUSER=guest
AUTHSTRING=SI:localuser:${AUTHUSER}
xhost +${AUTHSTRING} > /dev/null
SUDO_ASKPASS=/usr/bin/ssh-askpass
export SUDO_ASKPASS
sudo -k --askpass -u ${AUTHUSER} /usr/bin/firefox-esr
xhost -${AUTHSTRING} > /dev/null
sudo -K
コードは:
guest
あなたの現在のユーザーへのユーザーアクセス$DISPLAY
を経由しxhost +SI:localuser:guest
ssh-askpass
パスワードをグラフィカルに要求するために使用します(もちろん、sudoers(5)
NOPASSWD:
セキュリティポリシーで問題ないと判断した場合は、これを回避するために使用できます。またはaskpass
、他のプログラムを使用するか、設定ファイルで指定できます(詳細sudo(8)
については、を参照--askpass
)。sudoers(5)
)/usr/bin/firefox-esr
、別のユーザーとしてコマンドを実行します(guest
)guest
)へのアクセス許可$DISPLAY
は、xhost -SI:localuser:guest
最後に、sudo -K
キャッシュされたパスワードを削除します。そのため、次回の呼び出しでssh-askpass
は(キャッシュされたパスワードを使用する代わりに)パスワードの再入力が求められます。
それは何をしたgksu(8)
かsux(8)
やったよりも少し作業が多いですが、スクリプト化することができ、以下よりもはるかに安全です:
xhost +
(有効になっている限り、どのユーザーでもグラフィック表示にアクセスできます)gksu
/ sux
の(一時的なコピーでした~/.Xauthority
指定されたユーザーがコピーすることができ、MIT-MAGIC-COOKIE-1
休止状態などのスクリーンセーバーは、魔法を変更していない-と長いあなたがシャットダウンマシンなかったか、ディスプレイのログアウトとしてとして(gksuの/ SUX終わった後でも、お使いのディスプレイを使用し続けますクッキー)。 これは、1人のローカルユーザーのみがディスプレイにアクセスでき、コマンドが実行されている間のみです(コマンドが終了$AUTHUSER
すると、ディスプレイにアクセスできなくなります)。
別の安全な代替手段はssh -X
(それなし-Y
では実際に安全性 が低下します!詳細を確認ForwardX11Trusted
しssh_config(5)
てください)、スクリプトを作成していない場合は使いやすいですが、追加のオーバーヘッドを引き起こし(たとえば低速)、一部のプログラムが正しく動作しない可能性がありますなし安全ではありません -Y
。
インストールUIをuser2としてロードする必要があります。
これに従うようにしてください:
ルートとしてログイン:
sudo su
xサーバーをテストします。
xclock
時計が動いているのを見ることができたら、それでいいので、これを実行してみてください:
xhost
結果は次のようになります。
xhost SI:localuser:tri
# tri is my user name
ここで、user2が xhostにアクセスできるようにします
xhost +SI:localuser:user2
ここで、再びuser2にログインして、GUIプログラムを開いてみてください。
sudo su
。sudo
またはを 使用し su
ます。一つを選ぶ。(3)質問はuser1
およびの観点から書かれ てい user2
ます。面であなたの答えを書いてください user1
と user2
。(するかしない。ない tri
。)(4)の説明が含まれていれば、あなたの答えはより良いだろう SI:localuser
。…………………コメントに返信しないでください。 回答を編集して、より明確で完全なものにします。
$XAUTHORITY
がまだuser1's~/.Xauthority
に設定されているためです。プログラムはこれを読み取ろうとしますが、そのファイルは通常モード0600(-rw-------
)、つまり利用できないため失敗しますuser2を含む「other」グループの誰でも読むことができます。あなたがchmod o+r ~/.Xauthority
(user1として)あなたがこの問題を回避する方法をハックしたという意味です。これを示すスクリプトを書きました。