Wie richte ich den "Kiosk" -Modus in Raspbian ein?

10

Ich möchte meinen Raspberry Pi in einer Art "Kiosk" -Modus einrichten, in dem er in einer einzelnen Vollbildanwendung gestartet wird. Ich kenne mich in der Befehlszeile aus, bin aber ein Anfänger, wenn es darum geht, das Linux-Startverhalten anzupassen. Ich erstelle die Anwendung und plane, die Möglichkeit hinzuzufügen, den Raspberry Pi sicher herunterzufahren. Was muss ich tun, um meinen Raspberry Pi so zu konfigurieren, dass nur diese eine Anwendung ausgeführt wird?

Update: Um klar zu sein, möchte ich keine Webseite öffnen . Ich möchte auch nicht das Betriebssystem ändern. Ich möchte lernen, wie ich mein Betriebssystem (Raspbian) so konfiguriere, dass meine eigene Anwendung anstelle von X gestartet wird (obwohl meine Anwendung möglicherweise vom X-Rendering im Hintergrund abhängt).

Andrew
quelle

Antworten:

7

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].dVerzeichnissen waren - die den 7 Runlevels entsprechen. Sie möchten entweder eine verwenden, die das grafische Login ( lightdm) nicht startet, oder diese lightdmvon 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 fvwmimmer noch großartig ist, denken Sie besonders an solche Dinge, denken Sie also daran, wenn Sie dies tun), denn .xinitrcso 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-deletesie 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.localstattdessen 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/kioskaus diesem Abschnitt . Beachten Sie, dass dies nur eine Zeile ist, die auf das .xinitrcim 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 startxanstelle 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, shutdownwird 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). shutdownGeben 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 .xinitrcsind ä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).

Goldlöckchen
quelle
Wenn Raspbian verwendet /etc/inittab, die meisten anderen jedoch nicht mehr, was verwenden sie stattdessen?
Andrew
Wenn ich also den SSH-Zugriff zulassen möchte, während meine App im Vordergrund ausgeführt wird, muss ich sicherstellen, dass mein .xinitrcSkript danach ausgeführt wird. Richtig?
Andrew
Debian verwendet ein "sysV" -ish-Init-System und inittabist Teil all dessen. Häufigere Init-Dämonen sind jetzt systemdund upstart.
Goldlöckchen
Wenn Ihre App im Vordergrund ausgeführt wird, liegt dies nur daran, dass (sysV) darauf initwartet, dass diese Skripte zurückgegeben werden, bevor das nächste gestartet wird. Wenn Sie also in einem Init-Skript einen dauerhaften Dienst starten, wird dieser über (auch als "Fork" bezeichnet) normalerweise über &. Dann wird das Skript selbst beendet, aber der "Hintergrund" -Prozess wird fortgesetzt. "Hintergrund" bezieht sich nur auf eine Ausführungskette, nicht auf etwas, was auf dem Bildschirm angezeigt wird - Sie könnten Ihren X-Aufruf lightdmals Hintergrund verwenden ( muss im Hintergrund sein) ... Ich werde etwas dazu bearbeiten.
Goldlöckchen
WRT ssh, der sshDienst (verlinkt in /etc/rc[N].d) sollte vor Ihrem starten, damit er ausgeführt wird ("im Hintergrund"), um Verbindungen zu beantworten. Es ist immer noch ein Multitasking-System;)
Goldlöckchen
2

Schauen Sie sich dieses 'Digital Signage'-Projekt an. Es startet über die GUI und öffnet dann einen HTML5-basierten Browser. Ich bin noch nicht versucht, aber ich will. Vielleicht können Sie Ihre Anwendung anstelle des Browsers verwenden, um den Vollbildmodus zu starten.

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

gurcanozturk
quelle
Vielen Dank für Ihre Antwort, aber das scheint ein Ersatz für Raspbian zu sein, das für die Anzeige eines Browsers konfiguriert ist. Ich möchte die Schritte lernen, um Raspbian so zu konfigurieren, wie ich es möchte.
Andrew
In Ihrer Frage wird Raspbian nicht erwähnt. Versuche dies. pikiosk.tumblr.com/post/38721623944/…
gurcanozturk
0

Erwähnt Raspberry Digital Signage ist ein Betriebssystem, das eine Vollbildansicht anzeigt, die auf die angegebene Webseite oder Diashow / Video-Wiedergabeliste beschränkt ist, ohne dass eine Flucht möglich ist, sondern der Computer neu gestartet wird.

Es kann tatsächlich sowohl eine Webansicht (HTML / HTML5-Seitenanzeige) als auch eine Multimediaansicht (Diashow und Videoplayer) anzeigen. Die Webansicht verfügt über drei verschiedene mögliche Unteransichten: Firefox, Chromium und Midori (mit Gnash-Unterstützung).

Chrome- und Midori-Erlebnisse sind in Version 2.0 enthalten.

Binäre Emotionen
quelle