Как запустить программное обеспечение с графическим интерфейсом на удаленном ПК с 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