2013-12-16 6 views
8

Dopo aver cambiato il nome host gedit non funziona come previsto, mostra l'errore sempre nel mio root "Nessun protocollo specificato"Dopo aver cambiato nome host, gedit (e altri client X) non aprire

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

Come si fa a cambiare l'hostname? A mano (ad esempio, modifica/etc/hostname) o utilizzando uno strumento? – jml

+0

io cambio il nome dell'host usando questo comando sudo hostname master.192.168.1.44 –

+0

Ok. Puoi verificare se il tuo nuovo nome host ha una voce in '/ etc/hosts ', altrimenti aggiungilo. Ma non sono sicuro che questo sia il vero problema ... – jml

risposta

19

Non è solo gedit che sta per fallire ma in realtà tutti i programmi che usano il protocollo X11 per parlare con il server grafico. X11 utilizza il protocollo Xauth per autenticare i client di connessione. Quando esegui il login tramite una sorta di display manager, un cookie di autenticazione MIT-MAGIC-COOKIE-1 viene creato e scritto nel tuo file ~/.Xauthority. Il file viene letto dai client X11 e i cookie disponibili vengono utilizzati per autenticare le connessioni.

L'elenco dei cookie nel file ~/.Xauthority può essere visualizzato utilizzando xauth list:

$ xauth list 
localhost:1012 MIT-MAGIC-COOKIE-1 bd988401cbf8xxxxxxxxxxxxxxxxxxxx 
some.host.example.com/unix:1012 MIT-MAGIC-COOKIE-1 bd988401cbf8xxxxxxxxxxxxxxxxxxxx 

Se si cambia il nome host, la libreria client X11 non sarà più in grado di trovare un cookie corrispondente nel database di autenticazione e il server X11 rifiuterà la connessione non autenticata (se non diversamente configurato).

Che cosa si può fare è di aggiungere un cookie corrispondente mediante l'xauth:

$ xauth add "$(hostname)/unix:0" MIT-MAGIC-COOKIE-1 bd988401cbf8xxxxxxxxxxxxxxxxxxxx 

$(hostname) espande al risultato del comando hostname e unix:0 corrisponde alla variabile di ambiente DISPLAY essere impostato su :0.0. Se si tratta di un altro numero di display, ad es. :ddd.0, quindi è necessario modificare di conseguenza la voce host aggiunta a "($hostname)/unix:ddd". Si noti inoltre che il valore del cookie aggiunto deve corrispondere al valore di quello esistente.

Se non si dispone di un emulatore di terminale aperto in quel momento e non è possibile aprirne uno a causa di un errore di autenticazione, è possibile passare alla console (modalità testo), effettuare il login e eseguire il comando precedente.

+0

ora funziona bene grazie mille –

0

È sufficiente riavviare la macchina per rendere effettiva la modifica del nome host.

+0

Questo non è sufficiente per risolvere il problema - la modifica del file .Xauthority fa il trucco, come specificato nella risposta accettata – btk

0

Quando ho cambiato il nome del mio portatile, ho riscontrato anche questo problema. Tuttavia sono riuscito a risolvere il problema con i seguenti comandi

su

(inserire la password)

cd /etc

gedit hosts

Da lì ho semplicemente rimosso il riferimento al nome vecchio computer e sostituito con il nuovo.

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

notare, tuttavia, che ogni volta che si apportano modifiche al tuo nome del computer, è necessario assicurarsi che le modifiche vengono apportate sia nel file /etc/hostname così come il file /etc/host. Se fai 1 cambiamento senza fare l'altro, riceverai un errore.

0

jnweiger commented Aug 13, 2014:

Il file Xauthority può essere scritta in modo tale che il nome host non non importa.

non sono sicuro, se xauth ha una linea di comando appropriata per specificare l'autenticazione Famiglia , ma io uso sed per passare alla autenticazione Famiglia 'FamilyWild'. Dobbiamo modificare i primi 16 bit dell'uscita nlist. Il valore di FamilyWild è 65535 o 0xffff.

xauth nlist :0 | sed -e 's/^..../ffff/' | xauth nmerge - 

In questo caso, la stringa scritta dopo il numero di famiglia (di solito, un hostname, ecc) non ha importanza per la corrispondenza a tutti.

Nel pacchetto di ALT xauth, non è stato applicato un patch recentemente per sostenere l'aggiunta di tali FamilyWild voci tramite xauth direttamente con un argomento *:0:

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 
Problemi correlati