Как по ssh запустить графическое приложение
Есть сервер, на котором нету X-сервера, только консоль. А нам нужно, к примеру, установить Oracle Solaris Studio и запускать ее удаленно. Или какое-то другое приложение, работающее в GUI-режиме.
Для решения этой задачи выполняем следующее.
1. На сервере устанавливаем пакеты xauth и xterm. Например, для Oracle Linux (или другого RHEL ):
yum install xauth xterm
2. Также, нужно проверить, включено ли X11 Forwarding в конфигурационном файле SSH-демона:
nano /etc/ssh/sshd_config
3. Eсли вы заходите с помощью Windows-машины, то вам необходимо установить Xming - X-эмулятор для форточек. Ну и, собсно, сам Putty - ssh-клиент для Windows.
Установка Xming тривиальна, по типу далее, далее, далее. Только поставить галочку, что мы будем использовать его вместе с Putty. Сам Putty так же устанавливаем.
4. Запускаем Xming, он свернется в трей и после этого запускаем Putty и на вкладке Connection / SSH / X11 отмечаем галочку Enable X11 forwarding, а также дописываем в поле X display location значение localhost:0.
4. Далее подключаемся к удаленному серверу и запускаем наше приложение. Например, Solaris Studio:
/opt/oracle/solarisstudio12.3/bin/solstudio
Когда всё подгрузится, вы увидите заветное окошко:
Для тех, кто работает в Linux-среде всё еще проще. Запускать приложения на удаленной машине можно, добавляя к подключению по ssh ключ -X.
Если нужно запустить графическое приложение на удаленной машине, не доступной с вашей рабочей, но доступной через третью машину, то на этой третьей машине необходимо сделать форвардинг 22го порта для ssh и 6010 порта (для дисплея localhost:0) TCP .
подключился по ssh как root(нужно именно как root) к удаленной машине. на удаленной машине есть xserver, он запущен и работает как надо.
вопрос в том, как в данной ситуации запустить GUI прогу на удаленном компе чтоб она отображалась на удаленном компе?
сейчас получаю ошибку: XOpenDisplay: unable to open display
в X11 переменную DISPLAY= используют
в Wayland - как-то немного по-другому
в X11 переменную DISPLAY= используют
и? что это значит? ну, используют - ок. но как это отвечает на мой вопрос?
ssh host gedit - запустит gedit на host, окно выведет туда, откуда ты делал команду
ssh host DISPLAY=:0 gedit - запустит gedit на host, окно выведет на :0 host-a
а конфиг($HOME/.ssh/config) нужно фиксить на локальной, или удаленной?
это конфиг клиента, который убирает твою ошибку XOpenDisplay: unable to open display
по задаче он тебе ненужен, показан для разнообразия ответа.
ясно, но что-то не так.
ssh [email protected] echo $DISPLAY
пусто. она не установлена.
но в стартовом посте
на удаленной машине есть xserver, он запущен и работает как надо.
ну покажи команду запуска, или лучше сразу смотри в Xorg.log
в стартовом посте я говорил о том, что на удаленной машине установлено ПО xserver`а, потому что я могу запускать там тот же xterm, но логинюсь я на удаленную машину в этом случае не как root и не удаленно. (ну, т.е., у меня есть физический доступ к машине)
а вопрос мой в том, как запустить GUI прогу на удаленной машине, подключаясь по ssh как root.
niXman ★★★ ( 16.04.19 16:05:09 )Последнее исправление: niXman 16.04.19 16:06:58 (всего исправлений: 3)
UPD. а. тогда ищи.
Dispetcher14 ★★★★ ( 16.04.19 16:07:23 )Последнее исправление: Dispetcher14 16.04.19 16:08:10 (всего исправлений: 1)
Ну, что не так. Номер дисплея там например, запущены ли иксы вообще и всё такое.
я могу удаленно, на удаленной машине запустить GUI программу НЕ КАК root. значит все ок?
вопрос в том, почему я не могу этого сделать как root?
niXman ★★★ ( 16.04.19 16:13:38 )Последнее исправление: niXman 16.04.19 16:13:55 (всего исправлений: 1)
под каким пользователем запущены иксы, под тем и запускай команду. sudo или su в помощь
Не хочу добавлять предвзятости твоим наблюдениям, поэтому скажу, что не знаю. Проверь не удалённо, проверь не как рут, посмотри логи, ну.
используй ssh -X или ssh -Y
ssh устанавливает на удаленной машине DISPLAY=:0 и пробрасывает на локальный X сервер
т.е. не надо указывать эту переменную - просто запускай свою программу
Ему надо наоборот.
От рута делаешь su username и дальше обычное DISPLAY=:0 galculator . Если надо без su, то надо разрешить иксам подключение от рута (да, в иксах есть своя система доступа), опять же от пользователя иксов xhost local:root
на компе на котором запущен X сервер, должен быть открыт порт 6000/tcp в firewall
логика такая с открытыми портами:
для 0: - 6000 для 1: - 6001 и т.д.
далее X server должен быть запущен с параметром -listen tcp. По умолчанию опция -nolisten.
Далее либо X server должен быть запущен без аутенфикации - опция -ac либо добавить хост с которого идет соединение в список доверенных man xhost
далее запускаете приложение так: $ DISPLAY=<ip address>:0 xterm
xterm и номер экрана 0 для примера
Попробуй найти в домашнем каталоге пользователя(через которого все ок) файл настройки .x(что-то там) и скопируй его в домашний каталог рута
Немного обо всем и все о немногом, или практический опыт системного администратора.
Пн | Вт | Ср | Чт | Пт | Сб | Вс |
---|---|---|---|---|---|---|
« Дек | Фев » | |||||
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Графика Linux через ssh
На последней лекции нам рассказывали о службе X Server, которая является основой графики в Linux. Лекцию по этой теме выложу позже, а пока хочу описать о там как удаленно запустить графическое приложение Linux через ssh. Зачем это может понадобится это уже другой вопрос :) Итак, речь идет о двух компьютерах с Linux: удаленный (буду называть его debian) и свой локальный (назовем его ubuntu).
Сначала заходим по ssh на debian и открывает с правами администратора файл /etc/ssh/sshd_config. Ищем параметр X11Forwarding устанавливаем значение yes. Сохраняем файл и перезапускаем службу:
/etc/init.d/ssh restart
Отключаемся от удаленного компьютера и подключаемся еще раз только уже с ключом -X:
ssh -X user@debian
Теперь запускаем какое-либо графическое приложение установленное на удаленном компьютере debian, например браузер iceweasel:
если хотим получить доступ к командной строке.
Процесс iceweasel запуститься на удаленном компьютере, но изображение будет рисоваться на локальном экране компьютера ubuntu. Но об этом подробнее на лекции.
Можно также на локальном компьютере открыть файл /etc/ssh/ssh_config и в нем установить параметр X11Forwarding в yes. Тогда запуск графических приложений будет работать и без ключа -X.
Удаленное подключение к рабочему столу Linux из Windows с помощью Xming и SSH
Вы видите приложения Linux прямо на рабочем столе Windows! Как же они туда попали?
Но это еще не все! Дело в том, что оконная система может находиться на другом компьютере, а графическое приложение связываться с ней через сеть. Так вы можете запустить приложение на удаленном компьютере, заставив его рисоваться на том компьютере, за которым сейчас работаете. Или наоборот. Или запустить программу на одном удаленном компьютере с отрисовкой интерфейса на другом удаленном компьютере. Заманчивая возможность, неправда ли? 🙂
Думаю, достаточно теории, давайте приступим к практике.
$ sudo apt-get install openssh-server
Все, с этим компьютером мы закончили, и касаться его клавиатуры в ходе этой статьи больше не будем. Теперь можем переходить к подготовке компьютера Windows. Здесь нужно установить две программы:
1. SSH-клиент. Я установил PuTTY.
2. X Server для Windows. Я выбрал Xming.
Для начала установим соединение по SSH с удаленным компьютером. Для этого запускаем PuTTY. Вводим IP-адрес компьютера Linux.
Теперь переходим в раздел Connection / SSH / X11 и включаем перенаправление графического интерфейса. В качестве расположения X-сервера водим IP-адрес компьютера Windows, за которым сейчас сидим.
На втором шаге нам предлагается автоматически запускать какое-нибудь приложение вместе с иксами. Я предпочел сделать это позже по мере необходимости посредством уже запущенного нами PuTTY.
В системном лотке появится иконка Xming
В дальнейшем запустить сервер с теми же настройками можно просто путем открытия сохраненного файла. Изменить настройки можно через контекстное меню файла.
Итак, X-сервер запущен. Возвращаемся в нашу консоль, предоставленную соединением SSH. Здесь мы можем удаленно запустить консольное приложение, и в этой же консоли увидим вывод этого приложения. А что теперь будет, если мы попытаемся запустить в этой консоли графическое приложение? Обычно, если вы подключились по SSH и пытаетесь запустить оконное приложение, вы получите ошибку, потому что вы подключились к удаленному компьютеру в консольном режиме, и рисовать окна просто нечем. Однако, в этот раз мы включили перенаправление графики на наш компьютер Windows, на котором уже запущен свой X-сервер. Поэтому, если вы попытаетесь запустить оконное приложение в удаленном консольном терминале, его окно нарисуется на компьютере Windows. Попробуйте, например, набрать следующую команду:
Амперсанд в конце команды указывает, что программу нужно запустить в фоновом режиме, чтобы во время ее работы консоль была доступна для других действий.
Ну, надеюсь, у вас все получилось, и на вашем рабочем столе Windows красуются оконные приложения Linux.
Читайте также: