После изменения имени хоста gedit (и другие X-клиенты) не открываются

после изменения имени сервера!--1--> работает не так, как ожидалось, он всегда показывает ошибку в моем корне "нет указанного протокола"

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

4 ответов


не только gedit это произойдет, но на самом деле все программы, которые используют протокол X11 для разговора с графическим сервером. X11 использует протокол Xauth для проверки подлинности подключающихся клиентов. Когда вы входите в систему через какой-то диспетчер отображения, a MIT-MAGIC-COOKIE-1 аутентификация cookie создается и записывается в ваш . Этот файл читается клиентами X11, и доступные там файлы cookie используются для аутентификации соединений.

список cookies в вашем ~/.Xauthority файл может отображаться с помощью 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 отклонит неавторизованное соединение (если не настроено иначе).

что вы можете сделать, это добавить соответствующий файл cookie с помощью xauth:

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

$(hostname) расширяется до результата и unix:0 соответствует вашему DISPLAY переменная окружения устанавливается в :0.0. Если это другой номер дисплея, например :ddd.0, затем вы должны изменить добавленную запись хоста соответственно на "($hostname)/unix:ddd". Обратите также внимание,что значение добавляемого файла cookie должно совпадать со значением существующего.

если в это время у вас нет эмулятора терминала, и вы не можете открыть его из-за ошибки аутентификации, вы можете переключиться на консоль (текстовый режим), войти туда и выполнить вышеуказанное команда.


Просто перезагрузите машину, чтобы изменить имя хоста.


когда я изменил название своего ноутбука, я также испытал эту проблему. Однако мне удалось исправить это с помощью следующих команд

su

(введите пароль)

cd /etc

gedit hosts

оттуда я просто удалил ссылку на старое имя компьютера и заменил его новым.

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

однако обратите внимание, что всякий раз, когда вы вносите изменения в имя компьютера, вы должны убедиться, что изменения вносятся как в /etc/hostname файл, а также . Если вы сделаете 1 изменение, не делая другого, вы получите ошибку.


jnweiger прокомментировал 13 августа 2014:

файл Xauthority можно записать таким образом, чтобы имя хоста не иметь значение.

Я не уверен, если xauth имеет правильную командную строку для указания Семейство аутентификации, но я использую sed для переключения на аутентификацию Семья 'FamilyWild'. Надо менять первые 16 бит nlist выход. Значение FamilyWild is 65535 или 0xffff.

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

в этом случае строка, написанная после номера семейства (обычно, имя хоста и т. д.) не имеет значения для сопоставления вообще.

в ALT можно пакет, там был применен патч недавно для поддержки добавления таких FamilyWild записи с помощью xauth С