Exécuter 2 Applications GUI chacune sur son écran PI4 8go

Bonjour à tous,

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

Description=Start App1

[Service]
User=pi
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
ExecStart=/home/app1            
Restart=always
RestartSec=10s
KillMode=process
TimeoutSec=infinity
[Install]
WantedBy=multi-user.target` 

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

Oscar
Pour information je suis amateur

Bonjour à tous,

Personne pour une idées ?

Cordialement

Oscar

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. :stuck_out_tongue:

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.

Bonjour,

Merci pour votre réponse
Cette solution ne marche pas chez moi l’exec ce fait toujours sur le même ecran

Est ce je fait mal quelque chose de mal / est ce que cela fonctionne juste en lancant la commande sur le terminal ? pour testé

j’execute ainsi dans le terminal " pi@pi:~$ Display=:0 / home/app1 " ou 0.0

l’app démarre mais toujour sur le même ecran meme si je remplace par 1 ou 0.1

Cordialement

Oscar

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 :stuck_out_tongue:

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.

Bonsoir,

j’ai fait un test avec putty en SSH connection distante . lorsque je lance la Commande

pi@pi:~ $ DISPLAY=:0 /home/app1 , l’appli demarre sur l’ecran du raspberry

si je test avec pi@pi:~ $ DISPLAY=:1 /home/app1 j’ai une erreur

(app1:9119): Gtk-WARNING **: 20:48:10.723: cannot open display: :1

alors que j’ai bien les 2 ecrans de connectés
quand je fait pi@pi:~ $ kmsprint | grep Connector j’ai le resultat est le suivant

Connector 0 (32) HDMI-A-1 (connected)
Connector 1 (41) HDMI-A-2 (connected)

y à t’il une config à faire de spéciale ?

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

Cordialement
Oscar

C,est quand même technique ton affaire.

As tu tenté avec « DISPLAY=:0.1 » ?

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 ?

Bonsoir,

oui j’ai essayer
=:0
=:1
=:0.0
=:0.1

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

Cordialement

Oscar

Bonjour,

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.

Bonne recherches

A+

Bonjour,

Merci jelopo pour ton aide, je vais essayer, cette une solution que je n’est pas encore testé

je vous tiens au courant

Cordialement

Oscar

Bonjour Jelopo,
Merci, donc pour faire simple la fonction DSIPLAY=:1 ne fonctionne toujours pas

par contre maintenant les coordonnées de la fenetre fonctionne ecran 1 les valeur de départ " 0 . 0"et les valeur de l’ecran 2 « 1280 .0 »

je vais tester si je peux jouer avec le programmation de mon app

Cordialement
Oscar

Bonjour,

Petit retour et merci à JELOPO,

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

Merci encore à tous pour votre aide

Cordialement

Oscar