Як налаштувати режим «кіоск» у Raspbian?


10

Я хочу налаштувати свій Raspberry Pi у своєрідний режим "кіоску", де він завантажується в єдине повноекранне додаток. Я знаю свій шлях навколо командного рядка, але я новачок, коли справа стосується налаштування поведінки завантаження Linux. Я будую додаток і планую додати можливість безпечного відключення Raspberry Pi. Що мені потрібно зробити, щоб налаштувати свій Raspberry Pi лише на один додаток?

Оновлення: Щоб зрозуміти, я не хочу відкривати веб-сторінку . Я також не хочу змінювати операційні системи. Я хочу дізнатися, як налаштувати мою операційну систему (Raspbian) для запуску власної програми замість X (хоча моя програма може залежати від рендерингу X у фоновому режимі).

Відповіді:


7

Я ніколи цього не пробував, але оскільки, здається, ти все ще шукаєш і не отримав відповіді майже через місяць, я скажу тобі, з чого я б почав.

Це як давнє, але загальний контур здається здоровим. Вам не доведеться робити все точно так само. Він орієнтується на використання веб-браузера як центрального, але це тут неактуально (тобто, відпочиньте, це не інший "веб-кіоск").

Він посилається на те /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 (вони пов'язані, але не однакові).


Якщо Raspbian використовує, /etc/inittabале більшість інших більше не робить, що вони використовують замість цього?
Андрій

Тож якщо я хочу дозволити доступ до ssh, коли моя програма працює на передньому плані, мені потрібно переконатися, що мій .xinitrcсценарій працює після цього, правда?
Андрій

Debian використовує систему init "sysV" і inittabє частиною всього цього. Інші демони загальний ініціалізацій тепер systemdі upstart.
золотинки

WRT ваш додаток працює на передньому плані, це лише тому, що (sysV) initчекає повернення цих науковців до того, як він запустить наступний. Отже, як правило, у скрипті init, якщо ви запускаєте постійну послугу, ви надаєте фон (ака. Fork) &. Потім сценарій сам виходить, але "фоновий" процес триває. "Backgrounding" просто стосується ланцюга виконання, а не чогось із того, що з’являється на екрані - ви можете тло виклику X ( lightdmмає бути фоновим) ... Я щось про це відредагую.
золотинки

WRT ssh, sshслужба (пов'язана в /etc/rc[N].d) повинна запускатися перед вашою, так що вона буде працювати ("у фоновому режимі") для відповіді на з'єднання. Це все ще багатозадачна система;)
золотники

2

Подивіться на цей проект "Digital Signage". Він завантажується до GUI, а потім відкриває браузер на базі HTML5. Я ще не пробував, але хочу. Можливо, ви можете поставити свою програму замість браузера для завантаження на весь екран.

http://www.binaryemotions.com/raspberry-digital-signage/


Дякуємо за вашу відповідь, але це схоже на заміну Raspbian, який налаштований для відображення браузера. Я хотів би дізнатися, як налаштувати Raspbian, як я хочу.
Андрій

У вашому питанні про Raspbian немає жодної згадки. Спробуйте це. pikiosk.tumblr.com/post/38721623944/…
gurcanozturk

0

Згаданий Raspberry Digital Signage - це операційна система, яка відображає перегляд у повноекранному режимі, обмежений веб-сторінкою або списком відтворення слайд-шоу / відео, не визначеним способом уникнути, а перезавантажити машину.

Фактично він може відображати як веб-перегляд (відображення сторінок HTML / HTML5), так і мультимедійне (слайд-шоу зображень та відеоплеєр). У веб-перегляді є три різні можливі підпогляди: Firefox, Chromium та Midori (з підтримкою Gnash).

Досвід Chrome і Midori є функцією версії 2.0.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.