«Ошибка: XDG_RUNTIME_DIR не установлен в среде». при попытке запустить наутилус как root

14

Я пытаюсь запустить nautilus от имени пользователя root, но когда я запускаю «sudo nautilus» из терминала, я получаю следующую ошибку:

ошибка: XDG_RUNTIME_DIR не установлен в среде.

(nautilus: 9341): Gtk-WARNING **: невозможно открыть дисплей:

Проблема не возникает, когда я пытаюсь запустить nautilus без полномочий root. Я использую Ubuntu 14.04. Кто-нибудь знает, как я могу это исправить?

quantumbutterfly
источник
Просто для записи, я оказался здесь после того, как у меня появилась та же ошибка при попытке сделать X11Forwarding через ssh. Решение: я забыл использовать эту -Xопцию при запуске сеанса SSH.
JW.

Ответы:

13

Когда вы запускаете программное обеспечение от имени другого пользователя, вы фактически запускаете новую минимальную и изолированную среду, которая не содержит некоторых «чрезмерных» переменных (среди прочих переменных, отвечающих за внедрение библиотек или установку определенных привилегий). Замените ваш sudo nautilusвызов следующим - он будет выполнять пользовательские настройки сервера x из текущего сеанса:

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus

Это одноразовое решение низкого уровня, но оно будет работать на неправильно настроенной машине. Если вы хотите навсегда «починить» свою sudoпроблему, вам нужно найти проблему с конфигурацией вашей среды и исправить ее, как описано в других ответах.

CpRn
источник
1
@Cyprian Guerra - Это не влияет на окружающую среду, это позволяет вам работать только один раз. Это вряд ли полезно. Запуск sudo nautilusдолжен работать как обычно с терминала при запуске. Обычно, когда я делаю это из терминала при новой установке, он открывается как обычно с помощью sudo.
@ user94959 Вы не понимаете основной принцип - новая среда устанавливается, переменные переносятся, задача запускается, когда задача выходит, эта отдельная среда разрушается. Поэтому да, вам нужно установить переменные для каждой новой среды. Если вы хотите больше материала для чтения, попробуйте pkexecи sudoсправочные страницы, а также Google для соответствующего спора.
cprn
@CyprianGuerra, тогда почему, когда я пытаюсь открыть приложение из меню рабочего стола, которое требует повышенных привилегий, может работать после ввода пароля? очевидно, что-то не хватает в конфигурации, если он не запустится правильно, потому что он не установлен в среде XDG, как обычно? проблема в том, что его высказывание Cannot open displayозначает, что чего-то не хватает в его файле конфигурации, потому что что-то изменило его и удалило из среды, когда это не должно происходить. Так как же тогда его можно вернуть обратно в окружающую среду, чтобы мне не приходилось с этим сталкиваться?
1
@sherrellbc Я прямо говорю, чтобы набор политик запускался envперед запуском, nautilusа первый позаботился о настройке переменных для меня. Вы можете проверить man env.
cprn
1
@cprn D'oh. Я должен был проверить страницу руководства в первую очередь. env COMMAND ARG ...
sherrellbc
1

У меня тоже была такая же проблема на Ubuntu 14.04. Откройте терминал, нажав,

Ctrl+ Alt+T

тогда sudo visudo

изменить линию

По умолчанию env_keep = "https_proxy"

в

По умолчанию env_keep + = "https_proxy"

Это работает как шарм.

Ом Пракаш
источник
Это работает, но установка одинакова для $XAUTHORITYне поддающейся цели.
cprn
1

Чтобы было проще - подробнее объясняется новая загрузка моей системы.

После всех объяснений здесь я пришел к результату - и «env» в терминале уже сказал, что подходит для этой сессии:

Эти две строки используют переменную среды:

для поведения tmp я выбрал:

mkdir -pv ~ / .cache / xdgr

Для установки переменной среды:

export XDG_RUNTIME_DIR = $ PATH: ~ / .cache / xdgr

После закрытия терминала и нового открытия для отзыва env они говорят:

XDG_RUNTIME_DIR = / работа / пользователь / 1001

примечание: это нормально для пользователя под Ubuntu, пользователю root нужно больше (последняя информация по сроку - с разрешениями 0700)

Андрей
источник
0

Если вы получаете эту ошибку в Docker; это то чем я занимаюсь

# sudo xhost +
access control disabled, clients can connect from any host
# export DISPLAY=:0.0
# docker run -it --env DISPLAY=unix$DISPLAY --privileged  --volume /tmp/.X11-unix:/tmp/.X11-unix .. rest of your Docker arugments
Алекс Пуннен
источник