je viens vers vous pour une aide concernant mon problème en titre.
j’ai creer 2 applications graphique qui doivent fonctionner chacune sur un ecran du raspberry connecter en HDMI 1 et HDMI 2 . le truc c’est que les applications doivent démmarer au boot du PI4 App1 sur ecran 1 et App 2 sur ecran2
j’ai essayer tout ce que j’ai pu trouver sur le net sans succès. ( rc.local / script exemple pour ouverture de 2 page web avec chromium trouver sur le net etc…)
lorsque je fait Echo $XDG_SESSION_Type je suis sous wayland.
le démarrage automatique de mon app fonction actuellement avec un fichier *.service app qui est dans /etc/systemd/system/monApp1.service
Mon app1 est dans le repertoire /home/app1
Je ne vous cache pas que je cherche depuis un bon moment et que votre aide me parait indispensable
Concernant mon application elle à été creer avec NetBeans en C++ et GTK ( elle fonctionne correctement et j’ai la main sur le code bien sur)
Merci d’avance
La réponse a été donné dans d’autres post similaire, pour ça que personne n’avaient le goût de répondre je crois.
Il faut ajouter dans la commande d’exécution, avant la commande, DISPLAY=:0 pour l’affichage 1 et DISPLAY=:1 pour le second affichage (ou dans certains cas, 0.0 et 0.1).
Exemple; DISPLAY=:0 python3 /home/pi/monscript.py
Ceci force la commande a donner le résultat dans un affichage donné, pratique pour des lancements via SSH pour l’écran du RPi.
Consulte la documentation sur cette commande si tu désire plus de précision.
Même si tu défini l’option dans le fichier de lancement du service, il peut l’ignorer pour divers raisons. Il vau mieu le passer directement dans la ligne de commande, cependant, les fichiers de lancement de service sont un vrai bordel (de mon avis) et cause pas mal de soucis, tu es mieux de soit créer un script Bash de lancement et de passer par Cron pour lancer au démarrage, j’obtiens de meilleurs résultats que via le système des services.
La case est est importante, si tu l’écris comme ça; « Display » , ça ne marchera pas. Si tu fais « DISPLAY », ça devrait mieux marcher.
Teste la commande via SSH, tu confirmera alors si elle est bien fait, car si il y a une erreur, tu devrais voir un message indiquant que TTY (ou de quoi du genre) n’est pas capable d’afficher le rendu.
J’ai lancé une petite recherche (Google), et selon la lib pour le GUI, il faudra peut-être ajuster le code Python pour lui définir à lui l’écran à utiliser.
Sa revient un peu à ce que je disais, dans certain contexte les valeur d’environnement son ignoré par le script, et c’est dans le code même qu’il faut définir la sortie.
La c’est plus complexe (pour moi) car j’ai jamais rencontré ce cas de figure, et vu la variété de libs GUI disponibles, c’est un peu compliqué de tout savoir
Alors si ça ne marche toujours pas, consulte la doc de ta lib GUI pour savoir comment forcer l’usage d’un écran spécifique.
Tu peux définir la position relative de ta fenêtre, si tu as deux écran, peut-être lui définir la position X à la limite de l’écran 1 pour qu’elle sorte sur l’écran 2. Par exemple 1280x720, si tu défini les coordonné de position à 1281,0, il sera en coin gauche supérieur de l’écran 2.
Assure toi que l’écran 1 et 2 sont détecté et pris en charge par le OS avant de lancer n’importe lequel des solutions avancés.
Concernant le coordonnées je n’est jamais reussi à faire fonctionner le code GTK la position est toujours 10x10 même si je change les parametres dans le code
Cordialement
Autre chose tu me donne des infos sur le code python mais en aucun cas je code en python je code en C++ avec la bibliothèque GTK via netbeans 20
Pour ta positionnement, si même tu change la position, il tombe a 10,10, alors c’est que le code que tu utilise n’est pas adéquat pour le OS. Peut-être utilise tu la code pour Windows ? (C++ étant fonctionnel sous Linux et Windows, je ne code pas C++, alors c’est une hypothèse) Je dis ça car sous Python, j’ai un code pour Windows et un code pour Linux pour le positionnement et modification de la console (couleur, police, etc…) Et le code Windows est ignoré par Linux et vice-versa.
Sinon, regarde sur le côté du FB (Frame Buffer) qui peut gérer plusieurs sorties, peut-être que ta solution ce trouve la, mais je ne pourrais pas t’aider avec.
Mon aide va pas mal s’arrêter ici, car la je vais qu’en théorie et par réflexion, je n’ai jamais eux à utiliser deux écrans sur un RPi, sauf avec les 3.5" et via SSH, et encore moins avec du code C++.
mais as tu essayez avec ChatGPT d’avoir une réponse ?
Mon code est bien pour Rasbian le principe de netbeans est de creer ton code dans l’EDI sous windows mais la compilation est faite par le raspberry et les bibliothèque installer sur le raspberry il y à un lien réseau entre les deux. il en sort une application compiler avec gcc fonctionnelle.
Je vais continuer à chercher la solution
merci pour ton aide
Je ne connais pas wayland, mais peut être que les commandes wayland ne sont pas compatibles x11 ? Il semble que sous wayland, c’est plutôt la variable WAYLAND_DISPLAY qu’il faut initialier par contre avec quelles valeurs ?
Après quelques brèves recherches, je n’ai pas trouvé comment choisir l’écran d’affichage.
Autre approche, vous pourriez tenter de passer sur X11.
je n’est pas réussi à faire fonctionner la commande DISPLAY=:0 ou 1
Mais avec les conseille de JELOPO j’ai passer l’affichage sur X11
la mon programme récupère bien les coordonnées exact des 2 ecrans
en faisant une modification de mon programme en définisant les coordonner pour chaque App à l’execution cela fonctionne