Я ніколи цього не пробував, але оскільки, здається, ти все ще шукаєш і не отримав відповіді майже через місяць, я скажу тобі, з чого я б почав.
Це як давнє, але загальний контур здається здоровим. Вам не доведеться робити все точно так само. Він орієнтується на використання веб-браузера як центрального, але це тут неактуально (тобто, відпочиньте, це не інший "веб-кіоск").
Він посилається на те /etc/inittab
, що більшість дистрибутивів Linux більше не використовує, але так трапляється, що робить debian wheezy (raspbian). Ідея полягає в тому, що ви будете використовувати runlevel 4 як кіоск і зробити його за замовчуванням. Ви можете це зробити або просто використовувати все, що зараз є за замовчуванням (я думаю, 2 або 3). Розпбій, який я зараз запускаю, був змінений мною, тому я не впевнений, які оригінальні відмінності були між /etc/rc[N].d
каталогами - які відповідають 7 рівнів. Ви хочете або використовувати той, який не запускає графічний вхід ( lightdm
), або інший, щоб видалити lightdm
з цього рівня запуску. Ви також можете зробити таку річ правильним способом (див. man update-rc.d
).
Потім, дотримуючись цієї частини інструкції, ви хочете створити свій власний сценарій завантаження (ака. Init) для запуску X та програми без входу. Однак не роби це зовсім так; вам потрібно відповідати debian, так що див /etc/init.d/README
. Крім того, вам зовсім не доведеться використовувати вікно-менеджер (хоча fvwm
це все-таки чудово, міркує особливо для подібних речей, тому майте на увазі, якщо це зробити), тому що .xinitrc
подібне:
#!/bin/sh
myApp
Запускається лише ваш додаток у звичайному X - що дуже просто: відсутні меню, панелі заголовків, панелі інструментів тощо, або спосіб запустити інший додаток або отримати оболонку. Він просто надає курсор.
Проблема з цим полягає в тому, що якщо ви переходите прямо на робочий стіл із завантаження, це буде робочий стіл суперпользователя. Насправді, в X примірниках завжди є uid 0, але програми запущені з xinitrc run як користувач, який запустив X - у цьому випадку X був запущений init, тому користувач буде root (хоча технічно корінь не входить у систему) ). Отже, вищезгаданий xinitrc буде краще:
su -c myApp pi
Який буде працювати ваш додаток як пі-користувач (який також технічно не ввійшов).
Оскільки технічно ніхто не входить у систему, навіть якщо користувач кіоску вбиває X (наприклад, через ctrl-alt-delete
), вони просто залишаться під запитом для входу. Технічне завдання виходить за рамки такого, що сценарій init служби починається з X (див. ПРИМІТКА нижче) на передньому плані, так що після його завершення сервісний скрипт продовжується і запускається shutdown -r now
.
Пам’ятайте, що той, хто має фізичний доступ до (звичайної) машини, завжди може обійти будь-яку безпеку, яку ви застосовуєте, тому все, що ви насправді намагаєтесь зробити тут, не зробити це занадто просто і не допустити неприємних аварій.
Також пам’ятайте, що оскільки ваша завантажувальна служба буде робити це на першому плані, жодні інші служби не працюватимуть після неї , тому переконайтеся, що вона є абсолютною останньою. Дуже важливо! Насправді ви можете використовувати це /etc/rc.local
замість цього, оскільки це, як правило, гарантовано останнє;) Це допоможе вам заощадити час.
ПРИМІТКА. Насправді, як це інший сценарій /root/kiosk
, з цього розділу . Зауважте, що це лише один рядок, який посилається на .xinitrc
сценарій, показаний у розділі вище (3.4). Просто введіть такий рядок у свій сценарій завантаження безпосередньо. Ваш (попередній) xinitrc, як уже було описано, буде набагато простішим.
Альтернатива залишатися на передньому плані з init ...
Мета залишити виклик X на перший план - просто заблокувати виконання сценарію init, поки X не завершиться, щоб наступний рядок у скрипті ( shutdown
) запустився:
startx
shutdown -r now
Тут я використав startx
замість лінії "як" /usr/X11R6/bin/xinit /root/kiosk.xinitrc ....
. Це використовуватиме $HOME/.xinitrc
, і $ HOME було б /root
. Досить впевнений, що startx - це також блокуючий дзвінок, тому, поки X не вийде, shutdown
не запуститься. Якщо замість цього ви зробили це:
startx &
shutdown -r now
X запустився б, але тоді вимкнення також запустилося, одразу (очевидно, безглуздо).
Вам не доведеться використовувати цей трюк, якщо ви не переймаєтесь тим, як закрити роботу, - як згадувалося, користувач просто запише вхід. Але це здається корисною ідеєю, оскільки тоді її можна просто вимкнути ctrl-alt-backspace
. Іншою ідеєю, якщо ваш додаток є закритим, було б використовувати startx &
в скрипті init, який його фоном і дозволяє init нормально тривати (це нормально; X все ще буде працювати і мати контроль над дисплеєм - "фон" - це можливо, заплутаний термін). Замість скрипта init shutdown
замість xinitrc поставте:
#!/bin/sh
#/root/.xinitrc
su -c myApp pi
shutdown -r now
Та сама хитрість, інше місце. Тепер, коли хтось закриється myApp
, відключення відбудеться (але якщо вони вб'ють X, це не буде). Ви також можете зробити це обома способами, але мені насправді це подобається краще, оскільки це означає, що ви можете вийти з X та отримати логін, що може бути корисним іноді, а також ви можете легко вимкнути систему з графічного інтерфейсу.
Не підтримуйте &
myApp в .xinitrc, навіть якщо після нього не відбувається відключення, тому що, коли .xinitrc виконано X, завершується;) Останній дзвінок там повинен зберігатися на передньому плані (зазвичай це DE або вікно менеджер).
Ініціальні сценарії та .xinitrc
подібні поняття. Один управляється init
, це процес 1 на Linux (це єдиний процес, запущений ядром). Інший працює X-сервером. Зауважте, що є .xinitrc файли та команда xinitrc (вони пов'язані, але не однакові).
/etc/inittab
але більшість інших більше не робить, що вони використовують замість цього?