web-dev-qa-db-ja.com

Mirへの接続に失敗しました:サーバーソケットへの接続に失敗しました:そのようなファイルまたはディレクトリはありません

別のユーザーとしてログインした後、GUIプログラムを実行するにはどうすればよいですか?

thufir@doge:~$ 
thufir@doge:~$ Sudo -u hawat -i
hawat@doge:~$ 
hawat@doge:~$ whoami
hawat
hawat@doge:~$ 
hawat@doge:~$ pwd
/home/hawat
hawat@doge:~$ 
hawat@doge:~$ echo $HOME
/home/hawat
hawat@doge:~$ 
hawat@doge:~$ firefox
No protocol specified
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :0
hawat@doge:~$ 
17
Thufir

export DISPLAY=:0は私のために働いた。接続しているシステムではなく、接続しているシステムでコマンドを実行してください!

13
user2938093

この回答は、私のUbuntu 16.04とMirで動作します(わずかな適応があります):

xauth を使用して別のユーザーとしてxコマンドを実行します

ラッパーbashスクリプト:

便宜上、 ラッパーbashスクリプトを作成しました/usr/local/bin/xsudoにダウンロードして実行可能(chmod +x /usr/local/bin/xsudo)にマークする場合があります。

次に、単に実行します

xsudo hawat firefox

潜在的な代替案:

  • はるかに単純な代替手段として、pam_xauth(s。 この答え )を調べることもできますが、これは何らかの理由で機能しません。 (Firefoxが:0でディスプレイに接続できないというエラーが引き続き表示されます)
  • 多くのフォーラムでは、xhost +local:または類似のコマンドが表示される場合があります。このコマンドは、willgksudo -u hawat firefoxをラッパースクリプトなしで機能させます。 ただし、これにより、セキュリティの抜け穴が開くことに注意してください:ローカルホストはキーボード、マウス、画面などにアクセスできます。
  • 以前は sux がありましたが、これは何らかの理由で廃止されました。ダウンロードして使用することもできます。私の知る限り、それは私のスクリプトと似たようなことをしました。残念ながら、なぜこれが維持されなくなったのかわかりませんでした。 (おそらく、代わりにpam_xauthを使用する必要があるためです-s。最初の選択肢)
6
lentschi

これにあまりにも多くの時間を費やした後、Ubuntu 16.04のGnomeで正しい値がDISPLAY=:1であり、昔からのDISPLAY=:0ではないことを発見しました。

3
Peter V. Mørch

export DISPLAY =:は正常に機能しますが、ターミナルを開くたびにこれを入力する必要があるため、これは一時的な解決策です。

永続的な解決策:問題は/ etc/sudoersのenv_keep変数が原因である可能性があります。 geditまたはSudo visudoを使用して、/ etc/sudoersの最後に次の行を追加します

デフォルトenv_keep + = "DISPLAY"

注: env_keepに追加するときは、常に"+ ="を使用することに注意してください。 "="で他のenv_keepがある場合、"=" =を使用すると他の値が上書きされるため、それらを"+ ="に変更します。

1
Mahesh Kumar