Автологин в Linux и Kiosk Mode

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


Для выполнения задачи необходимо, чтобы запускалась графическая среда, а в ней сразу нужное приложение. Пользователь должен начинать работу сразу, без всяких процедур авторизации и пр. При этом пользователь должен иметь возможность работать только с данным приложением, ну, возможно, оно разрешает запускать какие-то другие программы, но только строго по списку.


Для начала отключим некоторые функции Х-сервера, такие как спящий режим и скринсэйвер, создаем файл /etc/X11/xorg.conf.d/10-dpms.conf со следующим содержимым:

Section "ServerFlags"
    Option "blank time"   "0"
    Option "standby time" "0"
    Option "suspend time" "0"
    Option "off time"     "0"
EndSection

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


Автовход GDM и запуск браузера в киоске

Для настройки автоматического входа в систему, необходимо внести записи в настроечный файл /etc/gdm/custom.conf. В нем есть секция [daemon], которая изначально пуста. Внесем в нее изменения:

[daemon]
AutomaticLoginEnable=true
AutomaticLogin=user

- где user, пользователь который будет автоматический входить в систему.


Теперь настроим автоматический запуск браузера в режиме киоск на примере Opera версии 11.64 (различные версии оперы можно скачать здесь).

Для этого приводим файл /etc/gdm/Xsession к следующему ввиду

#!/bin/bash

. /etc/X11/xinit/xinitrc-common

/usr/bin/opera         \
    -kioskmode         \
    -nosession         \
    -nosplash          \
    -nomail            \
    -nosave            \
    -nomenu            \
    -nodownload        \
    -nocontextmenu     \
    -nochangebuttons   \
    -resetonexit       \
    -geometry 1280x1024+0+0 \
http://hostadmina.ru

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


Автовход Systemd и запуск браузера в киоске

Создаем новый сервис аналогичный getty@.service:

cp /lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service

ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty7.service

- где tty7, номер виртуальной консоли под которой выполним автовход.

Редактируем следующие строки файла getty@tty7.service, например:

 [Service]
... 
ExecStart=-/sbin/agetty --autologin user --noclear %I
Restart=always
... 
Alias=getty.target.wants/getty@tty7.service

- где user, пользователь который будет автоматический входить в систему.

Перезапускаем конфигурацию менеджера systemd и запускаем службу следующими командами:

systemctl daemon-reload
 
systemctl start getty@tty7.service 

Теперь настроим автоматический запуск браузера в режиме киоск, возьмем для примера другой браузер, допустим Firefox, для него необходимо поставить дополнения m-kiosk или r-kiosk.

После этого необходимо добавить в конец файла /home/user/.bash_profile следующую строку:

xinit -- -nocursor -nolisten tcp vt7

И создать файл /home/user/.xinitrc со следующим содержимым:

/usr/bin/metacity &
watch /usr/bin/firefox http://hostadmina.ru

Перезагружаем или перезапускаем systemd и службу getty@tty7.service, также можно выполнить killall xinit и под пользователем user в 7 терминале запустить Х-сервер командой xinit.

Комментарии (2)

  1. Artem:
    29.06.2017 в 10:00

    Добрый день! Хотелось бы увидеть такую статью, но без x-сов. Допустим Ubuntu Server 16.04 консольный вариант.

    Ответить

  2. Viacheslav:
    10.07.2020 в 11:52

    Добрый!
    Помимо желания предыдущего комментатора добавлю ещё свои.
    Автологин в безгуёвый сервер (консоль tty)
    И САМОЕ ГЛАВНОЕ!!!
    Почему как только пишут про киоск, то сразу браузеры берут? Я хочу любое своё приложение, скрипт с выводом виджетов выводить на экран. Как это сделать?

    Ответить