Как запустить программное обеспечение с графическим интерфейсом на удаленном ПК с Linux через SSH

Иногда мне нужно запустить медиаплеер XMBC или другое программное обеспечение с графическим интерфейсом на одном из моих ПК (маленький ПК Xubuntu, используемый в качестве медиацентра).

Обычно я делаю это, запуская сервер X11vnc на удаленном ПК через SSH и затем подключаясь с клиентом Xvnc к рабочему столу Xfce.

Есть ли способ запустить программное обеспечение с графическим интерфейсом на удаленном ПК с Linux через SSH?

Спасибо!

5 ответов

Решение

Да. Вам просто нужно бежать export DISPLAY=:0 (или что-то еще, что удаленный дисплей нумерует) в сеансе ssh, и запущенные программы будут работать на удаленном дисплее. Быстрый пример:

oli@bert:~$ ssh tim
oli@tim:~$ export DISPLAY=:0
oli@tim:~$ firefox

Firefox теперь работает на timдисплей.

Однако, когда вы закрываете свой ssh-сеанс, в большинстве случаев удаленное приложение закрывается. Если вы хотите отключиться от ssh, но оставить приложение работающим, вам нужно запустить его особым образом, используя что-то вроде screen (поддерживает сессию ssh в фоновом режиме) или nohupили другой метод. Для получения дополнительной информации по этому вопросу недавно был еще один вопрос.

Вы можете сократить все это до одной команды, которая будет подключаться, экспортировать встроенный дисплей и запускать приложение так, чтобы оно не закрывалось после завершения сеанса ssh:

ssh tim "DISPLAY=:0 nohup firefox"

Зависит от того, где вы хотите видеть отображаемое приложение

Чтобы отобразить приложение на локальном ПК

Сначала вы отправляете ssh на удаленный компьютер с дополнительным -Y вариант и запустить приложение (например, firefox):

ssh -Y ...
firefox

Если -Yне работает проверьте конфигурацию sshd на удаленном ПК (см. ответ Дениса Лукиных). Другой аналогичный вариант - -X. Google, чтобы узнать о различиях.

Чтобы отобразить приложение в существующем сеансе на удаленном ПК

Вам необходимо войти в систему с пользователем A на удаленном ПК и оставить сеанс открытым. После этого вы можете использовать ssh с тем же пользователем A и запустить приложение (например, firefox) следующим образом:

ssh A@...
DISPLAY=:0 nohup firefox

Показывать приложение негде

Вам необходимо установить и запустить xvfb. xvfb создаст невидимый сеанс X в DISPLAY 10. Затем вы запускаете свое приложение, направляя его вывод на этот DISPLAY:

sudo apt install xvfb
sudo Xvfb :10 -ac -screen 0 1024x768x24 &
DISPLAY=:10 firefox

Современное решение, которое должно работать и с сеансами Wayland, настраивает все переменные среды, используемые в современных сеансах (XDG_RUNTIME_DIR, GTK_MODULES, XDG_DATA_DIRS, XAUTHORITY, SESSION_MANAGER и т. д.), перенаправляет вывод консоли приложения в журнал и запускает его в background без кражи вашей оболочки ssh или выхода при закрытии сеанса ssh:

      ssh tim 
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus
systemd-run --user firefox

Сделайте эти настройки на удаленном хосте:

ssh remotehost 'grep -i x11 /etc/ssh/sshd_config'
   X11Forwarding yes
   X11DisplayOffset 10 

После этого вы можете запустить приложение с графическим интерфейсом:

ssh -Y -t remotehost 'sudo gparted'

или

ssh -Y remotehost
sudo gparted

Допустим, вы хотите запустить gnome-disks.

Вам нужно 2 сеанса ssh. Один используется для запуска программного обеспечения (в данном случае gnome-disks). Во втором вы делаете то, что хотите.

В первом сеансе выполните следующие команды:

    export DISPLAY=:0
    gnome-disks
Другие вопросы по тегам