home

Запуск приложения в режиме киоска (kiosk mode) в Calculate Linux под LXQt и Openbox

Введение[править]

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

Хотя есть специализированные дистрибутивы для коисков, по ряду причин может быть интересно запуститься именно на базе Calculate Linux. Данная инструкция составлена для Calculate Linux LXQt 18.12.

Установка Calculate Linux[править]

Установите Calculate Linux LXQt, взяв дистрибутив с сайта.

В процессе установки создайте нового пользователя (далее будем считать, что пользователь для приложения киоска носит имя kiosk), под которым вы будете запускать режим киоска и включите для него автоматический вход (создайте отдельного от guest пользователя, оставив guest для служебных целей).

Войдите под пользователем kiosk и настройте при необходимости работу сети.

Настройка режима киоска с помощью Openbox и настроек LXQt[править]

Установите приложение, которое собираетесь запускать в режиме киоска (например ELiS Kiosk) и убедитесь, что оно нормально запускается и само открывается на полный экран.

Перейдите к настройке LXQt: Кнопка "Старт" - "Параметры" - "Системные настройки LXQt".

"Старт" - "Параметры" - "Системные настройки LXQt" - "Управление энергопотреблением" - "Бездействие": оставьте включенным управление при простое, но измените поле "при простое" на "ничего".

open-power-settings.png

power-settings.png

"Старт" - "Параметры" - "Системные настройки LXQt" - "Настройки сеанса" - "Основные настройки" - "Модули LXQt": снимите отметки с "Рабочий стол", "Глобальные сочетания клавиш", "Служба уведомлений", "Панель".

openbox-lxqt-modules.png

"Старт" - "Параметры" - "Системные настройки LXQt" - "Настройки сеанса" - "Автозапуск" - "Автозапуск только для LXQt" - "Добавить": выберите приложение, которое будет автоматически запускаться в режиме киоска (например ELiSKiosk).

autorun-app.png

Теперь надо отключить декорацию окон под пользователем kiosk, для чего надо настроить Openbox:

"Старт" - "Системные" - "QTerminal" и введите: $ vi ~/.config/openbox/rc.xml для перехода редактирования конфигурации в редакторе vim.

edit-openbox-rc.xml.png

Найдите тег <applications> и внутри него добавьте:

 <application class="*">
   <decor>no</decor>
 </application>

(справка по vim: для перехода в режим редактирования нажмите "i", затем напишите нужный код, нажмите Esc для выхода из режима редактирования и нажмите последовательно клавиши ":", "w", "q" для записи изменений и выхода из vim).

nodecor-edit.png

Отключение заставки[править]

Для отключения заставки создайте файл ~/.profile (vi ~/.profile) и добавьте в него строки:

#!/bin/sh
xset s off
xset s noblank
xset -dpms

Сделайте файл .profile исполняемым

chmod 0555 ~/.profile

Перезагрузите компьютер.

Если что-то не получилось[править]

Вы можете переключиться в терминал в другой сеанс, нажав клавиши Ctrl+Alt+F1 и удалив домашнюю папку пользователя kiosk (# rm -Rf /home/kiosk/) или только конфигурацию (rm -Rf /home/kiosk/.config).

Автоматический перезапуск при падении приложения[править]

На этом можно закончить, но если ваше приложение падает, надо чтобы оно автоматически перезапускалось. Можно это сделать разными путями, один ниже.

Чтобы приложение перезапускать, надо написать сервис, который будет отслеживать факт запуска процесса и если он не запущен, автоматически его запускать.

Такие сервисы называют супервизорами.

Создадим папку для размещения скрипта супервизора:

# mkdir /opt/kiosk

Напишем сам скрипт в /opt/kiosk/supervesor.sh, который будет проверять, что приложение KioskAppName по пути KioskAppPath (подставьте свой путь и название запускаемого процесса) сейчас запущено и если оно не запущено, то запускает его.

При этом установим задержку при старте в 180 секунд, а проверку на существование процесса будем делать каждую секунду.

#!/bin/sh
# run KioksApp if it down
# for autostart on gentoo add /etc/init.d/KioskApp by command 'eselect rc add KioskApp default'
KioskAppName=KioskBrowser # name of binary app
KioskAppPath=/opt/kiosk/KioskBrowser # full path to binary app
export DISPLAY=:0.0
# wait loading x11
sleep 180s
while true; do
       sleep 1s
       pid=$(pidof $KioskAppName)
       ## uncomment for KioskBrowser and comment code with pid
       #SECRET=********
       #status=$(curl "http://127.0.0.1:8080/status?key=$SECRET" 2>/dev/null |grep \"isWorks\":true) 
       #if -z $status ; then
       if -z $pid ; then
               echo $KioskAppName not runned > /dev/kmsg
               pkill $KioskAppName > /dev/null
               sudo -u kiosk $KioskAppPath > /dev/null 2>&1 # run app
       fi;
done

Создадим в /etc/init.d/KioskApp скрипт запуска супервизора:

#!/sbin/openrc-run
# Copyright 2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
name="KioskApp daemon"
description=""
command=/opt/kiosk/supervesor.sh
depend() {
  need xdm
}

Сделаем скрипт исполняемым:

# chmod 0755 /etc/init.d/KioskApp

Включим сервис супервизора:

# eselect rc add KioskApp default

Разворот сенсора[править]

Иногда сенсорные экраны развернуты и клики отображаются в другом месте, чтобы это преодолеть необходимо произвести преобразования ввода на конкретном сенсоре. Пример скрипта:

export DISPLAY=:0.0
xinput set-prop "Elo TouchSystems, Inc. Elo TouchSystems 2700 IntelliTouch(r) USB Touchmonitor Interface" --type=float "Coordinate Transformation Matrix" -1 0 1 0 -1 1 0 0 1