"Помилка: XDG_RUNTIME_DIR не встановлено у середовищі." при спробі запустити nautilus як root


15

Я намагаюся запустити nautilus як root, але коли я запускаю "sudo nautilus" з терміналу, я отримую таку помилку:

помилка: XDG_RUNTIME_DIR не встановлено у середовищі.

(nautilus: 9341): Gtk-ПОПЕРЕДЖЕННЯ **: не вдається відкрити дисплей:

Проблема не виникає, коли я намагаюся запустити nautilus як не-root. Я використовую ubuntu 14.04. Хтось знає, як я можу це виправити?


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

Відповіді:


14

Якщо ви запускаєте програмне забезпечення як інший користувач, ви фактично запускаєте нове мінімальне та ізольоване середовище, яке не містить деяких "зайвих" змінних (серед інших змінних, відповідальних за введення бібліотек або встановлення певних привілеїв). Замініть свій sudo nautilusдзвінок на наступне - він здійснюватиме налаштування x сервера для користувача з поточного сеансу:

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY nautilus

Це разове рішення низького рівня, але воно працюватиме на неправильно налаштованій машині. Якщо ви хочете остаточно "виправити sudo", вам потрібно знайти проблему з конфігурацією оточення та виправити її, як описано в інших відповідях.


1
@Cyprian Guerra - це не налаштовується в навколишнє середовище, а лише запускати один раз. Це навряд чи допоможе. Біг sudo nautilusповинен працювати нормально з терміналу при запуску. Зазвичай, коли я це роблю з терміналу на свіжому встановленні, він відкривається, як звичайно, з sudo.

@ user94959 Ви не розумієте основного принципу - встановлюється нове середовище, передаються змінні, виконується завдання, коли завдання виходить з цього окремого середовища знищується. Тому так, вам потрібно встановити змінні для кожного нового середовища. Якщо ви хочете більш матеріалів для читання TRY 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

Для встановлення змінної середовища:

експортувати XDG_RUNTIME_DIR = $ PATH: ~ / .cache / xdgr

Після закриття терміналу та нового відкритого для відкликання env вони розповідають:

XDG_RUNTIME_DIR = / run / user / 1001

зауважте: користувачеві під ubuntu це нормально, кореня потрібно більше (остання інформація за терміном - з дозволом 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.