Bonjour à tous!
J'essaie de réaliser un programme sous linux, et je suis dans l'embarras.
Mon programme se lance.
Il fork pour lancer une video Vboucle en boucle dans mplayer. Cette vidéo qui tourne à l'infini est celle qui sert de video d'"attente".
En effet, j'ai un lecteur de codes barres sur port usb. Lorsque j'appuie sur le bouton du lecteur/douchette, le code en caractères correspondant au code barre exposé au lecteur est transmis à STDIN, exactement comme si je l'avais tapé manuellement au clavier. Mon programme doit récupérer la chaine de caractères donnée par le lecteur de code barre.
En fonction du code barre reçu. Une autre vidéo (Vrésultat) est lancée dans mplayer (l'ancien mplayer est alors killé): pas en boucle cette fois, elle est jouée une fois et une seule, puis c'est reparti pour la vidéo d'attente en boucle.
Pendant que la vidéo Vrésultat est en cours de lecture, je compte inhiber le lecteur de code barre (ça je sais pas encore comment), et le réactiver une fois que Vboucle tourne à nouveau.
Mon gros problème:
A partir du moment ou je fork et que j'execl mplayer pour lire la video en boucle, c'est mplayer qui récupère les pressions au clavier, et lorsque je lis un codebarre avec ma douchette, c'est mplayer qui récupère tout, et donc ça va pas du tout du tout (c'est comme si lors d'une lecture de vidéo dans mplayer, vous appuyiez un peu partout sur le clavier dont certaines touches sont affectées à des fonctions diverses).
J'ai consulté de l'aide ça et là, on m'a dit que:
- le processus enfant (qui spawn mplayer par la suite) hérite du stdin de son père (mon programme). On m'a conseillé dans un premier temps de rediriger STDIN du processus fils vers /dev/null à l'aide de dup2. Pas concluant du tout, mplayer continue à récupérer les évènements clavier (et donc le code barre).
- on m'a conseiller d'essayer les paramètres -noconsoleinputs (ou un truc du genre, j'ai pas mon code sous les yeux au moment où je vous écris) --> pas concluant non plus.
- on m'a conseiller d'essayer le mode -slave. --> pas concluant non plus.
Lorsque dans Gnome, je lance mplayer depuis un shell en ligne de commande, je remarque que d'une part il écrit dans le terminal. Mais que d'autre part une fenetre graphique est ouverte, celle-là même dans laquelle est affichée la vidéo. Cette fenêtre graphique récupère le focus de la part de X (donc clavier + souris), et je me demande si ça viendrait pas de là.
Me souvenant que mplayer n'a pas forcément besoin du serveur X pour pouvoir afficher de la video plein écran, j'ai récupéré le fichier de configuration mplayer.conf de GeexBox, pour lancer par la suite mon programme depuis TTY1 (ctrl+alt+F1) en root, et voir ce que ça donne avec un mplayer qui n'ouvre plus une fenetre de window manager, mais écrit directement dans le framebuffer. Manque de pot, sous ubuntu, avec mes drivers ATI proprio, il parait que j'ai pas de framebuffer (on m'a fait lancer un ptit programme qui écrit directement en FBO,et ça m'affiche des "A" rouge plein l'écran).
Très alambiqué tout cela. Mon problème se résume à vouloir lancer un programme d'une part réceptionne des codesbarres de STDIN, et d'autre part pilote mplayer, SANS que mplayer soit sensible à aucun évènement clavier.
Ah oui, dernière chose, on peut effectivement configurer mplayer pour mapper les fonctions qu'on veut, aux touches qu'on veut. j'ai essayé de virer tous les mappages, mais même sans mapping, les touches sont interceptées quand même.
J'aimerai que mon programme garde en somme l'"exclusivité" sur STDIN. Non de dieu!!!
Merci d'avance de votre aide!
Partager