Lancer un code python sans ecran au demarage

Bonjour à tous,

Je tente de démarrer automatiquement, au démarrage de mon Raspberry Pi, un script d'assistant vocal (écrit en Python) qui utilise un casque Bluetooth (micro et haut-parleur). J'ai créé un service systemd nommé ia.service, et j'ai adapté divers fichiers de configuration :

  • /home/mchar/ia/start_script.sh pour initialiser PulseAudio et se connecter au casque.
  • /etc/asound.conf pour forcer le profil SCO permettant l'utilisation du micro.
  • pulseaudio.service et ia.service pour définir les dépendances (Bluetooth, réseau, etc.).

L'idée est de connecter le casque et d’activer le microphone dès le démarrage, sans nécessiter de session graphique ou de connexion manuelle. Malgré toutes mes modifications (changement des droits sur les dossiers de logs, suppression de sudo, etc.), il y a toujours des soucis : soit le micro ne se lance qu’après connexion en session, soit le casque n’est pas détecté, soit PulseAudio & Bluetooth ne démarrent pas proprement.

L’exécution manuelle du script start_script.sh fonctionne (casque et micro se connectent, le script Python se lance), mais pas au démarrage “headless” via systemd. J’ai également essayé des solutions comme rc.local ou des timers systemd, mais sans succès.

Quelqu’un aurait-il une piste pour s’assurer que le casque Bluetooth se connecte correctement en mode mains libres et que le script se lance de façon fiable au démarrage, sans écran ni session utilisateur ?

Merci beaucoup pour votre aide !

J’ai eu pas mal de misère aussi avec le BT en mode ligne de commande. Ma solution est de séparer le tout.

Premièrement, depuis quelques version de Debian/Raspbian, il est difficile de bien faire un service manuellement. Le problème réside un peu dans les droits d’utilisateur, et un peu sur la gestion des modules requis.

Ma solution est de passer en partie avec Cron et en partie avec le profil utilisateur.

Déja, il faut que ton système est les modifications avant le link entre le casque et le RPi, la solution est de préparer ça via le Cron au @reboot (boot). Tu ajoutes le lancement du script dans l’utilisateur requis (root vu que c’est le système que tu prépare)

Après, dans « .profile » dans le dossier home (/home/pi/.profile par exemple), tu ajoute le lancement de ton script de reconnaissance, mais avant, tu lance le lien entre ton appareil BT et le RPi.

J’ai codé une interface Web simple qui permet de contrôler le RPi à distance, dont le redémarrage du BT, ceci peut aider en cas de perte de connexion.

GitHub - levelKro/piWebCtrl: Web UI for control your Raspberry Pi.

Le BT a tendance à couper de lui-même après quelques heures, des fois quelques jours. Il n’y a pas de raison spécifique, car dans mon projet, a l’époque, le module était collé sur le RPi (je streamais en BT d’un RPi Zero, vu qu’il n’y a aucune sortie audio matériel sur ce modèle), avec un module de réception BT vers sortie Headphone (sans micro).

Et n’oublie pas dans « raspi-config » d’ajouter un autologin (command-line et non desktop) sur le compte principal pour permettre le lancement du profile.