Forum Programmation.c accès aux périphériques clavier et souris

Posté par  .
Étiquettes : aucune
0
8
déc.
2004
Bonjour,
je cherche à créer un daemon (lancé en root) qui serait capable d'espionner les entrées clavier et souris.
Mais je n'ai aucune idée de la façon de faire.
Dois je écouter un fichier /dev/* si oui, dois je rediriger ce que j'ai lu ailleurs, etc.
J'aimerais que ce programme soit fonctionnel autant sous X que sous une console.
Si quelqu'un à une toute petite idée ça pourrait m'aider.
Par avance merci
  • # Input event

    Posté par  . Évalué à 2.

    Sur un linux récent (2.6, idéalement), regarde du coté de /dev/input/, il devrait y avoir (selon les options de compilation du noyau) un fichier "event" regroupant tous les évènements de tous les périphériques gérés par la couche d'input du noyau. Je ne connais pas le (les?) protocoles utilisés, mais ça doit se trouver.

    Par ailleurs, pour que ça fonctionne il faut également que X utilise la-dite couche d'input du noyau, et non un /dev/psaux classique, si je ne m'abuse.

    Bref, pour faire quelque chose qui marche à la fois sous X et en console et de manière portable, bon courage. Par contre, pour du X "pur", c'est relativement aisé, il y avait même un programme qui faisait quelque-chose de similaire (plus prise de controle d'une souris distante, etc.)
    • [^] # Re: Input event

      Posté par  . Évalué à 1.

      je vais regarder, je t'en remercie.
      Par contre, je me fous que ce soit portable. Du pur Linux 2.6 ce peut être bien. La portabilité sera un plus.
      Par contre peut être pourP aller un peu moins loin dans mon idée, je pourrais intéresser par une solution X pur. Pourrais tu me donner un pointeur ?
      Par avance merci.
      • [^] # Re: Input event

        Posté par  . Évalué à 2.

        cherche un soft qui s'appelle x2x
        il doit y avoir au maximum 5 fichiers source donc ça doit être relativement facile de trouver la partie intéressante. la compilation sous irix nécéssite un peu de bidouille mais il me semble que sous linux ça marche bien.

        il permet de transférer tous les évènements (clavier, souris) d'un serveur X vers un autre serveur X (sur une autre machine par exemple).

        c'est très pratique lorsque l'on a un petit bureau, 1 clavier, 1 souris et plein de machines...
  • # Ne pas réinventer la roue

    Posté par  . Évalué à 1.

    Dans le noyau, il a déja un mode DEBUG qui permet de logger les evenements.

    Dans les noyaux 2.6 :

    Device Drivers ->
    Input Device support ->
    <>Event Debugging
  • # linux mag

    Posté par  (site web personnel) . Évalué à 1.

    Dans linux magazine, il y'avais dans un des hors series consacrés au noyaux un article qui expliquait comment faire un pilote de souris usb.

    Je ne sais pas si ça peut t'aider car je n'ai pas l'article sous les yeux.
    • [^] # Re: linux mag

      Posté par  . Évalué à 1.

      j'aurrais aimé eviter de coder sur le noyau. Peut être n'est ce pas possible. Ce qui m'étonne un peu.
      Pourquoi root ne pourrait il pas espionner les devices ? Pourquoi ne pourrait il pas faire un espèce de tcpdump sur le clavier ?
      merci pour ta piste.
  • # Pas très dur

    Posté par  . Évalué à 2.

    A mon avis, c'est relativement facile à faire...

    Pour la souris, man 4 mouse explique le fonctionnement de ce périphérique. Pour le clavier, ben, man 4 keyboard. Ils sont effectivement tous les deux dans /dev.

    Ensuite, pour que cela marche sous X, il faut que tu lise le contenu de ces fichiers, puis que tu les rende à X. La solution, à mon avis, c'est d'ouvrir les fichiers de périphériques, de les unlinker, de créer des fifos à la place portant le même nom, de créer quatre threads (une par fifo et une par fichier d'origine), deux buffers de petite taille, puis de lire les fichiers d'origine avec les threads, d'en faire ce que tu veux, et de placer leurs données dans ces buffers, les deux autres threads se chargeant, lorsqu'elles sont réveillées, de lire le contenu des buffers et de l'ecrire dans leur fifo.

    L'idée, c'est que si personne n'a ouvert tes fifos, les deux threads d'écriture resteront bloquées, et attendront patiemment que quelqu'un les ouvre pour écrire. Il est évidemment préférable que les données non lues sur-le-champ soient purement et simplement _perdues_ (ben oui, quoi, quand je démarre X, je n'aime pas qu'il reçoive tous les mouvements qu'a fait la souris depuis une heure...), donc tu peux y aller bourrin pour les buffers.


    Bon, finalement, je me relis, et je me dis que ce n'est pas aussi simple que ça en avait l'air. Mais bon, tu vois, à mon avis, il n'y a absolument pas de raison de faire du code kernel pour réussir ton démon.

    Bonne chance!

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.