XForwarded サーバーで Sudo と Gedit の使用が失敗します。

XForwarded サーバーで Sudo と Gedit の使用が失敗します。

centosサーバーとUbuntuホストの両方にgeditがインストールされています。サーバーへのルートログインはブロックされ、ユーザーだけがrsaキーを介してSSHを介してログインできます。

サーバーにログインするとき- Xパラメータとして提供されたら、geditを使用できます。たとえば、
gedit filename.txt &
ファイルは編集して保存できるように gedit で開きます。しかし、ファイルを編集するためにsudoを実行すると、次のエラーが発生します。

sudo gedit filename.txt &

[1] 11039
[user@server ~]$ X11 connection rejected because of wrong authentication.

** (gedit:11040): WARNING **: Could not open X display
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.

(gedit:11040): Gtk-WARNING **: cannot open display: localhost:10.0

[1]+  Exit 1                  sudo gedit filename.txt

この状況でGeditをどのように使用できますか?

答え1

代わりにこのコマンドを使用できますsudoedit

EDITOR=gedit sudoedit filename.txt

それがするのは、ファイルのコピーを取得し、あなたがしたようにエディタを実行し、ファイルが変更されたことを検出したら結果を再コピーすることです。

ほとんどの場合、同じ効果はありますが、sudo gedit filename.txt権限のない方法でエディタを実行するため、X転送は引き続き機能します。

答え2

説明を提供するために実行すると、HOMEをrootにリセットするなど、sudo多くの環境変数がリセットされます(おそらく)。 X11プログラムの実行時にDISPLAYに接続するには、XAUTHORITYマジッククッキーが必要です。接続すると、適切なクッキーがリモコンに保存されます。$HOME/rootssh -X~/.Xauthority

しかし、sudoの後、X11プログラムは/root/.XauthorityCookieを取得できないか、古い、古いCookieになるでしょう。

だから無効な認証あなたが見るメッセージ。 sudoの後に保存または回復する方法はいくつかありますが、特定のケースで最も賢明な方法は、他の答えのように使用すること$HOMEです。sudoedit

関連情報