Дата написания: март 2017 г.
Автор: Graf

Запуск удалённых приложений по протоколу SSH или XDMCP



Для примера я взял уже настроенную по своей статье Raspberry в качестве клиента. В принципе, дальнейшие действия можно делать на любом компьютере с ОС Slackware Linux, а не только на Raspberry.
И так, дабы не загружать нашу Raspberry всевозможными DE и графическими приложениями, возьмем более мощный компьютер или сервер на котором всё это установлено и будем его использовать как сервер приложений, к которому будем подключаться по протоколу SSH или XDMCP (X Display Manager Control Protocol — протокол управления диспетчером X-отображения), допустим, с IP-192.168.10.10 и именем server.mydom.lan, а нашей Raspberry дадим IP-192.168.10.11 и имя rpi.mydom.lan.
Какой протокол использовать, решать вам. При подключении в сети 1Gb по SSH, нагрузка на процессор доходила до 65%, правда, это никак не сказывалось на отображение видео. А вот при подключении по XDMCP максимальная нагрузка была замечена в 35%. Но, надо учесть и тот факт, что соединение по SSH более защищено и поэтому требует больше ресурсов в отличии от XDMCP. По той же причине рекомендуется использовать протокол XDMCP только в локальных, доверительных сетях.
Если кто не знает, то ZmNinja - это приложение для просмотра и настройки камер на ZoneMinder о котором немного написано в моей статье о самом ZoneMinder.

SSH

Настройка сервера

Первое, что мы сделаем, это пропишем в /etc/hosts наш сервер и Raspberry.

127.0.0.1              localhost
192.168.10.10          server.mydom.lan server
192.168.10.11          rpi.mydom.lan rpi

Теперь создадим пользователя, под которым будем соединяться.

# useradd -m -d /home/tvset -g users -s /bin/bash tvset
# passwd tvset
Изменение пароля для tvset
Введите новый пароль (минимальная длина 5 символов)
Используйте комбинацию из символов в верхнем и нижнем регистре и цифры.
Новый пароль: 
Повторите новый пароль: 
passwd: пароль изменён.

# id tvset
uid=1000(tvset) gid=100(users) группы=100(users)

# cat /etc/passwd | grep tvset
tvset:x:1000:100::/home/tvset:/bin/bash

Изменяем файл /etc/ssh/sshd_conf, удаляя знаки комментария с нужных параметров, приведя к виду:

AuthorizedKeysFile      .ssh/authorized_keys
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
Subsystem       sftp    /usr/libexec/sftp-server

Создаем файл ~/.bash_profile с содержимым:

xset dpms 0 0 0
xset s off
/usr/bin/wmaker --no-dock --no-clip --static &
/usr/bin/firefox http://vm.mydom.ru
# /ПУТЬ/К_zmNinja/zmNinja

где:
xset dpms 0 0 0 - запрещаем режим энергосбережения (чтобы экран всё время показывал изображения, а не отключался через определённое время простоя);
xset s off - отключаем защитник экрана;
/usr/bin/wmaker –no-dock –no-clip –static & - запускаем WindowMaker с чистым рабочим столом в фоне;
/usr/bin/firefox http://vm.mydom.ru - запускаем Firefox со страничкой входа на наш видеосервер;
# /ПУТЬ/К_zmNinja/zmNinja - или вместо Firefox запускаем zmNinja, убрав знак комментария и написав полный путь до него.
Можно в Firefox установить расширение kiosk-costaisa и тогда он будет автоматически раскрываться на весь экран.

Создадим файл /etc/X11/Xwrapper.config и пропишем туда одну строку.

allowed_users=anybody

Перезапустим демон sshd.

# /etc/rc.d/rc.sshd stop
# /etc/rc.d/rc.sshd start

Настройка Raspberry

В /etc/HOSTNAME пропишем нашу Raspberry:

rpi.mydom.lan

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

# useradd -m -d /home/tvset -g users -s /bin/bash tvset
# passwd tvset
Изменение пароля для tvset
Введите новый пароль (минимальная длина 5 символов)
Используйте комбинацию из символов в верхнем и нижнем регистре и цифры.
Новый пароль: 
Повторите новый пароль: 
passwd: пароль изменён.

Изменяем файл /etc/ssh/ssh_conf, удаляя знаки комментария с нужных параметров и(или) дописывая отсутствующие, приведя к виду:

Host *
  ForwardX11 yes
  ForwardX11Trusted yes
  XAuthLocation /usr/bin/xauth

Создаем файл ~/.xinitrc с содержимым:

#!/bin/sh
 
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap
 
# merge in defaults and keymaps
 
if [ -f $sysresources ]; then
    xrdb -merge $sysresources
fi
 
if [ -f $sysmodmap ]; then
    xmodmap $sysmodmap
fi
 
if [ -f $userresources ]; then
    xrdb -merge $userresources
fi
 
if [ -f $usermodmap ]; then
    xmodmap $usermodmap
fi
 
xterm -e "/usr/bin/ssh -XC tvset@192.168.10.10"

и cделаем его запускаемым.

# chmod +x ~/.xinitrc

Теперь, при входе в систему под пользователем tvset и вводе команды startx или xinit, мы увидим окно xterm'инала c запросом о добавлении ключа (выводится один раз при новом подключении), вводим «yes» и потом пароль пользователя tvset на сервере.

The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is SHA256:XC6c+U4lQFFUDOIuXCWrToOzHCC8g9tiXBHTZNrR8aY.
Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
tvset@192.168.10.10's password: 

После ввода пароля мы сразу же увидим Firefox или zmNinja, в зависимости от того, что прописали в файле ~/.bash_profile на сервере.

  • Автологин

Для того чтобы не вводить пароль на доступ по ssh, воспользуемся специально созданными ключами.

$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/tvset/.ssh/id_rsa):    <-- Enter
Enter passphrase (empty for no passphrase):                       <-- Enter
Enter same passphrase again:                                      <-- Enter  
Your identification has been saved in /home/tvset/.ssh/id_rsa.
Your public key has been saved in /home/tvset/.ssh/id_rsa.pub.
The key fingerprint is:
...
...
...

И передадим публичный ключ серверу.

$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.10.10

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/tvset/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

tvset@192.168.10.10's password:  <-- Тут вводим пароль tvset на сервере.

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.10.10'"
and check to make sure that only the key(s) you wanted were added.

Теперь, при входе в систему под пользователем tvset и вводе команды startx или xinit, мы увидим Firefox или zmNinja, в зависимости от того, что прописали в файле ~/.bash_profile на сервере.

Если мы хотим полностью автоматизировать процесс, т.е. при включении Raspberry сразу видеть картинку с сервера, то нам необходимо ещё изменить некоторые строки в файле /etc/inittab

# Default runlevel. (Do not set to 0 or 6)
#id:3:initdefault:
id:4:initdefault:

# These are the standard console login getties in multiuser mode:
#c1:12345:respawn:/sbin/agetty --noclear 38400 tty1 linux
c1:12345:respawn:/sbin/agetty -a tvset -8 -s --noclear 38400 tty1 linux

# Runlevel 4 also starts /etc/rc.d/rc.4 to run a display manager for X.
# Display managers are preferred in this order:  gdm, kdm, xdm
#x1:4:respawn:/etc/rc.d/rc.4

и создать ~/.bash_profile, прописав туда

/usr/bin/startx

Но много-много раз подумайте, на сколько вам необходима такая полная автоматизация!

XDMCP

Настройка сервера

Первое, что мы сделаем, это пропишем в /etc/hosts наш сервер и Raspberry

127.0.0.1              localhost
192.168.10.10          server.mydom.lan server
192.168.10.11          rpi.mydom.lan rpi

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

# useradd -m -d /home/tvset -g users -s /bin/bash tvset
# passwd tvset
Изменение пароля для tvset
Введите новый пароль (минимальная длина 5 символов)
Используйте комбинацию из символов в верхнем и нижнем регистре и цифры.
Новый пароль: 
Повторите новый пароль: 
passwd: пароль изменён.

В файле /etc/X11/xdm/xdm-config комментируем строку поставив вначале строки восклицательный знак - «!», тем самым указывая XDM на то, что он должен принимать обращения через UDP - порт 177 (порт по умолчанию для XDMCP):

! DisplayManager.requestPort:   0

В файле /etc/X11/xdm/Xaccess прописываем нашу Raspberry.

rpi.mydom.lan

Так же прописываем её в файле /etc/X11/xdm/Xservers, где foreign указывает на то, что заданная система является удаленной и запрещаем запуск xdm на самом сервере.

#:0 local /usr/bin/X :0
rpi.mydom.lan:0 foreign

Создаем файл ~/.bash_profile со содержимым:

xset dpms 0 0 0
xset s off
/usr/bin/wmaker --no-dock --no-clip --static &
/usr/bin/firefox http://vm.mydom.ru
# /ПУТЬ/К_zmNinja/zmNinja

где:
xset dpms 0 0 0 - запрещаем режим энергосбережения (чтобы экран всё время показывал изображения, а не отключался через определённое время простоя);
xset s off - отключаем защитник экрана;
/usr/bin/wmaker –no-dock –no-clip –static & - запускаем WindowMaker с чистым рабочим столом, в фоне;
/usr/bin/firefox http://vm.mydom.ru - запускаем Firefox со страничкой входа на наш видеосервер;
# /ПУТЬ/К_zmNinja/zmNinja - или вместо Firefox запускаем zmNinja, убрав знак комментария и написав полный путь до него.
Можно в Firefox установить расширение kiosk-costaisa и тогда он будет автоматически раскрываться на весь экран.

Изменить окно ввода логина и пароля XDM, можно отредактировав файл /etc/X11/xdm/Xresources. В итоге, у меня получилось вот такое окно.



Конвертировать картинку в xpm формат можно при помощи convert.

# convert ./myphoto.jpg ./myphoto.xpm

Чтобы xdm запускался автоматически после перезагрузки сервера, пропишем его в /etc/rc.d/rc.local.

/usr/bin/xdm &

Настройка Raspberry

В /etc/HOSTNAME пропишем нашу Raspberry:

rpi.mydom.lan

Теперь создадим пользователя, любого, не обязательно такого же под которым будем соединяться. Ведь работать под супер пользователем, плохая привычка. Но, если потом мы запланируем автоматический вход в систему без ввода пароля, то лучше пользователей создать одинаковых с одинаковыми паролями, дабы не запутаться самим.

# useradd -m -d /home/tvset -g users -s /bin/bash tvset
# passwd tvset
Изменение пароля для tvset
Введите новый пароль (минимальная длина 5 символов)
Используйте комбинацию из символов в верхнем и нижнем регистре и цифры.
Новый пароль: 
Повторите новый пароль: 
passwd: пароль изменён.

Собственно, вся настройка :). Теперь, войдя под пользователем tvset, достаточно ввести в консоли:

$ X -query 192.168.10.10

и перед вами появится окно ввода логина и пароля xdm. После ввода логина и пароля мы сразу же увидим Firefox или zmNinja, в зависимости от того, что прописали в файле ~/.bash_profile на сервере.

  • Автологин

Если мы хотим автоматизировать процесс, т.е. при включении Raspberry сразу видеть окно ввода логина и пароля xdm, то нам необходимо изменить некоторые строки в файле /etc/inittab

# Default runlevel. (Do not set to 0 or 6)
#id:3:initdefault:
id:4:initdefault:

# These are the standard console login getties in multiuser mode:
#c1:12345:respawn:/sbin/agetty --noclear 38400 tty1 linux
c1:12345:respawn:/sbin/agetty -a tvset -8 -s --noclear 38400 tty1 linux

# Runlevel 4 also starts /etc/rc.d/rc.4 to run a display manager for X.
# Display managers are preferred in this order:  gdm, kdm, xdm
#x1:4:respawn:/etc/rc.d/rc.4
x1:4:respawn:/usr/bin/X -query 192.168.10.10

Но много-много раз подумайте, на сколько вам необходима такая полная автоматизация!


Обсуждаем на форуме

Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:xdmcpssh (generated for current page)