ошибка: XDG_RUNTIME_DIR не установлен в окружении. Gtk-WARNING **: не удается открыть дисплей:

Вопрос или проблема

Раньше я открывал текстовые файлы с помощью sublime, и для файлов только для чтения я использовал команду:
sudo sublime. Но теперь неожиданно команда sudo sublime выдает следующую ошибку:

(sublime:3931): Gtk-WARNING **: cannot open display:

в то время как команда sublime работает нормально. Я попробовал то же самое с gedit, и произошло то же самое, с ошибкой для gedit:

error: XDG_RUNTIME_DIR not set in the environment.
(gedit:3933): Gtk-WARNING **: cannot open display: 

Я установил gtk и попробовал gksudo, но все равно получил ту же ошибку!

Я искал в интернете и нашел следующие способы:

  1. xhost +localhost : https://askubuntu.com/questions/614387/gksu-gtk-warning-cannot-open-display-0
  2. export DISPLAY=:0.0 :
  3. ssh username@hostname -X
  4. ssh username@hostname -Y
  5. Как я могу исправить ошибку “cannot open display”, когда открываю X программу после ssh с включенной переадресацией X11?

Ничто из вышеуказанного не сработало.

Что сработало для меня:

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY sublime

Отсюда: https://askubuntu.com/questions/456689/error-xdg-runtime-dir-not-set-in-the-environment-when-attempting-to-run-naut

Я хочу знать, почему именно я получаю эту ошибку, и почему именно сейчас! Кроме того, я хочу вернуться к версии sudo sublime, поскольку это легче запомнить. Как я могу это исправить?

Также недавние изменения, которые я сделал в системе:

  1. Установил тему Mac для Ubuntu: http://www.noobslab.com/2014/04/macbuntu-1404-pack-is-released.html

  2. Установил gksu (для gksudo)

Помощь будет очень оценена!

Недавно были какие-либо обновления системы…
Это похоже связано. Возможно это

Если у вас есть что-то, что работает, вы всегда можете просто поместить это в оболочку и сохранить этот скрипт в вашем пути.
В Debian вы можете создать директорию ‘bin’ в своей домашней папке, и она будет автоматически включена в ваш путь; я не уверен, что это работает в Ubuntu, но шансы хорошие.

Итак, в ~/bin создайте ‘sublime-root.sh’ и положите туда ваш pkexec код?

Ответ или решение

Ошибка XDG_RUNTIME_DIR not set in the environment и предупреждение Gtk-WARNING **: cannot open display: указывают на проблемы, связанные с запуском графических приложений с повышенными правами, особенно с использованием команды sudo. Давайте более подробно рассмотрим этот вопрос и предложим возможные решения.

Причины возникшей проблемы

  1. Изменения в окружении: Ошибка может возникать из-за изменений в системном окружении, которые выходят за рамки стандартных настроек. Системные обновления или изменения конфигурации могут влиять на поведение графических приложений.

  2. Переменная окружения XDG_RUNTIME_DIR: Эта переменная указывает на директорию, используемую для хранения временных файлов пользовательского сеанса. Если она не установлена, некоторые графические приложения могут не запускаться корректно.

  3. Правила безопасности X11: Когда вы запускаете приложение от имени root, оно может не иметь доступа к графическому интерфейсу вашего пользователя. Процесс может не "видеть" дисплей, что и приводит к ошибке cannot open display.

  4. Подходы к повышению привилегий: Использование команды sudo для запуска графических приложений не рекомендуется, так как это может привести к неправильной работе окружения. Вместо этого рекомендуется использовать pkexec или другие инструменты управления правами.

Решения проблемы

Вы уже нашли рабочее решение с использованием команды:

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY sublime

Эта команда позволяет сохранить нужные переменные окружения, что дает возможность приложению запускаться корректно.

Если вы хотите вернуться к использованию более привычной команды sudo, вот несколько рекомендаций:

  1. Использование gksudo или gksu: Эти инструменты созданы для запуска графических интерфейсов с увеличенными правами. Однако, как вы заметили, они могут также вызвать проблемы с переменными окружения. Если они установлены, можно попытаться запустить их через терминал.

  2. Создание скрипта для запуска: Вы можете создать простой скрипт в вашем домашнем каталоге, например sublime-root.sh, который будет содержать вашу рабочую команду:

    #!/bin/bash
    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY sublime

    После создания скрипта, не забудьте сделать его исполняемым:

    chmod +x ~/sublime-root.sh

    Теперь вы сможете запускать его через команду ~/sublime-root.sh.

  3. Передача окружения через sudo: Если вы все же хотите использовать sudo, можно попробовать следующую команду:

    sudo DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY sublime

    Но это может не сработать так же хорошо, как pkexec.

Заключение

Ситуация, с которой вы столкнулись, является довольно распространенной среди пользователей Linux и связана с особенностями взаимодействия графических интерфейсов и прав пользователя. Использование pkexec с передачей нужных переменных окружения представляет наилучшее решение для успешного запуска графических приложений с повышенными привилегиями. Если вы решите оставаться с sudo, имейте в виду, что это может потребовать дополнительных шагов по настройке окружения.

Если у вас есть дополнительные вопросы, не стесняйтесь обратиться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...