Блог - Linux, программирование, Я!

linux на десктопеДистанционно запустить Linux X приложение на Windows

И так, задача - дистанционно залогиниться на Linux машине (с внешним айпи) и запустить на ней X (графическое) приложение Linux, работая при этом в Windows (внешний айпишник не нужен, просто доступ в инет)
Ну, бывает что обычной командной строки через Putty SSH не хватает и нужно поработать удаленно с какой-либо графической програмкой... Скажем, поставить в DC++ на скачку фильмец или еще чего...
Если набрать в командной строке
linuxdcpp
в ответ получим что-то вроде
Error! Unable to open display
Как же с этим справиться?

Самый простой вариант (на мой взгляд):
1. Создание необходимых учетных записей на Linux машине
2. Установка (если не установлено ранее) и настройка SSHd
3. Установка на Windows пакета программ Cygwin, включая Cygwin/X
4. Запуск X сервера на Windows с требуемыми параметрами
5. Логин на удаленной Linux машине через ssh (с помощью того же Cygwin или Putty)
6. Собственно запуск приложения и работа в нем))

BONUS: То-же, но если оба компа под Linux

Теперь подробности:
Я работаю в Ubuntu 7.10 и Windows XP SP2, поэтому все что пишу дальше относится в первую очередь к ним. 1. Создание необходимых учетных записей на Linux машине
Ну, думаю ничего сложного в этом нет. Создаем юзера с реальными домашним каталогом и командной оболочкой, через которого будем логиниться по ssh. Тут ничего сложного нет.

[codesyntax lang="bash"]man useradd[/codesyntax]

вам в помощь
Например
[codesyntax lang="bash"]sudo useradd -d /home/{имя юзера} -m -s /bin/bash {имя юзера} ; sudo passwd {имя юзера}[/codesyntax]

После этой команды вас попросят ввести пароль для новой учетной записи.

2. Установка (если не установлено ранее) и настройка SSHd
Устанавливаем SSHd (если нет)
[codesyntax lang="bash"]apt-get install sshd[/codesyntax]

в конфигурационном файле /etc/ssh/sshd_config настраиваем права доступа

DenyUsers all
AllowUsers {имя юзера}

(можно оставить по умолчанию)
И разрешаем трансляцию X сессии, для этого нужно исправить соотв. строчку на
X11Forwarding yes

и перезапустить сервер sshd:

[codesyntax lang="bash"]sudo /etc/init.d/ssh restart[/codesyntax]

3. Установка на Windows пакета программ Cygwin, включая Cygwin/X
Скачиваем файлик http://cygwin.com/setup.exe (это аналог менеджера пакетов Linux), запускаем:

Пакеты:
Минимум загрузки для работы X сервера и ssh:
отметить сверху радиобатон Keep вместо Curr
Затем отметить для установки (раздел/пакет):
Net/OpenSSH
Shells/bash
Shells/ash
X11/xorg-x11-base

Остальные необходимые пакеты(зависимости) установятся автоматически
Загрузится порядка 36Мб пакетов

Оптимально по юзабилити (если хотите юзать не только X-сервер)
оставить радиобатон Curr
Затем отметить для установки:
Net/OpenSSH
X11/xorg-x11-base

Остальные необходимые пакеты(зависимости) установятся автоматически
Загрузится порядка 53Мб пакетов, зато получите практически полноценный linux))

Если предпочитаете (и не зря) использовать putty, то устанавливать Net/OpenSSH не нужно
Да в принципе можно и командную оболочку Shells/bash, Shells/ash не устанавливать, я не пробовал.

Потом все это дело скачается:

Установится

4. Запуск X сервера на Windows с требуемыми параметрами
переходим в папочку
C:cygwinusrX11R6bin
находим там файлик startxwin.bat делаем, для того, чтобы можно было переключать раскладку в X-окнах так:
ищем строку
%RUN% XWin -multiwindow -clipboard -silent-dup-error
и преобразуем её к виду
%RUN% XWin -multiwindow -clipboard -silent-dup-error -xkblayout "us,ru" -xkbvariant ",winkeys" -xkboptions "grp:ctrl_shift_toggle"
И запускаем этот файл!
Видим такое:

Запускается X - графическая консоль и в трее появляется значок X
В принципе теперь уже можно запускать локально X-приложения.

5. Логин на удаленной Linux машине через ssh
5.1 С помощью Cygwin SSH
В появившейся консоли вводим

[codesyntax lang="bash"]ssh -Y {имя юзера}@{адрес Linux сервера}[/codesyntax]

после принятия ключа сервера и ввода пароля попадаем в консоль удаленного сервера.

Теперь можно запускать X-приложения на Linux с отображением окон программ на нашем Windows компьютере!

5.2 С помощью Putty

Такое получится, если запустить

[codesyntax lang="bash"]Nautilus&[/codesyntax]

и в нем пооткрывать окон и т.п.

BONUS: То-же, но если оба компа под Linux

Выполняем пункты 1-2 на Linux сервере, затем на Linux клиенте выполняем пункты 5-6

Не забываем, что в пункте 5 в консоли вводим

[codesyntax lang="bash"]ssh <strong>-Y</strong> {имя юзера}@{адрес Linux сервера}[/codesyntax]

Опция -Y разрешает работу графических приложений под SSH
---------------------------------------------------
На всякий случай предупреждаю: переключить запущенное приложение с одного X-сервера на другой невозможно! Т.е. если вы запустили приложение по SSH, то и работать с ним сможете по SSH, чтобы продолжить с ним работу на самом сервере непосредственно (или перевести в "фоновый" режим), приложение придется выключить и запустить уже на сервере заново

Советую почитать http://ru.wikipedia.org/wiki/X_Window_System

Ну, собственно все!
Удачных экспериментов! )))