среда, января 23, 2008

Настройка Linux для kiosk-mode

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

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

Где это нужно - думаю, понятно. Устройства вроде банкоматов, компьютеры общественного пользования, компьютерные клубы. Иногда возникает желание такое сделать дома для компьютерно неграмотной родни - чтобы ничего не напортачили.

Конечно, для надежности нужны некоторые действия с аппаратной частью. Приводы CD/DVD (и floppy) убираются, разъемы usb/firewire на передней панели отключаются от материнки, кнопки reset и power также отключаются от материнки. Системник опломбируется. Только это все надо делать _после_ возни с программной частью - ато ребут в случае чего будет проблемой ;)

С программной частью так. Для автовхода в систему используем GDM (можно kdm/xdm, но они хуже настраиваются) - в настройках (gksudo gdmsetup) включаем Auto login или Timed login, на усмотрение. На вкладке "Пользователи" разрешаем вход только нужным пользователям (чаще всего - только одному; прав у него, конечно, самый минимум). На вкладке "Локальный вход" снимаем галочку "Показывать меню действий". На вкладке "Общие" включаем галочку "Перезапускать XServer..." и указываем нужный сеанс по умолчанию (мы его сейчас создадим, пока что выберите там что угодно).

Создаем файл /usr/share/xsessions/kiosk.desktop (имя любое):


[Desktop Entry]
Encoding=UTF-8
Name=Kiosk mode
Comment=Kiosk mode
Exec=/usr/local/bin/kiosk-session
Type=Application


Теперь опять запускаем gdmsetup и указываем Kiosk mode в качестве сеанса по умолчанию.
/usr/local/bin/kiosk-session будет такой:


#!/bin/bash

# Это приложение не должно позволять закрыть его
самое-нужное-приложение & xpid=$!
gnome-settings-daemon & # Это если хотим использовать настройки Gnome
metacity & # Или какой вам оконный менеджер больше нравится
чего-еще-хотим-запускать-автоматом &
# Ждем завершения основного приложения, т.е. предположительно до бесконечности.
wait $xpid


(не забудьте sudo chmod +x /usr/local/bin/kiosk-session).

Теперь правим /etc/X11/xorg.conf:


Section "ServerFlags"
Option "DontZap" "True" # Запрещаем Ctrl-Alt-Backspace
Option "DontVTSwitch" "True" # Запрещаем Ctrl-Alt-F#
EndSection


Ставим openssh-server, убеждаемся что он будет стартовать автоматом и что в sshd_config стоит "X11Forwarding yes". Если нужен будет доступ по vnc, ставим x11vnc и прописываем в автозапуск (в kiosk-session).

Ну вроде всё, ребутаемся и наблюдаем результаты своих трудов ;)
Вся дальнейшая настройка - по ssh.

PS. Выбору оконного менеджера стоит уделить некоторое внимание. Дело в том, что многие WM, в том числе и из самых "простых" и "легких" (icewm, ion3, ...) имеют встроенную "командную строку", позволяющую запускать что угодно. Так что надо либо отключить это в настройках, либо выбрать WM без такой возможности (тот же metacity; Alt-F2 в Gnome обеспечивает не он, а gnome-panel).