2013-12-16 5 views
8

を開けていないホスト名、geditの(および他のXクライアント)を変更した後、それは私のルートに常にエラーを示しが<code>gedit</code>が期待通りに動作しないホスト名を変更した後

** (gedit:23330): WARNING **: Could not open X display 
No protocol specified 
Cannot open display: 
Run 'gedit --help' to 
+0

はどのようにして、ホスト名を変更できますか?手で(つまり/ etc/hostnameを編集して)、あるいはツールを使って? – jml

+0

このコマンドを使用してホスト名を変更します。sudo hostname master.192.168.1.44 –

+0

Ok。あなたの新しいホスト名が '/ etc/hosts'にエントリを持っているかどうかを確認することができます。しかし、私はこれが本当の問題であるかどうかわかりません... – jml

答えて

19

それはありません「いいえプロトコルが指定されていません」 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"に応じて変更する必要があります。追加されるクッキーの値は、既存のクッキーの値と一致する必要があります。

端末エミュレータを開いておらず、認証エラーのために端末エミュレータを開くことができない場合は、コンソール(テキストモード)に切り替えてそこにログインして上記のコマンドを実行できます。

+0

これはとてもうまく動作しています –

0

マシンを再起動して、ホスト名を変更するだけです。

+0

これで問題を解決するには十分ではありません - .Xauthorityファイルを編集すると、受け入れられた答えに指定されているようなトリックが実行されます – btk

0

ノートパソコンの名前を変更したときも、この問題が発生しました。 私はそこから次のコマンド

su

(パスワードを入力)

cd /etc

gedit hosts

でそれを修正するために管理しかし、私は単に古いコンピュータ名への参照を削除それを新しいものに置き換えました。

127.x.x.x localhost 127.x.x.x (New Name)

ただし、お使いのコンピュータ名に変更を加えるたび、あなたは変更は/etc/hostnameファイルだけでなく、/etc/hostファイルの両方で行われていることを確認しなければならないことに注意してください。他のものを作らずに1回変更すると、エラーが発生します。

0

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