Ich habe das noch nie versucht, aber da Sie anscheinend immer noch suchen und seit fast einem Monat keine Antwort mehr erhalten haben, sage ich Ihnen, wo ich anfangen würde.
Diese Anleitung ist uralt, aber der allgemeine Umriss scheint solide zu sein. Sie müssen nicht alles genau gleich machen. Es konzentriert sich zwar auf die Verwendung eines Webbrowsers als Herzstück, aber das ist hier meistens irrelevant (dh entspannen Sie sich, es ist kein weiterer "Web-Kiosk").
Es bezieht sich darauf /etc/inittab
, was die meisten Linux-Distributionen nicht mehr verwenden, aber es kommt vor, dass Debian Wheezy (Raspbian) dies tut. Die Idee ist, dass Sie Runlevel 4 als Kiosk verwenden und es zum Standard machen. Sie können das tun oder einfach das verwenden, was derzeit die Standardeinstellung ist (2 oder 3, glaube ich). Der Raspbian, den ich gerade laufen lasse, wurde von mir geändert, daher bin ich mir nicht sicher, was die ursprünglichen Unterschiede zwischen den /etc/rc[N].d
Verzeichnissen waren - die den 7 Runlevels entsprechen. Sie möchten entweder eine verwenden, die das grafische Login ( lightdm
) nicht startet, oder diese lightdm
von dieser Runlevel entfernen . Sie können so etwas genauso gut richtig machen (siehe man update-rc.d
).
Befolgen Sie dann diesen Teil der Anleitung, um ein eigenes Boot-Service-Skript (auch bekannt als init) zu erstellen, mit dem Sie X und Ihre App ohne Anmeldung starten können. Mach es aber nicht ganz so; Sie müssen sich an Debian anpassen, also sehen Sie /etc/init.d/README
. Außerdem müssen Sie überhaupt keinen Fenstermanager verwenden (obwohl dies fvwm
immer noch großartig ist, denken Sie besonders an solche Dinge, denken Sie also daran, wenn Sie dies tun), denn .xinitrc
so etwas:
#!/bin/sh
myApp
Führt nur Ihre App in einfachem X aus - was sehr, sehr einfach ist: keine Menüs, keine Titelleisten, keine Symbolleisten usw. oder eine Möglichkeit für den Benutzer, eine andere Anwendung zu starten oder eine Shell zu erhalten. Es bietet nur einen Cursor.
Ein Problem dabei ist, dass, wenn Sie vom Booten direkt zu einem Desktop wechseln, dies ein Superuser-Desktop ist. Tatsächlich haben X-Instanzen immer eine UID von 0, aber die Anwendungen, die von xinitrc ausgeführt werden, werden als der Benutzer ausgeführt, der X gestartet hat. In diesem Fall wurde X von init gestartet, sodass der Benutzer root ist (obwohl technisch root nicht angemeldet ist ). Daher wäre das obige Xinitrc besser mit:
su -c myApp pi
Dadurch wird Ihre App stattdessen als pi-Benutzer ausgeführt (der auch technisch nicht angemeldet ist).
Da technisch gesehen niemand angemeldet ist, werden ctrl-alt-delete
sie nur an einer Anmeldeaufforderung zurückgelassen , selbst wenn der Kioskbenutzer X tötet (z. B. über ). Die Anleitung geht darüber hinaus, sodass das Service-Init-Skript X (siehe HINWEIS unten) im Vordergrund startet, sodass das Service-Skript beim Beenden fortgesetzt und ausgeführt wird shutdown -r now
.
Denken Sie daran, dass jemand, der physischen Zugriff auf eine (normale) Maschine hat, die von Ihnen implementierte Sicherheit immer umgehen kann. Alles, was Sie hier wirklich versuchen, ist, es nicht zu einfach zu machen und schlimme Unfälle zu vermeiden.
Denken Sie auch daran, dass, da Ihr Startdienst dies im Vordergrund ausführt, keine anderen Dienste danach ausgeführt werden. Stellen Sie daher sicher, dass es sich um den absolut letzten handelt. Sehr wichtig! Sie können /etc/rc.local
stattdessen auch verwenden, da dies normalerweise garantiert der letzte ist;) Das spart Ihnen Zeit.
HINWEIS: Tatsächlich ist es in der Anleitung ein anderes Skript /root/kiosk
aus diesem Abschnitt . Beachten Sie, dass dies nur eine Zeile ist, die auf das .xinitrc
im obigen Abschnitt (3.4) gezeigte Skript verweist . Fügen Sie einfach eine solche Zeile direkt in Ihr Boot-Skript ein. Ihr (vorläufiger) Xinitrc wird, wie bereits beschrieben, viel einfacher.
Eine Alternative, um mit init ...
Der Zweck, den X-Aufruf im Vordergrund zu lassen, besteht lediglich darin, die Ausführung des Init-Skripts zu blockieren, bis X beendet wird, sodass die nächste Zeile in script ( shutdown
) ausgeführt wird:
startx
shutdown -r now
Hier habe ich startx
anstelle der How-to- /usr/X11R6/bin/xinit /root/kiosk.xinitrc ....
Linie verwendet. Dies wird verwendet $HOME/.xinitrc
, und $ HOME wäre /root
. Ziemlich sicher, dass startx auch ein blockierender Aufruf ist. Bis X beendet wird, shutdown
wird es nicht ausgeführt. Wenn Sie stattdessen Folgendes getan haben:
startx &
shutdown -r now
X würde laufen, aber dann würde auch das Herunterfahren sofort laufen (offensichtlich sinnlos).
Sie müssen diesen Trick nicht anwenden, wenn Sie nicht möchten, dass das Herunterfahren erfolgt - wie bereits erwähnt, erhält der Benutzer lediglich eine Anmeldeaufforderung. Aber es scheint eine nützliche Idee zu sein, da Sie sie dann einfach ausschalten können ctrl-alt-backspace
. Eine andere Idee, wenn Ihre App geschlossen werden kann, wäre, sie startx &
im Init-Skript zu verwenden, das sie als Hintergrund verwendet und ermöglicht, dass Init normal fortgesetzt wird (dies ist in Ordnung; X wird weiterhin ausgeführt und hat die Kontrolle über die Anzeige - "Hintergrund" ist a vielleicht ein verwirrender Begriff). shutdown
Geben Sie statt im Init-Skript stattdessen xinitrc ein:
#!/bin/sh
#/root/.xinitrc
su -c myApp pi
shutdown -r now
Gleicher Trick, anderer Ort. Wenn jemand schließt myApp
, erfolgt das Herunterfahren (aber wenn er X tötet, wird dies nicht der Fall sein). Man könnte es auch in beiden Richtungen, aber ich wirklich wie diese besser , weil es bedeutet , dass Sie können X verlassen und eine Anmeldung erhalten, die nützlich manchmal sein kann, und Sie können auch leicht drehen Sie das System aus der GUI.
Keine Hintergrund ( &
) myApp in der .xinitrc, auch wenn danach kein Herunterfahren erfolgt, denn wenn die .xinitrc abgeschlossen ist, wird X beendet;) Der letzte Aufruf dort muss im Vordergrund bestehen bleiben (normalerweise ist es eine DE oder ein Fenster Manager).
Init Skripte und .xinitrc
sind ähnliche Konzepte. Einer wird von ausgeführt init
, nämlich Prozess 1 unter Linux (dies ist der einzige Prozess, der vom Kernel gestartet wird). Der andere wird vom X-Server ausgeführt. Beachten Sie, dass es .xinitrc-Dateien und einen xinitrc-Befehl gibt (sie sind verwandt, aber nicht identisch).
/etc/inittab
, die meisten anderen jedoch nicht mehr, was verwenden sie stattdessen?