を開けていないホスト名、geditの(および他のXクライアント)を変更した後、それは私のルートに常にエラーを示しが<code>gedit</code>が期待通りに動作しないホスト名を変更した後
** (gedit:23330): WARNING **: Could not open X display
No protocol specified
Cannot open display:
Run 'gedit --help' to
を開けていないホスト名、geditの(および他のXクライアント)を変更した後、それは私のルートに常にエラーを示しが<code>gedit</code>が期待通りに動作しないホスト名を変更した後
** (gedit:23330): WARNING **: Could not open X display
No protocol specified
Cannot open display:
Run 'gedit --help' to
それはありません「いいえプロトコルが指定されていません」 gedit
だけが失敗しますが、X11プロトコルを使ってグラフィックスサーバーと通信するすべてのプログラムが実際に失敗します。 X11はXauthプロトコルを使用して接続クライアントを認証します。何らかのディスプレイマネージャを使用してログインすると、MIT-MAGIC-COOKIE-1
認証Cookieが作成され、~/.Xauthority
ファイルに書き込まれます。そのファイルはX11クライアントによって読み取られ、そこで利用可能なクッキーは接続の認証に使用されます。
あなた~/.Xauthority
ファイル内のクッキーのリストがxauth list
を使用して表示することができます。
$ xauth list
localhost:1012 MIT-MAGIC-COOKIE-1 bd988401cbf8xxxxxxxxxxxxxxxxxxxx
some.host.example.com/unix:1012 MIT-MAGIC-COOKIE-1 bd988401cbf8xxxxxxxxxxxxxxxxxxxx
あなたのホスト名を変更する場合は、X11クライアント・ライブラリは、もはや認証データベースに一致するクッキーを見つけることができないでしょうX11サーバーは認証されていない接続を拒否します(別途構成されていない限り)。あなたは何ができるか
はxauth
を使用して、一致するクッキーを追加することです:
$ xauth add "$(hostname)/unix:0" MIT-MAGIC-COOKIE-1 bd988401cbf8xxxxxxxxxxxxxxxxxxxx
$(hostname)
はhostname
コマンドの結果に展開し、unix:0
は:0.0
に設定されているあなたのDISPLAY
環境変数に対応しています。それが別の表示番号にある場合、例えば。 :ddd.0
の場合は、追加されたホストエントリを"($hostname)/unix:ddd"
に応じて変更する必要があります。追加されるクッキーの値は、既存のクッキーの値と一致する必要があります。
端末エミュレータを開いておらず、認証エラーのために端末エミュレータを開くことができない場合は、コンソール(テキストモード)に切り替えてそこにログインして上記のコマンドを実行できます。
これはとてもうまく動作しています –
マシンを再起動して、ホスト名を変更するだけです。
これで問題を解決するには十分ではありません - .Xauthorityファイルを編集すると、受け入れられた答えに指定されているようなトリックが実行されます – btk
ノートパソコンの名前を変更したときも、この問題が発生しました。 私はそこから次のコマンド
su
(パスワードを入力)
cd /etc
gedit hosts
でそれを修正するために管理しかし、私は単に古いコンピュータ名への参照を削除それを新しいものに置き換えました。
127.x.x.x localhost 127.x.x.x (New Name)
ただし、お使いのコンピュータ名に変更を加えるたび、あなたは変更は/etc/hostname
ファイルだけでなく、/etc/host
ファイルの両方で行われていることを確認しなければならないことに注意してください。他のものを作らずに1回変更すると、エラーが発生します。
jnweiger commented Aug 13, 2014:ホスト名は関係 ないように
のXauthorityファイルが邪魔に書き込むことができます。
xauth
が 認証ファミリを指定するには、適切なコマンドラインを持っている場合、私は、わからないが、私は「FamilyWild」認証 ファミリーに切り替えることsed
を使用しています。nlist
出力の最初の16ビットを変更する必要があります。 ファミリーワイルドの値は65535
または0xffff
です。この場合xauth nlist :0 | sed -e 's/^..../ffff/' | xauth nmerge -
、家族の数(通常は、ホスト名など)の後に書かれた文字列が全く一致させるために重要ではありません。 、*:0
引数を指定して直接xauth
を経由して、このようなFamilyWildエントリの追加をサポートするために、最近patchが適用されているALTのxauthパッケージで
:
From bc78aa61cfbddaa27dee275f639ba40de6981b17 Mon Sep 17 00:00:00 2001
From: George V. Kouryachy (Fr. Br. George) <[email protected]>
Date: Fri, 4 Aug 2017 18:37:33 +0300
Subject: [PATCH] parse_displayname: use FamilyWild for *:0
---
xauth/gethost.c | 4 ++++
xauth/parsedpy.c | 4 ++++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/xauth/gethost.c b/xauth/gethost.c
index 8cb58c5..598ac48 100644
--- a/xauth/gethost.c
+++ b/xauth/gethost.c
@@ -180,6 +180,10 @@ struct addrlist *get_address_info (
* information to be copied and set len to the number of bytes.
*/
switch (family) {
+ case FamilyWild: /* was :0 */
+ src = "\xff\xff";
+ len = strlen(src);
+ break;
case FamilyLocal: /* hostname/unix:0 */
/* handle unix:0 and :0 specially */
if (prefix == 0 && (strncmp (fulldpyname, "unix:", 5) == 0 ||
diff --git a/xauth/parsedpy.c b/xauth/parsedpy.c
index 97988d3..6c98339 100644
--- a/xauth/parsedpy.c
+++ b/xauth/parsedpy.c
@@ -141,6 +141,10 @@ parse_displayname (const char *displayname,
family = FamilyInternet;
}
#endif
+ } else if (len == 1 && *displayname == '*') {
+ /* ALT: wildcard cookie */
+ host = copystring("*", 1);
+ family = FamilyWild;
} else if (!dnet && (*displayname == '[') && (*(ptr - 1) == ']')) {
/* Allow RFC2732-like [<IPv6NumericAddress>]:display syntax */
family = FamilyInternet6;
--
1.7.3.3
はどのようにして、ホスト名を変更できますか?手で(つまり/ etc/hostnameを編集して)、あるいはツールを使って? – jml
このコマンドを使用してホスト名を変更します。sudo hostname master.192.168.1.44 –
Ok。あなたの新しいホスト名が '/ etc/hosts'にエントリを持っているかどうかを確認することができます。しかし、私はこれが本当の問題であるかどうかわかりません... – jml