Je n'ai jamais essayé cela, mais comme il semble que vous cherchiez toujours et n'avez pas obtenu de réponse depuis près d'un mois, je vais vous dire par où commencer.
Ce mode d'emploi est ancien, mais le schéma général semble solide. Vous n'avez pas à tout faire exactement de la même façon. Il se concentre sur l'utilisation d'un navigateur Web comme pièce maîtresse, mais cela n'est généralement pas pertinent ici (c.-à-d., Détendez-vous, ce n'est pas un autre "kiosque Web").
Il fait référence à /etc/inittab
ce que la plupart des distributions Linux n'utilisent plus, mais il se trouve que Debian Wheezy (raspbian) le fait. L'idée est que vous allez utiliser le niveau d'exécution 4 comme kiosque et en faire la valeur par défaut. Vous pouvez le faire ou simplement utiliser ce qui est actuellement la valeur par défaut (2 ou 3, je pense). Le raspbian que j'utilise actuellement a été modifié par moi, donc je ne sais pas quelles étaient les différences d'origine entre les /etc/rc[N].d
répertoires - qui correspondent aux 7 niveaux d'exécution. Vous voulez soit en utiliser un qui ne démarre pas la connexion graphique ( lightdm
), soit le supprimer lightdm
de ce niveau d'exécution. Vous pourriez aussi bien faire ce genre de chose dans le bon sens (voir man update-rc.d
).
Ensuite, en suivant cette partie de la procédure, vous souhaitez créer votre propre script de service de démarrage (aka. Init) pour démarrer X et votre application sans connexion. Cependant, ne le faites pas de cette façon; vous devez vous conformer à debian, alors voyez /etc/init.d/README
. De plus, vous n'avez pas du tout besoin d'utiliser un gestionnaire de fenêtres (bien que ce fvwm
soit toujours bien, je pense surtout à ce genre de chose, alors gardez-le à l'esprit si vous le faites), car un .xinitrc
comme ceci:
#!/bin/sh
myApp
Exécute uniquement votre application en clair X - ce qui est très simple: pas de menus, pas de barres de titre, pas de barres d'outils, etc., ou un moyen pour l'utilisateur de démarrer une autre application ou d'obtenir un shell. Il fournit juste un curseur.
Un problème avec cela est que si vous allez directement sur un bureau à partir du démarrage, ce sera un bureau superutilisateur. En fait, les instances X ont toujours un UID de 0, mais les applications exécutées à partir de xinitrc s'exécutent en tant qu'utilisateur qui a démarré X - dans ce cas, X a été démarré par init, donc l'utilisateur sera root (bien que techniquement root ne soit pas connecté) ). Par conséquent, le xinitrc ci-dessus serait meilleur avec:
su -c myApp pi
Qui exécutera votre application en tant qu'utilisateur pi à la place (qui n'est également techniquement pas connecté).
Étant donné que techniquement, personne n'est connecté, même si l'utilisateur du kiosque tue X (par exemple via ctrl-alt-delete
), il sera simplement laissé à une invite de connexion. La procédure va au-delà de telle sorte que le script d'initialisation du service démarre X (voir la remarque ci-dessous) au premier plan afin qu'à sa sortie, le script de service continue et s'exécute shutdown -r now
.
N'oubliez pas que quelqu'un qui a un accès physique à une machine (normale) peut toujours contourner la sécurité que vous implémentez, donc tout ce que vous essayez vraiment de faire ici n'est pas de le rendre trop facile et de prévenir les accidents désagréables.
Souvenez-vous également que, puisque votre service de démarrage le fera au premier plan, aucun autre service ne s'exécutera après , alors assurez-vous qu'il s'agit du dernier absolu. Très important! Vous pouvez, en fait, utiliser à la /etc/rc.local
place, car cela est normalement garanti pour durer;) Cela vous fera gagner du temps.
REMARQUE: En fait, dans le guide, c'est un autre script /root/kiosk
, de cette section . Notez que ce n'est qu'une ligne qui fait référence au .xinitrc
script montré dans la section ci-dessus (3.4). Mettez simplement une ligne comme ça dans votre script de démarrage directement. Votre xinitrc (préliminaire), comme déjà décrit, sera beaucoup plus simple.
Une alternative à rester au premier plan avec init ...
Le but de laisser l'invocation X au premier plan est simplement de bloquer l'exécution du script init jusqu'à ce que X se termine, afin que la ligne suivante du script ( shutdown
) s'exécute:
startx
shutdown -r now
Ici, j'ai utilisé à la startx
place de la /usr/X11R6/bin/xinit /root/kiosk.xinitrc ....
ligne de conseils. Cela utilisera $HOME/.xinitrc
, et $ HOME le serait /root
. Je suis sûr que startx est également un appel bloquant, donc jusqu'à ce que X se termine, shutdown
ne fonctionnera pas. Si au lieu de cela vous avez fait ceci:
startx &
shutdown -r now
X fonctionnerait, mais l'arrêt s'arrêterait aussi tout de suite (évidemment inutile).
Vous n'avez pas à utiliser cette astuce si vous ne vous souciez pas de la fermeture - comme mentionné, l'utilisateur se retrouvera simplement avec une invite de connexion. Mais cela semble être une idée utile, car alors vous pouvez simplement le désactiver avec ctrl-alt-backspace
. Une autre idée, si votre application peut être fermée, serait d'utiliser startx &
dans le script init, qui la met en arrière-plan et permet à init de continuer normalement (c'est très bien; X sera toujours en cours d'exécution et aura le contrôle de l'affichage - "backgrounded" est un peut-être un terme déroutant). Au lieu de dans le script init, shutdown
placez plutôt le xinitrc:
#!/bin/sh
#/root/.xinitrc
su -c myApp pi
shutdown -r now
Même astuce, endroit différent. Maintenant, quand quelqu'un ferme myApp
, l'arrêt se produira (mais s'il tue X, ce ne sera pas le cas). Vous pouvez également le faire dans les deux sens, mais j'aime mieux celui-ci car cela signifie que vous pouvez quitter X et obtenir une connexion, ce qui peut être utile parfois, et vous pouvez également désactiver facilement le système à partir de l'interface graphique.
Ne pas background ( &
) myApp dans le .xinitrc même s'il n'y a pas d'arrêt après, car lorsque le .xinitrc est terminé, X se ferme;) Le dernier appel doit persister au premier plan (normalement, c'est un DE ou une fenêtre directeur).
Init scripts et .xinitrc
sont des concepts similaires. L'un est exécuté par init
, qui est le processus 1 sur linux (c'est le seul processus démarré par le noyau). L'autre est géré par le serveur X. Notez qu'il existe des fichiers .xinitrc et une commande xinitrc (ils sont liés mais pas identiques).
/etc/inittab
mais la plupart des autres ne le font plus, que font-ils à la place?