Преамбула
Необходимо организовать веб-киоск для посетителей организации. Киоск должен показывать только сайт компании. Никаких других возможностей быть не должно. Для тех. поддержки должен быть доступ через VNC.
Амбула
Это инструкция является в основном компиляцией этих статей:
Ubuntu 18.04 LTS kiosk for web or RDP и Руководство по настройке станции в режиме kiosk-mode на основе Openbox. В части настройки VNC использовалось руководство Ubuntu 18.04 VNC.
1. Установка Linux
Ставим Ubuntu 18.04 LTS Server. После установки обновляем ОС:
sudo apt-get update
sudo apt-get upgrade -y
sudo reboot
После перезагрузки можно сменить имя киоска (если при установке задали неправильно):
- в /etc/cloud/cloud.cfg указываем
preserve_hostname: true - Перезагружаем (надо ли?) ПК
sudo reboot - переименовываем хост
sudo hostnamectl set-hostname NEW_HOST_NAME - ... и опять
sudo reboot
sudo dpkg-reconfigure tzdata
Проверяем (исправляем) русскую раскладку у киоска:
sudo dpkg-reconfigure keyboard-configuration
Проверяем (исправляем) русскую раскладку у киоска:
sudo dpkg-reconfigure keyboard-configuration
2. Создаем пользователя для киоска
Создаем пользователя kiosk с домашней папкой и членством в группе users:
sudo useradd -m -g users kiosk
sudo useradd -m -g users kiosk
Разрешаем группе users выключать и перезагружать киоск без ввода пароля - в /etc/sudoers дописываем в конец строку:
%users ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/init
Настраиваем пользователю авто-логон на первом консольном экране:
sudo systemctl edit getty@tty1
в открывшемся редакторе пишем:
[Service]
ExecStart=
ExecStart=-/sbin/agetty -a kiosk --noclear %I $TERM
Сохраняем конфигурацию (ctrl+o), выходим из редактора (ctrl+x).
3. Установка и настройка ПО киоска
Идея работы такая:
после автологона пользователя kiosk происходит запуск shell, у которого в .profile указано что если текущий терминал tty1 то нужно запустить X, которые в свою очередь запустят openbox. У openbox в autostart указано, кроме всего прочего, запускать фоном (&) vnc-сессию для текущего пользователя и скрипт loop.sh из домашней папки (в скрипте должен бесконечно вызываться chromium):
- Ставим chromium:
sudo apt-get install --no-install-recommends chromium-browser - Так как специально был выбран дистрибутив без графического интерфейса, ставим X-windows и менеджер стола openbox:
sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox -y - устанавливаем VNC (чтобы в дальнейшем можно было подключиться к сеансу киоска в случае каких-либо проблем), указываем пароль для доступа по VNC, разрешаем читать хэш пароля:
sudo apt install x11vnc -y
sudo x11vnc -storepasswd "Qwe123" /etc/x11vnc.pass
sudo chmod +r /etc/x11vnc.pass - Настраиваем профиль shell пользователя kiosk (/home/kiosk/.profile) на запуск X если пользователь зашел на tty1:
if [ -z "$DISPLAY" ] && [ $(tty) = /dev/tty1 ]; then startx
fi - Подготавливаем скрипт авто-перезапуска chromium (запускать в режиме киоска, в цикле через 5 сек после закрытия) у пользователя kiosk в домашней папке (/home/kiosk/loop.sh):
#!/bin/bash
while true; do chromium-browser --kiosk --incognito --disable-infobars 'http://shp.formulam2.ru' ; sleep 5s ; done
Добавляем права для запуска:
chmod +x /home/kiosk/loop.sh - Редактируем autostart у openbox (/etc/xdg/openbox/autostart):
# Disable any form of screen saver / screen blanking /
# power management
xset s off
xset s noblank
xset -dpms
# Allow quitting the X server with CTRL-ATL-Backspace
setxkbmap -option terminate:ctrl_alt_bksp
# Start VNC in background
/usr/bin/x11vnc -rfbauth /etc/x11vnc.pass -noxdamage -shared -dontdisconnect -many -noxfixes -auth ~/.Xauthority -loop &
# Start Chromium in kiosk mode
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State'
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chromium/Default/Preferences
# first start without loop & not incognito -- to create
# chromium profile
chromium-browser 'http://shp.formulam2.ru'
# in future -- comment stroke above and uncomment below
#~/loop.sh
4. Первый запуск, проверка работы киоска
Как обычно,
sudo reboot
sudo reboot
и проверяем, как работает киоск - загрузился ли автоматически, как работает перемещение по сайту. Обязательно отказываемся от автоматического перевода для русского языка или меняем язык на русский. Проверяем доступ по VNC.
У меня возникла проблема на одном одном из киосков - понадобилось вручную доустановить драйвера видеоадаптера (?):
sudo apt install xserver-xorg-video-fbdev -y
sudo apt install xserver-xorg-video-intel -y
5. Окончательная настройка
После успешной проверки запуска киоска и настройки русского языка в chromium, необходимо:
- в конфиге автостарта openbox (пп. 3.6, /etc/xdg/openbox/autostart):
- закомментировать предпоследний параметр - явный запуск chromium:
chromium-browser 'http://shp.formulam2.ru' - разкомментировать последний параметр - вызов скрипта цикличного запуска chromium:
~/loop.sh - Настроить контекстное меню openbox (/etc/xdg/openbox/menu.xml) - чтобы можно было при закрытом chromium только выключить или перезагрузить киоск:
<?xml version="1.0" encoding="UTF-8"?>
<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">
<menu id="root-menu" label="Openbox 3">
<!-- This requires the presence of the 'openbox-menu' package to work -->
<item label="Перезагрузка ПК">
<action name="Execute">
<execute>
/sbin/reboot
</execute>
</action>
</item>
<separator />
<item label="Выключение ПК">
<action name="Execute">
<execute>
/sbin/init 0
</execute>
</action>
</item>
</menu>
</openbox_menu> - Запрещаем для графического режима переключаться в соседние терминалы (отключаем комбинацию Ctrl+Alt+Fn):
- создаем конфигурационный файл:
/usr/share/X11/xorg.conf.d/50-novtswitch.conf - Добавляем в него настройки:
Section "ServerFlags"
Option "DontVTSwitch" "true"
EndSection - Перезагружаем киоск, проверяем работу
6. Необязательная настройка киоска
В моем случае понадобилось дополнительно запланировать ежедневное выключение киоска в 18:05 через cron:
sudo crontab -e
добавляем строку:
05 18 * * * /sbin/init 0
7. Что не устраивает
- Можно закрыть приложение киоска (chromium, Alt+F4)
- Можно пользоваться комбинациями клавиш в chromium (открывать новые окна с адресной строкой, запускать отладчик и т.д.)
Этот комментарий был удален автором.
ОтветитьУдалитьА как устанавливать на ноутбуке, возможно в Virtualbox, чтобы команды не вводить с клавиатуры, а копировать из вашей инструкции?
ОтветитьУдалитьИзвиняюсь перед всеми за поздние ответы - блог просто как записная книжка "для себя" , меньше всего жду что кто-то посторонний заинтересуется его содержимым, и поэтому не мониторю комментарии к нему .
УдалитьПо вопросу "как" - я бы после установки в виртуалбоксе линукса заходил бы на него по ssh (с Windows - через putty / kitty) , а в терминале буфер работает.
Как-то можно отключить комбинации клавиш Alt+Tab, например?
ОтветитьУдалитьЧестно говоря не делал так. И попробовать сейчас негде - проект киосков свернули. Можно погуглить запрос типа "disable alt tab in openbox", мне в результатах поиска показались перспективными эти ресурсы:
Удалитьhttps://askubuntu.com/questions/1098362/openbox-disable-altf4
https://urukrama.wordpress.com/2011/11/01/reverting-to-the-old-alt-tab-dialog-in-openbox-3-5/
https://melp.nl/2011/01/10-must-have-key-and-mouse-binding-configs-in-openbox/
Лучшая инструкция, которую я видел, благодарю! Очень интересно, как сделать систему read only? Потому что все равно киоск будут дергать из сети в самое неподходящее время, и при следующей загрузке она может вывалиться в initramfs, у меня было такое. Как исправить знаю, а как предотвратить - большой вопрос
ОтветитьУдалитьТолковая инструкция! Натолкнуло на идею использовать монитор в режиме портрета, однако в данной конфигурации xrandr не сработал. Есть идеи как повернуть изображение?
ОтветитьУдалить