Как настроить режим «киоск» в Raspbian?

10

Я хочу настроить мой Raspberry Pi в своего рода режиме «киоска», где он загружается в одно полноэкранное приложение. Я знаю, как обходить командную строку, но я новичок в настройке поведения при загрузке Linux. Я создаю приложение и планирую добавить возможность безопасного отключения Raspberry Pi. Что мне нужно сделать, чтобы настроить мой Raspberry Pi только для запуска этого приложения?

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

Эндрю
источник

Ответы:

7

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

Это практическое руководство древнее, но общая схема кажется разумной. Вам не нужно делать все точно так же. Он фокусируется на использовании веб-браузера в качестве центрального элемента, но это в основном не имеет значения здесь (т.е. расслабьтесь, это не другой «веб-киоск»).

Это относится к тому /etc/inittab, что большинство дистрибутивов Linux больше не используют, но так получается, что Debian Wheezy (Rasbian) делает. Идея в том, что вы собираетесь использовать уровень запуска 4 в качестве киоска и установить его по умолчанию. Вы можете сделать это или просто использовать то, что в настоящее время используется по умолчанию (я думаю, 2 или 3). Распабиан, который я использую сейчас, был изменен мной, поэтому я не уверен, каковы были первоначальные различия между /etc/rc[N].dкаталогами - которые соответствуют 7 уровням выполнения. Вы хотите использовать тот, который не запускает графический логин ( lightdm), или удалить его lightdmс этого уровня запуска. С таким же успехом вы могли бы делать подобные вещи (см. man update-rc.d).

Затем, следуя этой части инструкции, вы хотите создать свой собственный скрипт загрузочной службы (aka. Init) для запуска X и вашего приложения без входа в систему. Однако не делайте этого так; вам нужно соответствовать Debian, так что смотрите /etc/init.d/README. Кроме того, вам вообще не нужно использовать оконный менеджер (хотя fvwmон все еще великолепен, особенно подходит для такого рода вещей, так что имейте это в виду), потому что примерно .xinitrcтак:

#!/bin/sh

myApp

Будет запускаться только ваше приложение в обычном X - что очень и очень просто: без меню, без заголовков, без панелей инструментов и т. Д., Или у пользователя нет возможности запустить другое приложение или получить оболочку. Он просто предоставляет курсор.

Проблема с этим заключается в том, что если вы перейдете прямо к рабочему столу из загрузки, это будет рабочий стол суперпользователя. На самом деле экземпляры X всегда имеют uid 0, но приложения, запускаемые из xinitrc, запускаются как пользователь, запустивший X - в этом случае X был запущен init, поэтому пользователь будет пользователем root (хотя технически root не вошел в систему). ). Следовательно, вышеупомянутый xinitrc будет лучше с:

su -c myApp pi

Который будет запускать ваше приложение как пользователь pi (который также технически не вошел в систему).

Поскольку технически никто не вошел в систему, даже если пользователь киоска убивает X (например, через ctrl-alt-delete), он просто останется в приглашении для входа. Практические рекомендации выходят за рамки того, что сценарий инициализации службы запускает X (см. ПРИМЕЧАНИЕ ниже) на переднем плане, чтобы при выходе из него сценарий службы продолжался и выполнялся shutdown -r now.

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

Также помните, что поскольку ваш загрузочный сервис будет делать это на переднем плане, никакие другие сервисы не будут работать после него , поэтому убедитесь, что это последний из них. Очень важно! На самом деле вы могли бы использовать /etc/rc.localвместо этого, так как это, как правило, гарантированно будет последним;) Это сэкономит вам некоторое время.

ПРИМЕЧАНИЕ. На самом деле, в руководстве, это другой сценарий /root/kioskиз этого раздела . Обратите внимание, что это всего лишь одна строка, которая ссылается на .xinitrcскрипт, показанный в разделе выше (3.4). Просто вставьте такую ​​строку в ваш загрузочный скрипт напрямую. Ваш (предварительный) xinitrc, как уже описано, будет намного проще.


Альтернатива Пребыванию Предусмотренного с init ...

Цель оставить вызов X предопределенным - просто заблокировать выполнение сценария инициализации до тех пор, пока не shutdownзавершится X, чтобы запустить следующую строку в сценарии ( ):

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 продолжать нормально (это нормально; X все еще будет работать и иметь контроль над дисплеем - "заземленный" является может быть, запутанный термин). Вместо сценария инициализации вставьте shutdownвместо этого xinitrc:

#!/bin/sh
#/root/.xinitrc

su -c myApp pi
shutdown -r now

Тот же трюк, другое место. Теперь, когда кто-то закрывается myApp, произойдет отключение (но если они убьют Х, этого не произойдет). Вы также можете сделать это обоими способами, но на самом деле мне больше нравится этот, потому что это означает, что вы можете выйти из X и получить логин, что иногда может быть полезно, а также вы можете легко отключить систему из GUI.

Не &выполняйте background ( ) myApp в .xinitrc, даже если после него нет выключения, потому что, когда .xinitrc завершен, X завершается;) Последний вызов должен сохраняться на переднем плане (обычно это DE или окно менеджер).

Сценарии инициализации и .xinitrcаналогичные понятия. Один запускается init, это процесс 1 в Linux (это единственный процесс, запускаемый ядром). Другой управляется X-сервером. Обратите внимание, что есть файлы .xinitrc и команда xinitrc (они связаны, но не совпадают).

Златовласка
источник
Если Распбиан использует, /etc/inittabно большинство других больше не использует, что они используют вместо этого?
Андрей
Поэтому, если я хочу разрешить доступ по SSH, когда мое приложение работает на переднем плане, я должен убедиться, что мой .xinitrcскрипт выполняется после этого, правильно?
Андрей
Debian использует систему инициализации sysV и inittabявляется частью всего этого. Более распространенные init-демоны сейчас есть systemdи upstart.
Златовласка
WRT Ваше приложение работает на переднем плане, это только потому, что (sysV) initожидает возврата этих сценариев, прежде чем запустить следующий. Поэтому, как правило, в скрипте инициализации, если вы запускаете постоянный сервис, вы выполняете его (aka. Fork) через него &. Затем сам сценарий завершается, но «фоновый» процесс продолжается. «Фоновое изображение» относится только к цепочке выполнения, а не к тому, что появляется на экране - вы можете использовать фоновый вызов X ( lightdmдолжен быть фоновым) ... Я кое-что отредактирую по этому поводу.
Златовласка
WRT ssh, sshслужба (связанная /etc/rc[N].d) должна запускаться раньше вашей, поэтому она будет работать («в фоновом режиме») для ответа на соединения. Это все еще многозадачная система;)
Златовласка
2

Посмотрите на этот проект «Digital Signage». Он загружается в GUI, затем открывает браузер на базе HTML5. Я еще не пробовал, но хочу. Может быть, вы можете поставить свое приложение вместо браузера для загрузки в полноэкранном режиме.

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

gurcanozturk
источник
Спасибо за ваш ответ, но это похоже на замену Raspbian, который настроен для отображения браузера. Я хотел бы узнать, как настроить Raspbian, как я хочу.
Андрей
Там нет упоминания о Raspbian в вашем вопросе. Попробуй это. pikiosk.tumblr.com/post/38721623944/…
gurcanozturk
0

Упомянутый Raspberry Digital Signage - это операционная система, которая отображает полноэкранный вид, ограниченный веб-страницей или указанным списком воспроизведения слайд-шоу / видео, без возможности выхода из системы, но перезагрузки машины.

Фактически он может отображать как веб-представление (отображение страниц HTML / HTML5), так и мультимедийное представление (показ слайдов изображений и видеоплеер). В веб-представлении есть три возможных под-представления: Firefox, Chromium и Midori (с поддержкой Gnash).

Chrome и Midori - это особенность версии 2.0.

Бинарные эмоции
источник