Дата написания: март 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
Но много-много раз подумайте, на сколько вам необходима такая полная автоматизация!