Я ніколи цього не пробував, але оскільки, здається, ти все ще шукаєш і не отримав відповіді майже через місяць, я скажу тобі, з чого я б почав.
Це як давнє, але загальний контур здається здоровим. Вам не доведеться робити все точно так само. Він орієнтується на використання веб-браузера як центрального, але це тут неактуально (тобто, відпочиньте, це не інший "веб-кіоск").
Він посилається на те /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але більшість інших більше не робить, що вони використовують замість цього?