Tentative d'exécution d'un script Python au démarrage sur Raspberry Pi 3B + 1 Go de RAM, Raspbian, avec un Écran tactile SunFounder 10" , - le fichier .log renvoie "Nom d'affichage incorrect"
Le script Python est 100% fonctionnel lorsqu'il est exécuté via le terminal / script exécutable / Thonny etc. Tentative de exécuter au démarrage d'abord via rc.local - a créé un service, activé le service, le rechargement du démon ... etc. Ne fonctionnait pas. J'ai essayé de s'exécuter en tant que crontab, même résultat - la sortie .log de crontab montre "Nom d'affichage incorrect". Je pensais que c'était un manque d'environnement d'affichage importé et déclaré dans le script Python, alors j'ai ajouté cela - mais au démarrage, retourne le même résultat.
Voici le script Python que j'utilise
DISPLAY=":0.0" /usr/bin/python3 /home/pi/Custom_Scripts/<script>.py
J'essaye actuellement d'exécuter ce script au démarrage via crontab avec cette ligne: p >
DISPLAY=":0" /usr/bin/python3 /home/pi/Custom_Scripts/<script>.py
Le fichier journal des erreurs de crontab renvoie ce qui suit:
> /dev/null from #Omxplayer Commands
Cette erreur n'existe que lors de la tentative d'exécution du script au démarrage. L'affichage remplace-t-il les autorisations d'affichage de démarrage au démarrage? Qu'est-ce qui empêche le script de s'exécuter sur l'écran au démarrage, mais pas lorsqu'il est exécuté à distance? Merci de votre considération.
Mise à jour: toujours pas de solution. L'environnement d'affichage renvoie ": 0.0 '... jusqu'à présent, j'ai essayé de supprimer
raise error.DisplayNameError(display) Xlib.error.DisplayNameError: Bad display name ""
Remplacement de la ligne de démarrage crontab par:
@reboot (/bin/sleep 10; /usr/bin/python3 /home/pi/Custom_Scripts/<script>.py > /home/pi/Custom_Scripts/cronjoblog 2>&1)
et
#!/usr/bin/env python3 import RPi.GPIO as GPIO import os import sys import webbrowser import time import subprocess from pynput import keyboard from Xlib.display import Display #GPIO Readout GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) #GPIO Header Setup header = 2 GPIO.setup(header, GPIO.IN) #Omxplayer Commands Loop = 'omxplayer -b --loop --no-osd -o hdmi /home/pi/Videos/PlanetEarth.mp4 > /dev/null' Donation = 'omxplayer -b --no-osd -o hdmi /home/pi/Videos/Cartoon.mp4 > /dev/null' KillPlayer = 'pkill omxplayer.bin' KillForm = 'pkill chromium' #Set Display Environment new_env = dict(os.environ) new_env['DISPLAY'] = ':0.0' #Form Handling Required Below #If Donation is successful, Stop Looping Video, Open Form in Chromium, Wait 60 seconds, Close Chromium, Restart Loop def PullDownSuccess(): subprocess.Popen(KillPlayer, env=new_env, shell=True) time.sleep(2) webbrowser.open('<url>') time.sleep(60) subprocess.Popen(KillForm, env=new_env, shell=True) time.sleep(2) subprocess.Popen(Loop, env=new_env, shell=True) #Inception subprocess.Popen(Loop, env=new_env, shell=True) #Terminate Loop with Escape Key or Manually Initiate Donation Success def on_press(key): if key == keyboard.Key.ctrl: PullDownSuccess() if key == keyboard.Key.esc: subprocess.Popen(KillPlayer, shell=True) #Keyboard Listener Module with keyboard.Listener( on_press=on_press) as listener: listener.join() #Donation Successful Do: while True: header_state = GPIO.input(header) if header_state == GPIO.HIGH: PullDownSuccess()
Et tout combinaison possible de ceux-ci.
Confirmé que le script n'attend aucun processus d'arrière-plan car j'ai ajouté un délai (time.sleep) jusqu'à 30 secondes, ainsi que le retour des adresses IP, etc.
Renvoie soit un nom d'affichage incorrect, soit "Impossible de se connecter pour afficher": 0 ": b'Invalid MIT-MAGIC-COOKIE-1 key"
Toujours à la recherche d'une solution si quelqu'un en a une .
MODIFIER: Correction de l'utilisation de / LXDE-pi / autostart. Répondez ci-dessous.
4 Réponses :
Essayez d'ajouter la variable d'environnement DISPLAY avant d'appeler votre script:
DISPLAY=":0" /usr/bin/python3 /home/pi/Custom_Scripts/<script>.py
Merci pour votre contribution. DISPLAY = ": 0" / usr / bin / python3 /home/pi/Custom_Scripts/