Пока я пытался открыть Evince из командной строки, он выдает ошибку
neo@Muhammad:~$ sudo evince
No protocol specified
** (evince:4164): WARNING **: Could not open X display
No protocol specified
error: XDG_RUNTIME_DIR not set in the environment.
Cannot parse arguments: Cannot open display:
Как решить эту проблему?
command-line
sudo
evince
Мухаммед Ильяс
источник
источник
Ответы:
Перво-наперво: XDG_RUNTIME_DIR
Чтобы ответить на ваш первый вопрос: «Что такое XDG_RUNTIME_DIR?» Это переменная среды, которая устанавливается автоматически при входе в систему. Она сообщает любой запущенной программе, где найти пользовательский каталог, в котором можно хранить небольшие временные файлы. Обратите внимание, что
XDG_RUNTIME_DIR
это установлено вpam_systemd
(8) , так что оно на самом деле не связано с X (графический запуск программ), что является проблемой, которую вы, похоже, испытываете.Как устранить неполадки
Ваш второй вопрос: «Как решить эту проблему?» это очень хороший. Это означает, что вы заинтересованы не только в том, что это за исправление, но и в том, как его решить самостоятельно. Для начала сначала посмотрите на первые сообщения об ошибках. В частности, поиск
No protocol specified
илиWARNING **: Could not open X display
должен показать вам, что проблема связана с X (также называемой X Windowing System ), которая заключается в том, как графические программы отображаются на вашем экране. Знание этого должно вызвать у вас множество вопросов по устранению неполадок.X DISPLAY
Ваш следующий вопрос может быть таким, что это за «дисплей Х», который не может открыться? «Дисплей» - это адрес вашего экрана. [*] Любая программа, которая хочет записать на ваш экран, должна знать адрес. Вы можете увидеть, что представляет собой ваш дисплей X, проверив переменную окружения DISPLAY:
И вы можете проверить, что
sudo
думает ваш DISPLAY, набрав:Если это ничего не показывает, тогда это проблема. (См. Исправление ниже).
XAUTHORITY
Но что, если проблема не в этом, и
DISPLAY
он установлен правильноsudo
? Тогда вы можете спросить, есть ли у X какие-то разрешения, которые мешают другим пользователям писать на моем дисплее? Если бы вы думали об этом, вы были бы правы, у X есть два основных метода авторизации:xauth
иxhost
. Наиболее часто используемым сегодня являетсяxauth
(1), который используетXAUTHORITY
переменную окружения. Опять же, давайте проверим, правильно ли он установлен вsudo
:Если
XAUTHORITY
указывает на файл в вашем домашнем каталоге для вас, но он пуст при запускеsudo
, то это проблема.ИСПРАВЛЕНИЕ: Сохранить переменные среды
Так в чем же дело? Если переменные среды
DISPLAY
илиXAUTHORITY
не сохраняются во всей папкеsudo
, вы можете указатьsudo
(8) сохранить среду с помощью-E
параметра, например, так:Лучший способ: env_keep
Вы могли бы хорошо спросить, подождите, если
-E
все работает волшебным образом, то почему это не по умолчаниюsudo
? Ответ в том, что это потенциальная угроза безопасности. Переменные среды влияют на работу программ, и вы не хотите, чтобы все они экспортировались из учетной записи пользователя в корневой каталог. «Правильный» способ сделать это - добавить строкуDefaults env_keep += "DISPLAY XAUTHORITY"
в файлsudoers
(5), используяvisudo
(8) . Вы можете проверить, какие переменные среды sudo сохраняет, запустив:(Да, вы печатаете
sudo
дважды). Я рекомендую помещать строку не в файл sudoers по умолчанию (/etc/sudoers
), а в локальный файл, который не будет перезаписан при обновлении системы. Вы можете сделать это так:Но подождите, что если ничего из вышеперечисленного не сработает?
Я думаю, что это довольно подробный ответ, но если у вас все еще есть проблемы, я бы предложил еще одну вещь. Вы можете использовать
xhost
(1) для предоставления доступа конкретному пользователю на локальном хосте (вашей машине), например,В данном случае мы указываем
root
имя пользователя, так как это учетная запись, под которойsudo
запускаются программы.[*] : В : У меня только один экран, так почему для дисплея X нужен "адрес"? A: Это потому, что X может работать не только на вашем компьютере, но и через Интернет. С помощью X легко запускать программы на вашем компьютере, которые отображаются на других хостах Интернета, и программы на других хостах, которые отображаются на вашем экране (при условии, что вы даете им разрешение).
источник
xhost +
чтобы разрешить универсальный доступ.)XDG_RUNTIME_DIR
переменная окружения, установленная в контексте X Windows, чтобы программы могли что-то находить Вы (neo
) настроили графический контекст.Пытаясь запустить
evince
какroot
, вы ввели условие, когда пользователь (root
) пытается получить доступ кneo
экрану другого пользователя ( ). Это считается плохой вещью.Если вы решили, что ДОЛЖНЫ запустить графический редактор как
root
, прочитайтеman gksudo
и используйтеgksudo
.источник
journalctl -b -p err | wl-copy
он сообщает,Failed to connect to a Wayland server
что имеет смысл, но звучит глупо от пользователя POV.