¿Cómo configurar el modo "kiosco" en Raspbian?

10

Quiero configurar mi Raspberry Pi en una especie de modo "kiosco" donde se inicia en una sola aplicación de pantalla completa. Conozco la línea de comando, pero soy un novato cuando se trata de personalizar el comportamiento de arranque de Linux. Estoy creando la aplicación y estoy planeando agregar la capacidad de apagar con seguridad la Raspberry Pi. ¿Qué debo hacer para configurar mi Raspberry Pi para que solo ejecute esta aplicación?

Actualización: para ser claros, no quiero abrir una página web . Tampoco quiero cambiar los sistemas operativos. Quiero aprender a configurar mi sistema operativo (Raspbian) para iniciar mi propia aplicación en lugar de X (aunque mi aplicación puede depender de la representación de X en segundo plano).

Andrés
fuente

Respuestas:

7

Nunca he intentado esto, pero como parece que todavía estás buscando y no has recibido una respuesta en casi un mes, te diré por dónde empezar.

Este tutorial es antiguo, pero el esquema general parece sólido. No tienes que hacer todo exactamente igual. Se enfoca en usar un navegador web como pieza central, pero eso es irrelevante aquí (es decir, relájese, no es otro "quiosco web").

Se refiere a /etc/inittab, que la mayoría de las distribuciones de Linux ya no usan, pero sucede que debian wheezy (raspbian) sí. La idea es utilizar el nivel de ejecución 4 como quiosco y convertirlo en el predeterminado. Puede hacer eso o simplemente usar lo que sea actualmente el predeterminado (2 o 3, creo). El raspbian que estoy ejecutando ahora ha sido modificado por mí, por lo que no estoy seguro de cuáles eran las diferencias originales entre los /etc/rc[N].ddirectorios, que corresponden a los 7 niveles de ejecución. Desea usar uno que no inicie el inicio de sesión gráfico ( lightdm) o bien eliminarlo lightdmde ese nivel de ejecución. También podría hacer ese tipo de cosas de la manera correcta (ver man update-rc.d).

Luego, siguiendo esta parte de los procedimientos, desea crear su propio script de servicio de arranque (también conocido como init) para iniciar X y su aplicación sin iniciar sesión. Sin embargo, no lo hagas de esa manera; necesita ajustarse a Debian, así que vea /etc/init.d/README. Además, no tiene que usar un administrador de ventanas (aunque fvwmsigue siendo genial, creo que es particularmente para este tipo de cosas, así que tenga en cuenta si lo hace), porque .xinitrcasí:

#!/bin/sh

myApp

Ejecutará solo su aplicación en X simple, que es muy simple: sin menús, sin barras de título, sin barras de herramientas, etc., o una forma para que el usuario inicie otra aplicación u obtenga un shell. Solo proporciona un cursor.

Un problema con esto es que si va directamente a un escritorio desde el arranque, será un escritorio de superusuario. En realidad, las instancias X siempre tienen un uid de 0, pero las aplicaciones que se ejecutan desde el xinitrc se ejecutan como el usuario que inició X, en este caso X fue iniciado por init, por lo que el usuario será root (aunque técnicamente root no está conectado ) Por lo tanto, el xinitrc anterior sería mejor con:

su -c myApp pi

Que ejecutará su aplicación como el usuario pi (que técnicamente tampoco está conectado).

Dado que técnicamente nadie ha iniciado sesión, incluso si el usuario del quiosco mata a X (por ejemplo, a través de ctrl-alt-delete), solo se le dejará en un mensaje de inicio de sesión. El procedimiento va más allá de tal manera que el script de inicio del servicio inicia X (vea la NOTA a continuación) en primer plano para que cuando salga, el script de servicio continúe y se ejecute shutdown -r now.

Recuerde que alguien que tiene acceso físico a una máquina (normal) siempre puede eludir cualquier seguridad que implemente, por lo que todo lo que realmente está tratando de hacer aquí es no hacerlo demasiado fácil y evitar accidentes desagradables.

También recuerde que dado que su servicio de arranque lo hará en primer plano, no se ejecutarán otros servicios después de él , así que asegúrese de que sea el último. ¡Muy importante! De hecho, podría usarlo /etc/rc.local, ya que normalmente se garantiza que será el último;) Eso le ahorrará algo de tiempo.

NOTA: En realidad, en el tutorial, es otro script /root/kiosk, de esta sección . Observe que esa es solo una línea que hace referencia al .xinitrcscript que se muestra en la sección anterior (3.4). Simplemente ponga una línea como esa en su script de arranque directamente. Su xinitrc (preliminar), como ya se describió, será mucho más simple.


Una alternativa para mantenerse en primer plano con init ...

El propósito de dejar la invocación X puesta en primer plano es solo bloquear la ejecución del guión de inicio hasta que X salga, para que shutdownse ejecute la siguiente línea en el guión ( ):

startx
shutdown -r now

Aquí he usado en startxlugar de la /usr/X11R6/bin/xinit /root/kiosk.xinitrc ....línea de instrucciones. Esto usará $HOME/.xinitrc, y $ HOME sería /root. Bastante seguro de que startx también es una llamada de bloqueo, por lo que hasta que X salga, shutdownno se ejecutará. Si en cambio hiciste esto:

startx &
shutdown -r now

X funcionaría, pero luego el apagado también funcionaría de inmediato (obviamente, no tiene sentido).

No tiene que usar ese truco si no le importa que se active el apagado, como se mencionó, el usuario simplemente terminará con un mensaje de inicio de sesión. Pero parece una idea útil, ya que puedes desactivarla ctrl-alt-backspace. Otra idea, si su aplicación se puede cerrar, sería usarla startx &en el guión de inicio, que la pone en segundo plano y permite que init continúe normalmente (esto está bien; X seguirá ejecutándose y tendrá el control de la pantalla - "fondo" es un quizás un término confuso). En lugar de en el script de inicio, shutdowningrese el xinitrc en su lugar:

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

su -c myApp pi
shutdown -r now

Mismo truco, lugar diferente. Ahora, cuando alguien cierra myApp, se producirá un apagado (pero si matan a X, no lo hará). También podría hacerlo en ambos sentidos, pero en realidad me gusta más este porque significa que puede salir de X y obtener un inicio de sesión, que a veces puede ser útil, y también puede apagar fácilmente el sistema desde la GUI.

No fondo ( &) myApp en el .xinitrc incluso si no hay apagado después de eso, porque cuando el .xinitrc se hace X sale;) La última llamada allí tiene que persistir en primer plano (normalmente, es un DE o ventana gerente).

Guiones de inicio y .xinitrcson conceptos similares. Uno es ejecutado por init, que es el proceso 1 en Linux (es el único proceso iniciado por el núcleo). El otro lo ejecuta el servidor X. Tenga en cuenta que hay archivos .xinitrc y un comando xinitrc (están relacionados pero no son lo mismo).

Ricitos de oro
fuente
Si Raspbian usa /etc/inittabpero la mayoría de los demás ya no, ¿qué usan en su lugar?
Andrew
Entonces, si quiero permitir el acceso ssh mientras mi aplicación se está ejecutando en primer plano, debo asegurarme de que mi .xinitrcscript se ejecute después de eso, ¿correcto?
Andrew
Debian utiliza un sistema de inicio "sysV", y inittabes parte de todo eso. Los demonios init más comunes ahora son systemdy upstart.
Ricitos de oro
WRT su aplicación ejecutándose en primer plano, esto es solo porque (sysV) initespera a que esos scipts regresen antes de que comience el siguiente. Entonces, normalmente en un script de inicio, si está iniciando un servicio persistente, lo transfiere en segundo plano (también conocido como fork) &. Luego, el script se cierra, pero el proceso "en segundo plano" continúa. "Fondo" solo se refiere a una cadena de ejecución, no a algo sobre lo que aparece en la pantalla: puede lightdmponer en segundo plano su invocación X ( debe tener un fondo) ... Editaré algo sobre esto.
Ricitos de oro
WRT ssh, el sshservicio (vinculado /etc/rc[N].d) debe comenzar antes que el suyo, por lo que se ejecutará ("en segundo plano") para responder las conexiones. Sigue siendo un sistema multitarea;)
Ricitos de oro
2

Mira este proyecto de 'Señalización digital'. Se inicia en la GUI y luego abre un navegador con tecnología HTML5. Todavía no lo he probado pero quiero hacerlo. Tal vez pueda poner su aplicación en lugar de navegador para iniciar la pantalla completa.

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

gurcanozturk
fuente
Gracias por su respuesta, pero parece un reemplazo para Raspbian que está configurado para mostrar un navegador. Me gustaría aprender los pasos para configurar Raspbian como quiero.
Andrew
No hay mención sobre Raspbian en su pregunta. Prueba esto. pikiosk.tumblr.com/post/38721623944/…
gurcanozturk
0

Raspberry Digital Signage mencionado es un sistema operativo que muestra una vista de pantalla completa restringida a la página web o la lista de reproducción de presentación de diapositivas / video especificada sin forma de escapar, pero reiniciando la máquina.

De hecho, puede mostrar una vista web (visualización de páginas HTML / HTML5) y una vista multimedia (presentación de imágenes y reproductor de video). La vista web tiene tres sub-vistas posibles diferentes: Firefox, Chromium y Midori (con soporte de Gnash).

Las experiencias de Chrome y Midori son características de la versión 2.0.

Emociones binarias
fuente