Вопрос или проблема
Раньше я открывал текстовые файлы с помощью 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
, но все равно получил ту же ошибку!
Я искал в интернете и нашел следующие способы:
xhost +localhost
: https://askubuntu.com/questions/614387/gksu-gtk-warning-cannot-open-display-0export DISPLAY=:0.0
:ssh username@hostname -X
ssh username@hostname -Y
- Как я могу исправить ошибку “cannot open display”, когда открываю X программу после ssh с включенной переадресацией X11?
Ничто из вышеуказанного не сработало.
Что сработало для меня:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY sublime
Я хочу знать, почему именно я получаю эту ошибку, и почему именно сейчас! Кроме того, я хочу вернуться к версии sudo sublime
, поскольку это легче запомнить. Как я могу это исправить?
Также недавние изменения, которые я сделал в системе:
-
Установил тему Mac для Ubuntu: http://www.noobslab.com/2014/04/macbuntu-1404-pack-is-released.html
-
Установил gksu (для gksudo)
Помощь будет очень оценена!
Недавно были какие-либо обновления системы…
Это похоже связано. Возможно это
Если у вас есть что-то, что работает, вы всегда можете просто поместить это в оболочку и сохранить этот скрипт в вашем пути.
В Debian вы можете создать директорию ‘bin’ в своей домашней папке, и она будет автоматически включена в ваш путь; я не уверен, что это работает в Ubuntu, но шансы хорошие.
Итак, в ~/bin создайте ‘sublime-root.sh’ и положите туда ваш pkexec код?
Ответ или решение
Ошибка XDG_RUNTIME_DIR not set in the environment
и предупреждение Gtk-WARNING **: cannot open display:
указывают на проблемы, связанные с запуском графических приложений с повышенными правами, особенно с использованием команды sudo
. Давайте более подробно рассмотрим этот вопрос и предложим возможные решения.
Причины возникшей проблемы
-
Изменения в окружении: Ошибка может возникать из-за изменений в системном окружении, которые выходят за рамки стандартных настроек. Системные обновления или изменения конфигурации могут влиять на поведение графических приложений.
-
Переменная окружения XDG_RUNTIME_DIR: Эта переменная указывает на директорию, используемую для хранения временных файлов пользовательского сеанса. Если она не установлена, некоторые графические приложения могут не запускаться корректно.
-
Правила безопасности X11: Когда вы запускаете приложение от имени
root
, оно может не иметь доступа к графическому интерфейсу вашего пользователя. Процесс может не "видеть" дисплей, что и приводит к ошибкеcannot open display
. -
Подходы к повышению привилегий: Использование команды
sudo
для запуска графических приложений не рекомендуется, так как это может привести к неправильной работе окружения. Вместо этого рекомендуется использоватьpkexec
или другие инструменты управления правами.
Решения проблемы
Вы уже нашли рабочее решение с использованием команды:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY sublime
Эта команда позволяет сохранить нужные переменные окружения, что дает возможность приложению запускаться корректно.
Если вы хотите вернуться к использованию более привычной команды sudo
, вот несколько рекомендаций:
-
Использование
gksudo
илиgksu
: Эти инструменты созданы для запуска графических интерфейсов с увеличенными правами. Однако, как вы заметили, они могут также вызвать проблемы с переменными окружения. Если они установлены, можно попытаться запустить их через терминал. -
Создание скрипта для запуска: Вы можете создать простой скрипт в вашем домашнем каталоге, например
sublime-root.sh
, который будет содержать вашу рабочую команду:#!/bin/bash pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY sublime
После создания скрипта, не забудьте сделать его исполняемым:
chmod +x ~/sublime-root.sh
Теперь вы сможете запускать его через команду
~/sublime-root.sh
. -
Передача окружения через
sudo
: Если вы все же хотите использоватьsudo
, можно попробовать следующую команду:sudo DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY sublime
Но это может не сработать так же хорошо, как
pkexec
.
Заключение
Ситуация, с которой вы столкнулись, является довольно распространенной среди пользователей Linux и связана с особенностями взаимодействия графических интерфейсов и прав пользователя. Использование pkexec
с передачей нужных переменных окружения представляет наилучшее решение для успешного запуска графических приложений с повышенными привилегиями. Если вы решите оставаться с sudo
, имейте в виду, что это может потребовать дополнительных шагов по настройке окружения.
Если у вас есть дополнительные вопросы, не стесняйтесь обратиться за помощью.