Перво-наперво: 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:
echo $DISPLAY
И вы можете проверить, что sudo
думает ваш DISPLAY, набрав:
sudo -s
echo $DISPLAY
exit
Если это ничего не показывает, тогда это проблема. (См. Исправление ниже).
XAUTHORITY
Но что, если проблема не в этом, и DISPLAY
он установлен правильно sudo
? Тогда вы можете спросить, есть ли у X какие-то разрешения, которые мешают другим пользователям писать на моем дисплее? Если бы вы думали об этом, вы были бы правы, у X есть два основных метода авторизации: xauth
и xhost
. Наиболее часто используемым сегодня является xauth
(1), который использует XAUTHORITY
переменную окружения. Опять же, давайте проверим, правильно ли он установлен в sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Если XAUTHORITY
указывает на файл в вашем домашнем каталоге для вас, но он пуст при запуске sudo
, то это проблема.
ИСПРАВЛЕНИЕ: Сохранить переменные среды
Так в чем же дело? Если переменные среды DISPLAY
или XAUTHORITY
не сохраняются во всей папке sudo
, вы можете указать sudo
(8) сохранить среду с помощью -E
параметра, например, так:
sudo -E evince
Лучший способ: env_keep
Вы могли бы хорошо спросить, подождите, если -E
все работает волшебным образом, то почему это не по умолчанию sudo
? Ответ в том, что это потенциальная угроза безопасности. Переменные среды влияют на работу программ, и вы не хотите, чтобы все они экспортировались из учетной записи пользователя в корневой каталог. «Правильный» способ сделать это - добавить строку Defaults env_keep += "DISPLAY XAUTHORITY"
в файл sudoers
(5), используя visudo
(8) . Вы можете проверить, какие переменные среды sudo сохраняет, запустив:
sudo sudo -V
(Да, вы печатаете sudo
дважды). Я рекомендую помещать строку не в файл sudoers по умолчанию ( /etc/sudoers
), а в локальный файл, который не будет перезаписан при обновлении системы. Вы можете сделать это так:
sudo visudo -f /etc/sudoers.d/local
Но подождите, что если ничего из вышеперечисленного не сработает?
Я думаю, что это довольно подробный ответ, но если у вас все еще есть проблемы, я бы предложил еще одну вещь. Вы можете использовать xhost
(1) для предоставления доступа конкретному пользователю на локальном хосте (вашей машине), например,
xhost si:localuser:root
В данном случае мы указываем root
имя пользователя, так как это учетная запись, под которой sudo
запускаются программы.
[*] : В : У меня только один экран, так почему для дисплея X нужен "адрес"? A: Это потому, что X может работать не только на вашем компьютере, но и через Интернет. С помощью X легко запускать программы на вашем компьютере, которые отображаются на других хостах Интернета, и программы на других хостах, которые отображаются на вашем экране (при условии, что вы даете им разрешение).