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].d
directorios, 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 lightdm
de 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 fvwm
sigue siendo genial, creo que es particularmente para este tipo de cosas, así que tenga en cuenta si lo hace), porque .xinitrc
así:
#!/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 .xinitrc
script 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 shutdown
se ejecute la siguiente línea en el guión ( ):
startx
shutdown -r now
Aquí he usado en startx
lugar 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, shutdown
no 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, shutdown
ingrese 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 .xinitrc
son 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).
/etc/inittab
pero la mayoría de los demás ya no, ¿qué usan en su lugar?