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