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

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

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

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

Спасибо!

Да. Тебе просто нужно бежать export DISPLAY=:0 (или как там пронумерован удаленный дисплей) в вашем сеансе ssh, и запускаемые программы будут выполняться на удаленном дисплее. Краткий пример:

oli@bert:~$ ssh timoli@tim:~$ export DISPLAY=:0oli@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. Погуглите в поисках отличий.

Для отображения приложения в существующем сеансе на удаленном компьютере

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

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

Для отображения приложения нигде

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

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

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

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

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

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

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

ssh -Y -t remotehost 'sudo gparted'

или

ssh -Y remotehostsudo gparted

Допустим, вы хотите баллотироваться gnome-диски.

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

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

    export DISPLAY=:0    gnome-disks

Могу подтвердить, что подход, описанный в выбранном ответе, работает, если удаленный клиент тоже является Mac. Успешно работает с macOS Sierra.