Запуск Startx от имени не-root пользователя через SSH

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

У меня есть удаленная виртуальная машина с Ubuntu 1804, и я хочу запустить VNC. Я использую x11vnc, который требует запущенного X сервера. В настоящее время я подключен через SSH.

На виртуальной машине установлена карта Nvidia, и после генерации xorg.conf с помощью nvidia-xconfig я могу запустить X сессию с помощью startx, но только от имени root. Любое последующее подключение через VNC происходит от имени root, чего я хочу избежать.

Раздел Device в файле xorg.conf выглядит следующим образом:

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "Tesla K80"
    BusID          "0:30:0"
EndSection

При попытке запустить startx под пользователем, не обладающим правами root, возникает следующая ошибка:

/usr/lib/xorg/Xorg.wrap: Only console users are allowed to run the X server

Если я изменяю /etc/X11/Xwrapper.config, чтобы разрешить любому пользователю запускать startx, то появляется следующая ошибка:

Couldn't get a file descriptor referring to the console

Я читал, что подключение через SSH не означает подключение к текстовой консоли, которая необходима для запуска startx. Попытка сменить текстовую консоль с помощью chvt не дает результата.

Существует ли способ запустить X через SSH?

Здесь приведено решение на основе systemd-run, которое обманывает startx, заставляя его считать, что он был запущен из виртуального терминала.

Вы можете добавить дисплейный менеджер (например, lightdm) и настроить автоматический вход пользователя. Даже запустить x11vnc при старте сессии пользователя.

В качестве альтернативы можно запустить vncserver от имени пользователя и затем подключиться к нему напрямую через переадресацию ssh:

ssh -L5904:localhost:5905 [email protected]
vncserver :5 # только если сервер ещё не запущен

Затем на клиенте вы можете запустить:

xvncviewer localhost:4

.

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

Чтобы запустить X-сервер как обычный пользователь через SSH на удаленной виртуальной машине под управлением Ubuntu 18.04 с установленной видеокартой Nvidia, необходимо учесть несколько аспектов.

Теория

Запуск X-сервера в Unix-подобных системах требует доступа к терминалу консоли, поскольку по умолчанию считается, что Xorg должен быть запущен из текстового виртуального терминала (TTY). Когда вы подключаетесь по SSH, вы, по сути, работаете в псевдотерминале, который не имеет доступа к основному экрану консоли. Это делает невозможным запуск X-сессий с использованием стандартного вызова startx из-под обычного пользователя через SSH, так как Xorg.wrap настроен таким образом, что позволяет запуск X только из консоли.

Решение проблемы может быть несколькими способами: конфигурирование с помощью systemd-run, использование диспетчера входа, или же использование сервера VNC вместо x11vnc, оставаясь в пространстве прав непривилегированного пользователя.

Пример

Ваше текущее решение использует nvidia-xconfig, чтобы автоматически сгенерировать xorg.conf, который выглядит следующим образом:

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "Tesla K80"
    BusID          "0:30:0"
EndSection

Ошибка, которую вы получаете при попытке запустить startx как непривилегированный пользователь, выглядит так:

/usr/lib/xorg/Xorg.wrap: Only console users are allowed to run the X server

Это происходит из-за ограничений, установленных в /etc/X11/Xwrapper.config.

Применение

Метод 1: Использование systemd-run

Вы можете использовать systemd-run, чтобы обмануть startx, заставляя его думать, что вы запустили его из виртуального терминала. Команда может выглядеть примерно так:

systemd-run --user --tty startx

systemd-run создаёт временную систему, где startx может выполняться, как если бы он был запущен из TTY.

Метод 2: Установка диспетчера входа

Установка диспетчера входа, такого как lightdm, позволяет автоматически входить в систему и запускать X-сервер без необходимости использовать startx напрямую в SSH-сессии:

  1. Установите lightdm с помощью:

    sudo apt-get install lightdm
  2. Настройте автоматический вход, отредактировав файл /etc/lightdm/lightdm.conf:

    [SeatDefaults]
    autologin-user=[ваше_имя_пользователя]
    autologin-user-timeout=0
  3. Настройте x11vnc для автозапуска при старте X-сессий вашего пользователя, добавив его в конфигурацию автозапуска вашего оконного менеджера.

Метод 3: Использование VNC-сервера

Вы можете использовать VNC-сервер, такой как tigervnc, который может предоставлять доступ к графическим сессиям без прямого использования X через startx:

  1. Установите tigervnc:

    sudo apt-get install tigervnc-standalone-server
  2. Настройте VNC-сервер для запуска X-середы, выполнив:

    vncserver :1
  3. Подключитесь к VNC-сессии через SSH-туннель, чтобы обеспечить безопасное соединение:

    На клиентской машине выполните:

    ssh -L 5901:localhost:5901 user@remote-server

    В другом терминале клиента войдите в через VNC-клиент:

    vncviewer localhost:1

Таким образом, выбор наиболее подходящего метода зависит от ваших требований и доступа к системе. Использование systemd-run – это элегантное решение, которое позволяет избежать сложной конфигурации, тогда как использование VNC-сервера предлагает более гибкий подход для управления удаленной графической средой. Рассмотрение диспетчера входа инфраструктуры может быть удобным выбором для автоматизации процессов входа и настройки рабочей станции на удаленном оборудовании.

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

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