Что такое XDG_RUNTIME_DIR?

В то время как я пытался открыть Evince from Command line, он дает мне ошибку

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:

Как диагностировать эту проблему?

12
задан 17 January 2017 в 08:37

2 ответа

XDG_RUNTIME_DIR набор переменной среды в Вашем контексте X-окон, так, чтобы программы могли найти вещи. Вы (neo) настроили графический контекст.

Путем попытки работать evince как root, Вы ввели условие, где пользователь (root) пытается получить доступ к другому пользователю (neo) дисплей. Это рассматривается как Плохая Вещь.

, Если Вы решаете, НЕОБХОДИМО выполнить графического редактора как root, читать man gksudo и использовать gksudo.

3
ответ дан 23 November 2019 в 03:32

Первые вещи сначала: XDG_RUNTIME_DIR

Отвечать на Ваш первый вопрос, "Что такое XDG_RUNTIME_DIR?", это - переменная среды, которая установлена автоматически, когда Вы входите в систему. Это говорит любой программе, что Вы работаете, где найти определенный для пользователя каталог, в котором это может хранить маленькие временные файлы. Отметьте это XDG_RUNTIME_DIR установлен pam_systemd(8), таким образом, это на самом деле не связано с X (запущение программ графически), который является проблемой, которую Вы, кажется, имеете.

Как диагностировать

Ваш второй вопрос, "Как диагностировать эту проблему?" очень хороший. Это означает, что Вы интересуетесь не только, что фиксация, но также и как понять это самостоятельно. Для запуска посмотрите на первые сообщения об ошибках сначала. В частности, поиск No protocol specified или WARNING **: Could not open X display, должен показать Вам, что проблема с X (также названный X Системами управления окнами), который является, как графические программы показывают на Вашем экране. Знание, которое должно поднять много вопросов поиска и устранения неисправностей в Вашем уме.

X ДИСПЛЕЕВ

Ваш следующий вопрос мог бы быть, каковы эти "X дисплеев", которые проявляют, не может открыться? "Дисплей" является адресом для Вашего экрана. [*] Любая программа, которая хочет записать в Ваш экран, должна знать адрес. Вы видите то, что Ваши X дисплеев путем проверки переменной среды ДИСПЛЕЯ:

echo $DISPLAY

И можно проверить что sudo думает, что Ваш ДИСПЛЕЙ путем ввода:

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, затем это - проблема.

FIX: сохраните переменные среды

Так, какова фиксация? Если любой 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 запускает программы как.


[*]: Q: я только получил один экран, итак, почему X отображается, нуждаются в "адресе"? A: это - потому что X может работать не только над Вашей машиной, но и по Интернету. С X, легко запустить программы на Вашей машине, которые обнаруживаются на других узлах Интернета и программах на других хостах, которые появляются на Вашем экране (предполагающий, что Вы даете им разрешение).

21
ответ дан 23 November 2019 в 03:32

Другие вопросы по тегам:

Похожие вопросы: