J'ai le problème suivant: en utilisant un RaspPi 3B exécutant Raspbian Jessie (version 4.4.26-v7 +), je voudrais que l'interface graphique d'un script python auto-écrit soit exécutée au démarrage.
Je sais que cette question a été posée sur ce site ainsi que sur d'autres, mais comme Raspbian continue de changer et qu'aucune des solutions suggérées avant n'a fonctionné pour moi (voir ci-dessous), je voudrais la poser à nouveau.
D'après ma compréhension, je dois charger XServer et exécuter mon script par la suite. Cela devrait se produire au lieu de charger l'ensemble du bureau.
Un moyen d'y parvenir est censé être via le fichier de démarrage automatique LXDE (comme indiqué dans cette réponse ). J'ai édité le fichier /etc/xdg/lxsession/LXDE-pi/autostart
ainsi que le fichier /etc/xdg/lxsession/LXDE/autostart
(le premier contenait à l'origine quatre lignes au lieu de trois comme suggéré dans l'article référencé) - en ajoutant les lignes @sudo python /full/path/to/file.py
et @openbox
, mais mon Pi démarre toujours sur le bureau et n'exécute pas automatiquement le script du tout. Annotation: J'ai essayé uniquement la ligne de script et la ligne de script avec la ligne openbox pour l'un des fichiers et pour les deux fichiers ensemble.
Une autre stratégie implique le fichier rc.local (comme suggéré dans la documentation officielle ). Cependant, l'ajout python /full/path/to/file.py &
n'a pas fonctionné (car il manquait encore mon interface graphique) et l'ajout startx
n'a pas aidé car je ne pouvais apparemment pas lier le startx au script python et le premier s'est donc fermé immédiatement après son démarrage.
Certains suggèrent que (en plus) .xinitrc devrait être utilisé. Cependant, cela n'a pas fonctionné non plus:
su -c python /full/path/to/file.py pi
Et, last but not least, d'une certaine manière, cela devrait être faisable en utilisant init.d - mais je n'ai pas encore trouvé de détails à ce sujet.
J'apprécierais vraiment tout indice dans la bonne direction. Où est mon erreur? À quoi devrait ressembler ma ligne en rc.local ou .xinitrc? Ou y a-t-il eu des changements majeurs liés au passage au pixel et devrais-je essayer autre chose?
Quelques informations supplémentaires: Le script a besoin des droits sudo. Il est écrit en Python 2.7, l'interface graphique utilise Tkinter. L'interface graphique remplit complètement l'écran, donc les arrière-plans ne sont pas pertinents. Le script est censé s'exécuter pour toujours (ou jusqu'à ce qu'il soit arrêté par une entrée utilisateur via l'interface graphique) et utilise des services système comme le wifi et Ethernet.
Plus d'informations: Tout se passe localement.
Clarification: j'ai maintenant passé plus de 8 heures à chercher sur le net, à essayer des didacticiels à partir de différents points de départ ou à les mélanger. J'en suis arrivé à la conclusion que mon script (qui fonctionne parfaitement lorsqu'il est démarré en pixel) ne fonctionne pas s'il est exécuté dans un environnement non-bureau (ce dont je doute) ou qu'un nouveau tutoriel est nécessaire, car les modifications d'octobre 2016 en Raspbian a rendu obsolètes tous les anciens didacticiels. De plus, le défi ne consiste pas à démarrer le script ou à démarrer Xserver (ou quelque chose de similaire) indépendamment les uns des autres, mais à faire les deux liés de sorte que le script utilise l'affichage créé par Xserver.
Réponses:
Depuis un mois environ, je travaille essentiellement sur la même chose, j'ai donc beaucoup cherché comment faire cela et je sais comment le faire avec la dernière version de Raspbian (PIXEL).
nodm
est un gestionnaire d'affichage minimal qui contourne le chargement de LXDE etopenbox
(qui est déjà installé sur le Pi) fournit un gestionnaire de session minimal et fonctionne avec le serveur X.Pour mettre en place cet environnement dans Raspbian, installer
nodm
avecapt-get
et modifier le fichier/etc/default/nodm
. Vous devez définir l'optionNODM_ENABLED
surtrue
etNODM_USER
surpi
(ou quel que soit votre nom d'utilisateur).Créez ensuite un fichier Xsession personnalisé dans votre dossier de départ (
/home/pi/.xsession
) avec le contenu suivant (lawhile
boucle n'est pas nécessaire, elle redémarre automatiquement le script Python s'il se bloque):et cela devrait être tout ce qui est nécessaire je pense. J'ai écrit un script Bash pour le configurer automatiquement:
Remarques:
nodm
vous devez installerxserver-xorg
,xinit
,openbox
et toutes les autres dépendances votre script a. Ensuite, si vous utilisez Openbox, au lieu d'exécuter le script Python dans le fichier Xsession, la partie du code qui l'exécute doit être déplacée vers un script distinct (/home/pi/.config/openbox/autostart
). Je peux élaborer davantage sur la façon de procéder si vous le souhaitez.la source
Le fichier de démarrage automatique existe à plusieurs endroits différents. Il s'agit simplement de modifier le bon fichier de démarrage automatique au bon chemin. J'ai essayé d'éditer
/home/pi/.config/lxsession/LXDE-pi/autostart
. Cela a finalement fait l'affaire pour moi./etc/xdg/lxsession/LXDE-pi/autostart
semble être le mauvais chemin.la source
La sale astuce que j'ai utilisée sur RPi dans le passé était de mettre des commandes dans mon
/etc/rc.local
fichier juste avant laexit 0
ligne. Dans votre cas, j'essaierais la ligne suivante et redémarrerais.Comme vous avez indiqué que les autorisations de niveau sudo sont nécessaires, vous devrez peut-être ajuster la
su
commande que vous avez précédemment essayée, car en ce moment, il semble que vous essayez de l'exécuter sous l'pi
utilisateur.Un avertissement concernant ma suggestion d'utilisation du fichier rc.local, si votre script se termine avec un état non nul, vous ne terminerez pas le démarrage, donc pour être plus sûr pendant les tests, vous pouvez essayer ce qui suit pour garantir que la sortie est toujours égale à 0
Modifications et mises à jour
En regardant certaines données de recherche, nous avons trouvé un instructable qui montre l'utilisation d'un script de lancement référencé dans l'onglet cron pour faciliter le chargement des scripts python. Cela peut sembler sur le point de charger cron pour charger un script sh / bash afin de charger python mais ... c'est assez compliqué pour avoir un sens tordu.
la source
Donc, selon l'entrée de votre code, cette solution peut fonctionner.
La première chose que j'ai faite a été de créer un script dans mon répertoire / qui ressemble à ceci:
Vous devez rendre cela exécutable avec
chmod -x scriptName.sh
.Ensuite, faites
crontab -e
dans le terminal et ajoutez@reboot sudo bash /scriptName.sh
Réglez votre option de démarrage sur CLI et vous devriez être prêt à partir! Cela a fonctionné sur mon Raspbian 3B.
Une mise en garde, si vous utilisez un écran tactile pour votre kiosque / écran, je n'ai pas encore compris. Cela fonctionnera bien avec la saisie de la souris, mais en ce qui concerne la saisie tactile, au moins pour l'écran que j'essaie d'utiliser, il sera éteint d'une manière qui le rendra inutilisable.
Remarque : Si votre code fait des IO de fichiers comme le mien, vous devez utiliser
cd
pour naviguer vers l'emplacement de votre code dans votre script de lancement ou python supposera que son emplacement est celui de votre script et effectuera les IO de fichiers en conséquence.la source