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

时间:2013-12-16 13:10:59

标签: ubuntu authentication ubuntu-12.04 x11 xorg

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

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

4 个答案:

答案 0 :(得分:23)

不仅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对应于您设置为DISPLAY的{​​{1}}环境变量。如果是另一个显示号码,例如:0.0,然后您应该将添加的主机条目相应地更改为:ddd.0。另请注意,添加的cookie的值应与现有cookie的值匹配。

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

答案 1 :(得分:0)

只需重启机器即可更改主机名。

答案 2 :(得分:0)

jnweiger commented Aug 13, 2014

  

Xauthority文件可以用主机名的方式编写   无所谓。

     

我不确定,如果xauth有适当的命令行来指定   身份验证系列,但我使用sed切换到身份验证   家庭' FamilyWild' 。我们需要改变前16位   nlist输出。 FamilyWild 的值为655350xffff

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

在这种情况下,在家庭编号(通常是主机名等)之后写的字符串对于匹配无关紧要。

在ALT的xauth包中,最近已应用patch来支持通过xauth直接添加此类 FamilyWild 条目{ {1}}参数:

*:0

答案 3 :(得分:-1)

当我更改笔记本电脑的名称时,我也遇到了这个问题。 但是我设法使用以下命令修复它

su

(输入密码)

cd /etc

gedit hosts

从那里,我只是删除了对旧计算机名称的引用,并将其替换为新的。

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

但请注意,无论何时更改计算机名称,都必须确保在/etc/hostname文件和/etc/host文件中进行更改。如果您在不进行另一次更改的情况下进行1次更改,则会出现错误。