Come impostare la modalità "kiosk" in Raspbian?


10

Voglio configurare il mio Raspberry Pi in una sorta di modalità "kiosk" in cui si avvia in una singola applicazione a schermo intero. Conosco la riga di comando, ma sono un principiante quando si tratta di personalizzare il comportamento di avvio di Linux. Sto sviluppando l'applicazione e sto pianificando di aggiungere la possibilità di arrestare in sicurezza Raspberry Pi. Cosa devo fare per configurare il mio Raspberry Pi per eseguire solo questa applicazione?

Aggiornamento: per essere chiari, non voglio aprire una pagina web . Inoltre, non voglio cambiare i sistemi operativi. Voglio imparare come configurare il mio sistema operativo (Raspbian) per avviare la mia applicazione anziché X (anche se la mia applicazione potrebbe dipendere dal rendering X in background).

Risposte:


7

Non l'ho mai provato, ma dato che sembra che tu stia ancora cercando e non abbia ricevuto risposta da quasi un mese, ti dirò da dove comincerei.

Questo how-to è antico, ma il profilo generale sembra valido. Non devi fare tutto esattamente lo stesso. Si concentra sull'uso di un browser Web come elemento centrale, ma ciò è per lo più irrilevante qui (vale a dire, rilassati, non è un altro "web-kiosk").

Si riferisce a ciò /etc/inittabche la maggior parte delle distribuzioni di Linux non usano più, ma succede così che debian wheezy (raspbian) lo fa. L'idea è che userete runlevel 4 come chiosco e renderlo predefinito. Puoi farlo o semplicemente usare qualunque sia l'impostazione predefinita (2 o 3, credo). La raspbian che ho in esecuzione in questo momento è stata modificata da me, quindi non sono sicuro di quali fossero le differenze originali tra le /etc/rc[N].ddirectory, che corrispondono ai 7 runlevel. Si desidera utilizzare uno che non avvia il login grafico ( lightdm) oppure rimuovere lightdmda quel runlevel. Potresti anche fare questo tipo di cose nel modo giusto (vedi man update-rc.d).

Quindi, seguendo questa parte del tutorial, vuoi creare il tuo script del servizio di avvio (aka. Init) per avviare X e la tua app senza un login. Non farlo in questo modo, tuttavia; devi conformarti a debian, quindi vedi /etc/init.d/README. Inoltre, non è necessario utilizzare un gestore di finestre (anche se fvwmè comunque ottimo, penso in particolare per questo tipo di cose, quindi tienilo a mente se lo fai), perché è .xinitrccosì:

#!/bin/sh

myApp

Eseguirà solo la tua app in X semplice, il che è molto semplice: nessun menu, nessuna barra del titolo, nessuna barra degli strumenti, ecc. O un modo per l'utente di avviare un'altra applicazione o ottenere una shell. Fornisce solo un cursore.

Un problema con questo è che se vai direttamente su un desktop dal boot, sarà un desktop superutente. In realtà, le istanze X hanno sempre un uid di 0, ma le applicazioni eseguite da xinitrc vengono eseguite come l'utente che ha avviato X - in questo caso X è stato avviato da init, quindi l'utente sarà root (anche se tecnicamente root non è connesso ). Quindi lo xinitrc sopra sarebbe meglio con:

su -c myApp pi

Che eseguirà invece la tua app come utente pi (che non è anche tecnicamente connesso).

Dal momento che tecnicamente nessuno ha effettuato l'accesso, anche se l'utente del chiosco uccide X (ad es. Via ctrl-alt-delete), verrà lasciato al prompt di accesso. Il how-to va oltre quello in modo tale che lo script di init di servizio avvii X (vedi NOTA sotto) in primo piano in modo tale che quando esce, lo script di servizio continua e viene eseguito shutdown -r now.

Ricorda che qualcuno che ha accesso fisico a una macchina (normale) può sempre aggirare qualunque sicurezza tu abbia implementato, quindi tutto ciò che stai davvero cercando di fare qui non è renderlo troppo facile e prevenire spiacevoli incidenti.

Ricorda inoltre che dal momento che il tuo servizio di avvio lo farà in primo piano, nessun altro servizio verrà eseguito dopo di esso , quindi assicurati che sia l'ultimo in assoluto. Molto importante! In effetti, potresti /etc/rc.localinvece usarlo , dato che normalmente è garantito che sia l'ultimo;) Ciò ti farà risparmiare un po 'di tempo.

NOTA: In realtà nel how-to è un altro script /root/kiosk, da questa sezione . Si noti che è solo una riga che fa riferimento allo .xinitrcscript mostrato nella sezione precedente (3.4). Basta inserire una linea come quella direttamente nello script di avvio. Il tuo (preliminare) xinitrc, come già descritto, sarà molto più semplice.


Un'alternativa al rimanere in primo piano con init ...

Lo scopo di lasciare in primo piano l'invocazione X è solo quello di bloccare l'esecuzione dello script init fino a quando X non esce, in modo che la riga successiva nello script ( shutdown) verrà eseguita:

startx
shutdown -r now

Qui ho usato al startxposto della /usr/X11R6/bin/xinit /root/kiosk.xinitrc ....linea di istruzioni. Questo userà $HOME/.xinitrc, e $ HOME sarebbe /root. Abbastanza sicuro startx è anche una chiamata bloccante, quindi fino a quando X esce, shutdownnon verrà eseguito. Se invece hai fatto questo:

startx &
shutdown -r now

X avrebbe funzionato, ma poi anche l'arresto avrebbe funzionato subito (ovviamente inutile).

Non devi usare questo trucco se non ti interessa che arrivi l'arresto - come detto, l'utente finirà con un prompt di accesso. Ma sembra un'idea utile, da allora puoi semplicemente disattivarlo ctrl-alt-backspace. Un'altra idea, se la tua app è chiudibile, sarebbe quella di utilizzare startx &lo script init, che lo mette in background e consente a init di continuare normalmente (va bene; X sarà ancora in esecuzione e avrà il controllo del display - "backgrounded" è un forse un termine confuso). Invece che nello script init, inserisci shutdowninvece xinitrc:

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

su -c myApp pi
shutdown -r now

Stesso trucco, posto diverso. Ora quando qualcuno chiude myApp, si verificherà l'arresto (ma se uccidono X, non lo farà). Potresti anche farlo in entrambi i modi, ma in realtà mi piace di più perché significa che puoi uscire da X e ottenere un login, che a volte può essere utile, e puoi anche spegnere facilmente il sistema dalla GUI.

Non mettere in background ( &) myApp in .xinitrc anche se dopo non c'è alcun arresto, perché quando Xxitritr viene terminato X esce;) L'ultima chiamata lì deve persistere in primo piano (normalmente, è un DE o una finestra manager).

Gli script Init e .xinitrcsono concetti simili. Uno è gestito da init, che è il processo 1 su Linux (è l'unico processo avviato dal kernel). L'altro è gestito dal server X. Nota che ci sono file .xinitrc e un comando xinitrc (sono correlati ma non uguali).


Se Raspbian usa, /etc/inittabma molti altri no, cosa usano invece?
Andrew,

Quindi, se voglio consentire l'accesso ssh mentre la mia app è in esecuzione in primo piano, devo assicurarmi che il mio .xinitrcscript venga eseguito dopo, giusto?
Andrew,

Debian usa un sistema init "sysV" ed inittabè parte di tutto ciò. I demoni init più comuni ora sono systemde upstart.
riccioli d'oro

WRT la tua app in esecuzione in primo piano, questo è solo perché (sysV) initattende che questi script tornino prima che inizi il successivo. Quindi normalmente in uno script di init, se si avvia un servizio persistente, lo si fa in background (alias fork) tramite &. Quindi lo script stesso viene chiuso, ma il processo "in background" continua. "Backgrounding" si riferisce solo a una catena di esecuzione, non a qualcosa di ciò che appare sullo schermo: potresti creare lo sfondo della tua invocazione X ( lightdmdeve essere in background) ... Modificherò qualcosa al riguardo.
riccioli d'oro

WRT ssh, il sshservizio (collegato /etc/rc[N].d) dovrebbe iniziare prima del tuo, quindi sarà in esecuzione ("in background") per rispondere alle connessioni. È ancora un sistema multi-tasking;)
Riccioli d'oro

2

Guarda questo progetto "Digital Signage". Si avvia alla GUI, quindi apre un browser basato su HTML5. Non sono ancora stato provato ma lo voglio. Forse puoi mettere la tua applicazione invece del browser per l'avvio a schermo intero.

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


Grazie per la risposta, ma sembra un sostituto di Raspbian configurato per visualizzare un browser. Vorrei imparare i passaggi per configurare Raspbian come voglio.
Andrew,

Non ci sono riferimenti a Raspbian nella tua domanda. Prova questo. pikiosk.tumblr.com/post/38721623944/…
gurcanozturk

0

Il Digital Signage di Raspberry menzionato è un sistema operativo che visualizza una vista a schermo intero limitata alla pagina Web o alla playlist di video / presentazioni specificata senza alcun modo per fuggire ma riavviare la macchina.

Può infatti visualizzare sia una visualizzazione Web (visualizzazione di pagine HTML / HTML5) sia una visualizzazione multimediale (presentazione di immagini e lettore video). La visualizzazione Web ha tre diverse visualizzazioni secondarie possibili: Firefox, Chromium e Midori (con supporto Gnash).

Le esperienze di Chrome e Midori sono caratteristiche della versione 2.0.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.