Вопрос или проблема
В рабочей среде мы используем VNC для удалённого подключения к RHEL-8.10, установленному на сервере, конкретно NICE-DCV.
Для любой VNC-сессии, в которой всё работает без проблем, команда echo $DISPLAY
возвращает пустое значение. Но всё графически работает на уровне выполнения 5 (graphical.target).
Мы используем различные коммерческие программы с графическим интерфейсом, которые предоставляют пользователям возможность работать с ними.
Иногда, будучи администратором, у меня возникает желание создать VNC-сессию от имени root и запустить [графическую] программу от имени другого пользователя… поэтому в командной строке я делаю su - ron
, а затем, к примеру, запускаю hyperworks/hypermesh. Обычно это не составляет проблемы в графической VNC-сессии, если предварительно не выполняется su
, и в этом случае появляется сообщение WARNING: environment variable DISPLAY is not set
, и графическое окно программы никогда не отображается.
Есть ли решение для этого, что мне нужно установить для переменной окружения DISPLAY
(если она изначально не установлена)?
Я помню, много лет назад использовал setenv DISPLAY 0:0
, однако это (или эквивалент в bash) не сработало.
Ответ или решение
Для решения проблемы с переменной окружения DISPLAY
при использовании VNC на RHEL 8, необходимо выполнить несколько шагов, чтобы предоставить правильные значения этой переменной после того, как вы вошли в систему как другой пользователь с помощью команды su
.
Решение проблемы с DISPLAY
Когда вы создаете сессию VNC, она запускает собственную графическую среду. Когда вы переключаетесь на другого пользователя с помощью su -
, новое окружение для этого пользователя не получает значение переменной DISPLAY
, необходимое для отображения графических окон.
Шаги для установки DISPLAY
-
Определите значение
DISPLAY
из текущей сессии:
Ваша текущая VNC сессия, скорее всего, использует:1
,:2
или аналогичное значение для переменнойDISPLAY
. Чтобы выяснить, какое значение используется, выполните следующую команду в терминале вашей VNC сессии:echo $DISPLAY
Это должно вернуть что-то вроде
:1
или:2
. -
Установите переменную
DISPLAY
для нового пользователя:
После того, как вы узнали текущее значение переменнойDISPLAY
, вы можете установить его в новой сессии после выполненияsu
. Используйте следующую команду:su - ron -c 'DISPLAY=:1 hyperworks/hypermesh'
Замените
:1
на то значение, которое вы получили на первом шаге, иhyperworks/hypermesh
— на ту команду, которую вы хотите запустить. -
Переменная
DISPLAY
при использованииsu
:
Если вам нужно интерактивно переключиться на пользователяron
и выполнять последующие команды, возможно, вам стоит сделать следующее. Сначала переключитесь на пользователяron
, а затем установите переменную окружения:su - ron export DISPLAY=:1 # Установите значение на полученное у шага 1 hyperworks/hypermesh
-
Автоматизация процесса:
Если вы часто запускаете определенные программы и хотите, чтобы переменнаяDISPLAY
автоматически устанавливалась, вы можете добавить строкуexport DISPLAY=:1
в файл~/.bashrc
пользователяron
. Однако не забудьте обновить:1
на актуальное значение.
Заключение
Теперь, выполнив вышеуказанные шаги, вы должны быть в состоянии запускать графические приложения из VNC сессии, даже после переключения пользователя с помощью команды su
. Если у вас есть дальнейшие вопросы или трудности, пожалуйста, дайте знать, и я с радостью помогу!