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

Har*_*ran 11 x11 authentication ubuntu xorg ubuntu-12.04

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

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

Hri*_*iev 24

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

~/.Xauthority可以使用xauth list以下命令显示文件中的Cookie列表:

$ xauth list
localhost:1012  MIT-MAGIC-COOKIE-1  bd988401cbf8xxxxxxxxxxxxxxxxxxxx
some.host.example.com/unix:1012  MIT-MAGIC-COOKIE-1  bd988401cbf8xxxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

如果更改主机名,则X11客户端库将无法再在身份验证数据库中找到匹配的cookie,并且X11服务器将拒绝未经身份验证的连接(除非另行配置).

你可以做的是使用xauth以下方法添加匹配的cookie :

$ xauth add "$(hostname)/unix:0" MIT-MAGIC-COOKIE-1 bd988401cbf8xxxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

$(hostname)扩展为hostname命令的结果,并unix:0对应于您DISPLAY设置的环境变量:0.0.如果是另一个显示号码,例如:ddd.0,则应相应地更改添加的主机条目"($hostname)/unix:ddd".另请注意,要添加的cookie的值应与现有cookie的值匹配.

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