2013-12-16 27 views
8

Po zmianie nazwy hosta gedit nie działa zgodnie z oczekiwaniami, to zawsze pokazuje błąd w moim korzeni „Brak protokołu podano”Po zmianie nazwy hosta, gedit (i innych klientów X) nie otwierać

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

Jak zmienić nazwę komputera? Ręcznie (np. Edycja/etc/hostname) lub przy użyciu narzędzia? – jml

+0

Zmieniam nazwę hosta za pomocą tego polecenia sudo hostname master.192.168.1.44 –

+0

Ok. Możesz sprawdzić, czy twoja nowa nazwa hosta ma wpis w '/ etc/hosts' else dodaj go. Ale nie jestem pewien, czy to jest prawdziwy problem ... – jml

Odpowiedz

19

Nie tylko gedit, które może zawieść, ale w rzeczywistości wszystkie programy używające protokołu X11 do komunikowania się z serwerem graficznym. X11 używa protokołu Xauth do uwierzytelniania klientów łączących. Kiedy logujesz się za pośrednictwem jakiegoś menedżera wyświetlania, plik cookie uwierzytelniający MIT-MAGIC-COOKIE-1 jest tworzony i zapisywany w pliku ~/.Xauthority. Plik ten jest odczytywany przez klientów X11, a pliki cookie dostępne do tego celu służą do uwierzytelniania połączeń.

Lista ciasteczek w pliku ~/.Xauthority mogą być wyświetlane przy użyciu xauth list:

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

Jeśli zmienisz nazwę hosta, biblioteka klient X11 nie będzie już w stanie znaleźć cookie dopasowanie w bazie danych uwierzytelniania a serwer X11 odrzuci nieuwierzytelnione połączenie (chyba że skonfigurowano inaczej).

Co można zrobić, to dodać cookie pasujący korzystając xauth:

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

$(hostname) rozszerza na skutek polecenia z hostname i unix:0 odpowiada zmienna DISPLAY środowisko jest ustawiony na :0.0. Jeśli jest to inny numer wyświetlacza, np. :ddd.0, należy zmienić dodany wpis hosta zgodnie z "($hostname)/unix:ddd". Zwróć też uwagę, że wartość dodawanego cookie powinna odpowiadać wartości istniejącego.

Jeśli nie masz otwartego emulatora terminala i nie możesz go otworzyć z powodu błędu uwierzytelnienia, możesz przełączyć się na konsolę (tryb tekstowy), zaloguj się i wykonaj powyższe polecenie.

+0

teraz działa dobrze dziękuję bardzo –

0

Wystarczy ponownie uruchomić urządzenie, aby zmienić nazwę hosta.

+0

To nie wystarcza, aby rozwiązać problem - edycja pliku .Xauthority wykonuje trik, zgodnie z zaakceptowaną odpowiedzią – btk

0

Kiedy zmieniłem nazwę mojego laptopa, również spotkałem się z tym problemem. Jednak udało mi się go naprawić za pomocą następujących poleceń

su

(wprowadź hasło)

cd /etc

gedit hosts

Stamtąd po prostu usunięto odniesienie do starej nazwy komputera i zastąpił go nowym.

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

jednak pamiętać, że w dowolnym momencie dokonać zmiany nazwy komputera, należy upewnić się, że zmiany są dokonywane zarówno w pliku /etc/hostname jak również pliku /etc/host. Jeśli dokonasz 1 zmiany bez wykonywania drugiej, otrzymasz błąd.

0

jnweiger commented Aug 13, 2014:

Plik Xauthority może być napisany w taki sposób, że nazwa hosta nie nie ma znaczenia.

Nie jestem pewien, czy xauth ma odpowiednią linię polecenia, aby określić Authentication rodziny, ale używam sed, aby przełączyć się do uwierzytelniania Rodzina „FamilyWild”. Musimy zmienić pierwsze 16 bitów wyjścia nlist. Wartość FamilyWild to 65535 lub 0xffff.

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

W tym przypadku napis napisany po numerze rodziny (zwykle jest to nazwa hosta) nie ma znaczenia dla dopasowania w ogóle.

W xauth pakiecie Alt za nie została zastosowana patch niedawno wspierać dodając takie FamilyWild wpisy poprzez xauth bezpośrednio z *:0 argumentu:

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