2013-12-16 13 views
8

Sau khi thay đổi tên máy gedit không làm việc như mong đợi, nó cho thấy lỗi luôn trong thư mục gốc của tôi "Không giao thức quy định"Sau khi thay đổi tên máy, gedit (và khách hàng X khác) không mở

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

Làm thế nào để bạn thay đổi tên máy? Bằng tay (tức là chỉnh sửa/etc/tên máy chủ) hoặc bằng cách sử dụng một công cụ? – jml

+0

i thay đổi tên máy chủ bằng lệnh này sudo hostname master.192.168.1.44 –

+0

Ok. Bạn có thể kiểm tra xem tên máy chủ mới của bạn có một mục nhập trong '/ etc/hosts' hay không. Nhưng, tôi không chắc chắn đây là vấn đề thực sự ... – jml

Trả lời

19

Nó không chỉ gedit sẽ bị lỗi nhưng thực ra tất cả các chương trình sử dụng giao thức X11 để nói chuyện với máy chủ đồ họa. X11 sử dụng giao thức Xauth để xác thực các máy khách kết nối. Khi bạn đăng nhập thông qua một số loại trình quản lý hiển thị, một cookie xác thực MIT-MAGIC-COOKIE-1 được tạo và ghi vào tệp ~/.Xauthority của bạn. Tệp đó được đọc bởi các máy khách X11 và các cookie có sẵn được sử dụng để xác thực các kết nối.

Danh sách các cookie trong tập tin ~/.Xauthority của bạn có thể được hiển thị bằng xauth list:

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

Nếu bạn thay đổi tên máy chủ của bạn, thư viện khách hàng X11 sẽ không còn có thể tìm thấy một cookie tương ứng trong cơ sở dữ liệu xác thực và máy chủ X11 sẽ từ chối kết nối chưa được xác thực (trừ khi được định cấu hình khác).

gì bạn có thể làm là thêm một cookie phù hợp sử dụng xauth:

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

$(hostname) mở rộng để kết quả của lệnh hostnameunix:0 tương ứng với biến DISPLAY môi trường của bạn được thiết lập để :0.0. Nếu nó là một số hiển thị khác, ví dụ: :ddd.0, sau đó bạn nên thay đổi mục nhập máy chủ được thêm tương ứng thành "($hostname)/unix:ddd". Cũng lưu ý rằng giá trị của cookie được thêm phải khớp với giá trị của cookie hiện tại.

Nếu bạn không có bộ mô phỏng đầu cuối tại thời điểm đó và bạn không thể mở do lỗi xác thực, bạn có thể chuyển sang bàn điều khiển (chế độ văn bản), đăng nhập tại đó và thực hiện lệnh trên.

+0

bây giờ làm việc tốt của nó cảm ơn bạn rất nhiều –

0

Chỉ cần khởi động lại máy để thay đổi tên máy chủ.

+0

Đó là không đủ để khắc phục vấn đề - chỉnh sửa tệp .Xauthority, mẹo này, như được chỉ định trong câu trả lời được chấp nhận – btk

0

Khi tôi đổi tên máy tính xách tay của mình, tôi cũng gặp phải sự cố này. Tuy nhiên tôi cố gắng sửa chữa nó bằng các lệnh sau

su

(nhập mật khẩu)

cd /etc

gedit hosts

Từ đó tôi chỉ đơn giản là loại bỏ các tham chiếu đến tên máy tính cũ và thay thế nó bằng cái mới.

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

Tuy nhiên Lưu ý rằng bất cứ khi nào bạn thay đổi tên máy tính của bạn, bạn phải đảm bảo rằng những thay đổi được thực hiện trong cả hai tập tin /etc/hostname cũng như /etc/host tập tin. Nếu bạn thực hiện 1 thay đổi mà không thực hiện thay đổi khác, bạn sẽ gặp lỗi.

0

jnweiger commented Aug 13, 2014:

File XAUTHORITY có thể được viết theo một cách sao cho hostname không không quan trọng.

Tôi không chắc chắn, nếu xauth có một dòng lệnh thích hợp để xác định xác thực Family , nhưng tôi sử dụng sed để chuyển sang xác thực Family 'FamilyWild'. Chúng ta cần phải thay đổi 16 bit đầu tiên của đầu ra nlist. Giá trị của FamilyWild65535 hoặc 0xffff.

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

Trong trường hợp này, chuỗi bằng văn bản sau khi số gia đình (thường, một hostname, vv) không quan trọng cho phù hợp chút nào.

Trong gói xauth ALT, có đã được áp dụng một patch thời gian gần đây để hỗ trợ thêm như FamilyWild mục qua xauth trực tiếp với một cuộc tranh cãi *: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 
Các vấn đề liên quan