Ubuntu 更改主机名后,gedit(和其他X客户端)不';t打开

Ubuntu 更改主机名后,gedit(和其他X客户端)不';t打开,ubuntu,authentication,ubuntu-12.04,x11,xorg,Ubuntu,Authentication,Ubuntu 12.04,X11,Xorg,更改主机名gedit后,它在我的根目录中始终显示错误“未指定协议” 不仅gedit会失败,实际上所有使用X11协议与图形服务器对话的程序都会失败。X11使用Xauth协议对连接的客户端进行身份验证。当您通过某种显示管理器登录时,将创建一个MIT-MAGIC-COOKIE-1身份验证COOKIE,并将其写入您的~/.Xauthority文件中。该文件由X11客户端读取,可用的cookie用于验证连接 您的~/.Xauthority文件中的cookie列表可以使用xauth list显示: $ xa

更改主机名
gedit
后,它在我的根目录中始终显示错误“未指定协议”


不仅
gedit
会失败,实际上所有使用X11协议与图形服务器对话的程序都会失败。X11使用Xauth协议对连接的客户端进行身份验证。当您通过某种显示管理器登录时,将创建一个
MIT-MAGIC-COOKIE-1
身份验证COOKIE,并将其写入您的
~/.Xauthority
文件中。该文件由X11客户端读取,可用的cookie用于验证连接

您的
~/.Xauthority
文件中的cookie列表可以使用
xauth list
显示:

$ xauth list
localhost:1012  MIT-MAGIC-COOKIE-1  bd988401cbf8xxxxxxxxxxxxxxxxxxxx
some.host.example.com/unix:1012  MIT-MAGIC-COOKIE-1  bd988401cbf8xxxxxxxxxxxxxxxxxxxx
如果更改主机名,X11客户端库将无法再在身份验证数据库中找到匹配的cookie,X11服务器将拒绝未经身份验证的连接(除非另有配置)

您可以使用
xauth
添加匹配的cookie:

$ xauth add "$(hostname)/unix:0" MIT-MAGIC-COOKIE-1 bd988401cbf8xxxxxxxxxxxxxxxxxxxx
$(hostname)
扩展到
hostname
命令的结果,并且
unix:0
对应于设置为
:0.0
显示
环境变量。如果是另一个显示号码,例如
:ddd.0
,则应相应地将添加的主机条目更改为
“($hostname)/unix:ddd”
。还要注意,要添加的cookie的值应该与现有cookie的值匹配


如果您当时没有打开终端仿真器,并且由于身份验证错误而无法打开,则可以切换到控制台(文本模式),登录并执行上述命令。

只需重新启动计算机即可使主机名更改生效。

当我更改笔记本电脑的名称时,我也遇到了这个问题。 但是,我通过以下命令成功地修复了它

su

(输入密码)

cd/etc

gedit主机

从那里,我简单地删除了对旧计算机名称的引用,并用新名称替换它

127.x.x.x localhost
127.x.x.x(新名称)

但是请注意,无论何时更改计算机名,都必须确保在
/etc/hostname
文件以及
/etc/host
文件中进行更改。如果您进行了一次更改而未进行另一次更改,则会出现错误。

:

Xauthority文件的写入方式可以使主机名 没关系

我不确定,
xauth
是否有适当的命令行来指定 身份验证系列,但我使用
sed
切换到身份验证 家庭“家庭生活”。我们需要改变数据的前16位
nlist
输出。FamilyWild的值为
65535
0xffff

xauth nlist :0 | sed -e 's/^..../ffff/' | xauth nmerge -
在这种情况下,在族号(通常是主机名等)之后写入的字符串对于匹配根本不重要

在ALT的软件包中,最近应用了一个支持通过
xauth
直接使用
*:0
参数添加这样的FamilyWild条目:

From bc78aa61cfbddaa27dee275f639ba40de6981b17 Mon Sep 17 00:00:00 2001
From: George V. Kouryachy (Fr. Br. George) <george@>
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
自BC78AA61CFBDAA27DEE275F639BA40DE6981B17周一2001年9月17日00:00:00
发件人:George V.Kouryachy(乔治神父)
日期:2017年8月4日星期五18:37:33+0300
主题:[修补程序]解析\u显示名称:将FamilyWild用于*:0
---
xauth/gethost.c | 4++++
xauth/parsedpy.c | 4++++
2个文件已更改,8个插入(+),0个删除(-)
diff——git a/xauth/gethost.c b/xauth/gethost.c
索引8cb58c5..598ac48 100644
---a/xauth/gethost.c
+++b/xauth/gethost.c
@@-180,6+180,10@@struct addrlist*获取地址信息(
*要复制的信息,并将len设置为字节数。
*/
开关(系列){
+病例家族世界:/*为:0*/
+src=“\xff\xff”;
+len=strlen(src);
+中断;
case FamilyLocal:/*主机名/unix:0*/
/*专门处理unix:0和:0*/
如果(前缀==0&&(strncmp(fulldpyname,“unix:”,5)==0||
diff——git a/xauth/parsedpy.c b/xauth/parsedpy.c
索引97988d3..6c98339 100644
---a/xauth/parsedpy.c
+++b/xauth/parsedpy.c
@@-141,6+141,10@@parse_displayname(const char*displayname,
家庭=家庭互联网;
}
#恩迪夫
+}else if(len==1&&*displayname=='*')){
+/*ALT:通配符cookie*/
+主机=复制字符串(“*”,1);
+家庭=家庭生活;
}如果(!dnet&&(*displayname='[')&&(*(ptr-1)=']'),则为else{
/*允许RFC2732 like[]:显示语法*/
家庭=家庭互联网6;
-- 
1.7.3.3

如何手动更改主机名(即编辑/etc/hostname)或者使用工具?我使用sudo hostname master.192.168.1.44Ok命令更改主机名。您可以检查您的新主机名在
/etc/hosts
中是否有条目,或者添加它。但是,我不确定这是否是真正的问题……是我在使用Gedit的主机中添加了192.168.1.44 master.192.168.1.44这样的内容,这不足以解决问题-编辑.Xauthority文件就可以做到这一点,正如Linux机器的激进解决方案的公认答案中所指定的那样-如果不将机器用于实际工作,重新启动只是“简单的”!要清除以前主机名的混乱:xauth删除旧主机名/unix:0
From bc78aa61cfbddaa27dee275f639ba40de6981b17 Mon Sep 17 00:00:00 2001
From: George V. Kouryachy (Fr. Br. George) <george@>
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