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