Настройка переменной окружения DISPLAY в RHEL 8 для переключения пользователей VNC

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

В рабочей среде мы используем 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

  1. Определите значение DISPLAY из текущей сессии:
    Ваша текущая VNC сессия, скорее всего, использует :1, :2 или аналогичное значение для переменной DISPLAY. Чтобы выяснить, какое значение используется, выполните следующую команду в терминале вашей VNC сессии:

    echo $DISPLAY

    Это должно вернуть что-то вроде :1 или :2.

  2. Установите переменную DISPLAY для нового пользователя:
    После того, как вы узнали текущее значение переменной DISPLAY, вы можете установить его в новой сессии после выполнения su. Используйте следующую команду:

    su - ron -c 'DISPLAY=:1 hyperworks/hypermesh'

    Замените :1 на то значение, которое вы получили на первом шаге, и hyperworks/hypermesh — на ту команду, которую вы хотите запустить.

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

    su - ron
    export DISPLAY=:1  # Установите значение на полученное у шага 1
    hyperworks/hypermesh
  4. Автоматизация процесса:
    Если вы часто запускаете определенные программы и хотите, чтобы переменная DISPLAY автоматически устанавливалась, вы можете добавить строку export DISPLAY=:1 в файл ~/.bashrc пользователя ron. Однако не забудьте обновить :1 на актуальное значение.

Заключение

Теперь, выполнив вышеуказанные шаги, вы должны быть в состоянии запускать графические приложения из VNC сессии, даже после переключения пользователя с помощью команды su. Если у вас есть дальнейшие вопросы или трудности, пожалуйста, дайте знать, и я с радостью помогу!

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

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