Clavier souris reseau : Différence entre versions

De Wiki d'activités IMA
 
(38 révisions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
<include nopre noesc src="/home/pedago/pimasc/include/video-NetworkHMI-iframe.html" />
 
= Présentation =
 
= Présentation =
  
Ligne 4 : Ligne 5 :
  
 
Concevoir et développer un clavier réseau et une souris réseau capable de s'interfacer avec n'importe quelle machine fonctionnant sous Linux.
 
Concevoir et développer un clavier réseau et une souris réseau capable de s'interfacer avec n'importe quelle machine fonctionnant sous Linux.
 +
 +
En fonction de l'avancement du projet, nous implémenteront le chiffrement de la connexion réseau grâce à [http://www.gnu.org/software/gnutls/ GnuTLS].
  
 
=== Interface ===
 
=== Interface ===
Les deux périphériques seront augmentés de boutons, molettes, ... permettant de choisir facilement la configuration, i.e. la ou les machines de destination.Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques. Il est envisageable d'ajouter des mini écrans OLED ou LCD dans les périphériques.
 
  
=== Connectique ===
+
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.
Les périphériques se raccorderont au réseau via une connexion Ethernet filaire ou via une connexion WiFi.  
+
Dans le cas d'un écran tactile, il sera utilisé pour faire la sélection de la machine destination. Dans le cas contraire, une molette ou des boutons seront utilisées.
 +
 
 +
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.
 +
 
 +
=== Périphériques ===
 +
 
 +
Les périphériques seront raccordés à la Foxboard (seulement en USB), mais il est possible d'utiliser le logiciel sur une autre machine avec d'autres types de port (USB, PS/2...).
 +
 
 +
En fonction de l'avancement du projet, nous intégreront un plus grand nombre de périphériques, notamment la guitare de M. Vantroys, et la WiiMote.
  
 
= Préparation du projet =
 
= Préparation du projet =
Ligne 15 : Ligne 25 :
 
== Matériel ==
 
== Matériel ==
  
* un clavier USB
+
* Clavier USB
* une souris USB
+
* Souris USB
 +
 
 +
* Foxboard
 +
 
 +
* Ecran OLED tactile
 +
** Modèle : [http://www.4dsystems.com.au/prod.php?id=118 µOLED-32024-P1T(GFX)]
 +
** Taille de la carte : 49.1 x 67.3 x 11.0mm
 +
** Taille de l'écran : 2.4”, 42mm x 52.6mm
 +
** Taille de la zone d'affichage : 36.7mm x 49mm
 +
** Résolution : 240 x 320 QVGA
 +
** Connectique : 16 x General Purpose I/O pins. Upper 8 bits can be used as an I/O Bus for fast 8-bit parallel data transfers. 
  
 
== Electronique ==
 
== Electronique ==
 +
 +
* Ecran OLED/LCD
 +
** Connecter l'écran sur les e/s logiques de la Foxboard
 +
** Mettre en fonctionnement l'écran
  
 
== Logiciel ==
 
== Logiciel ==
  
* Pilote en mode utilisateur en utilisant le module uinput
+
* Serveur (sur chaque machine cible)
 +
** Serveur TCP port 2020
 +
** Pilote en mode utilisateur en utilisant le module uinput
 +
 
 +
* Client (sur la Foxboard)
 +
** Connexions aux serveurs
 +
** Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (protocole TCP)
 +
 
 +
* Administration (sur la Foxboard)
 +
** D'abord en ligne de commande, ensuite avec l'écran tactile
 +
** Changer les client destinataires, changer la keymap, arrêter le serveur
 +
 
 +
* Documentation
 +
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]
 +
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]
 +
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]
 +
** [http://xmlsoft.org/html/libxml-tree.html libxml2 documentation : module tree]
  
 
= Avancement du projet =
 
= Avancement du projet =
  
'''Lundi 28 février 2011'''
+
== Lundi 28 février 2011 ==
  
 
'''Absence non justifiée'''
 
'''Absence non justifiée'''
 +
<!-- FAUX! jétais juste transparent...-->
 +
 +
== Vendredi 4 mars 2011 ==
 +
 +
=== Choix technique ===
 +
 +
'''Travail effectué'''
 +
 +
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).
 +
 +
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...
 +
 +
'''Conclusion'''
 +
 +
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.
 +
 +
===  uinput : Pilote de Clavier/Souris virtuel ===
 +
 +
'''Travail effectué'''
 +
 +
Documentation sur le module Linux uinput.
 +
 +
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.
 +
 +
== Lundi 7 mars 2011 ==
 +
 +
=== Récupération des événements Clavier/Souris ===
 +
 +
==== logkeys ====
 +
 +
'''Travail effectué'''
 +
 +
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) :
 +
* Via le gestionnaire de paquets : Debian Lenny est installé sur la Foxboard, il faudrait passer au dépôt Debian Squeeze (stable) pour obtenir ''logkeys'' : abandon car trop long
 +
* Compilation des sources : effectué sur la Foxboard après avoir installé les outils de compilation et librairies nécessaire. L'exécutable obtenu ne fonctionne pas pour une raison inconnue, abandon.
 +
 +
'''Conclusion'''
 +
 +
Nécessité d'écrire notre propre keylogger.
 +
 +
==== Ecriture d'un keylogger ====
 +
 +
'''Travail effectué'''
 +
 +
La fonction permettant de récupérer les événements clavier depuis un périphérique /dev/input est écrite, en utilisant l'API ''linux/input.h''.
 +
 +
'''Conclusion'''
 +
 +
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier
 +
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.
 +
 +
=== Ecran LCD/OLED ===
 +
 +
'''Travail effectué'''
 +
 +
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.
 +
 +
== Jeudi 10 mars 2011 ==
 +
 +
=== Commutateur Ethernet ===
 +
 +
'''Travail effectué'''
 +
 +
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.
 +
 +
=== Librairie TCP Serveur et Client ===
 +
 +
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.
 +
 +
'''Travail effectué'''
 +
 +
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).
 +
* Tester une connexion client-serveur
 +
 +
=== Serveur d'évenements Clavier-Souris ===
 +
 +
'''Travail effectué'''
 +
 +
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''
 +
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux
 +
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :
 +
** Le serveur récupère les événements de tous les périphériques d'entrée utilisateur
 +
** Les événements sont envoyés à chaque clients
 +
 +
'''Conclusion'''
 +
 +
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.
 +
 +
Pour réaliser cette démonstration il faudra :
 +
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées
 +
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.
 +
 +
 +
== Lundi 14 mars 2011 ==
 +
 +
=== Serveur d'évenements Clavier-Souris ===
 +
 +
'''Travail effectué'''
 +
 +
* Bugs corrigés
 +
** La connexion de clients simultanées fonctionne
 +
** Le serveur ne crash plus après la déconnexion d'un client
 +
* Librairie socket TCP (serveur et client) terminée
 +
* Démonstration du concept
 +
** Le pilote de Clavier/Souris est maintenant fonctionnel
 +
** Le client TCP se connectant à la foxboard et simulant les événements est fonctionnel
 +
** Nous avons pu controller deux machine avec un clavier et une souris en Ethernet
 +
 +
'''Conclusion'''
 +
 +
Nous avons obtenu le résultat espéré, et corrigé les deux principaux bugs.
 +
 +
M. Vantroys nous a ré expliqué sa vision du projet, et le souhait d'économiser les connexions réseau.
 +
 +
Nous allons donc inverser dès la prochaine séance les rôles clients et serveur :
 +
* Serveurs sur les machines cible
 +
* Clients sur la Foxboard, connectés aux machines sélectionnés sur l'interface (écran tactile à venir).
 +
 +
Nous prévoyons aussi d'implementer les KeyMaps dont nous allons avoir besoin pour la création d'un log contenant le texte entré au clavier.
 +
 +
'''Pistes pour développements'''
 +
 +
* Regarder la specification UPnP Remote I/O et Remote UI http://upnp.org/sdcps-and-certification/standards/sdcps/ pour avoir une version du boitier UPnP compatible
 +
* Permettre l'ajout d'autres périphériques (Guitar Hero, Wiimote, ...)
 +
 +
== Lundi 21 mars 2011 ''Joyeux noel!'' ==
 +
 +
=== Ecran Tactile ===
 +
 +
'''Travail effectué'''
 +
 +
* Début de l'étude de l’écran tactile.
 +
** Installation des outils constructeurs, lecture de la documentation, apprentissage du langage dédié et création d'une liste de composants/dispositifs nécessaires à la programmation du contrôleur intégré.
 +
 +
=== Programmation réseau et système ===
 +
 +
'''Travail effectué : inversion des rôles clients et serveur'''
 +
 +
* Le serveur est installé sur une machine cible. Il peut recevoir plusieurs connexion et simule les événements clavier/souris qu'il reçoit.
 +
* Le client se connecte à plusieurs client et leur envois les événements
 +
** Pour gagner en rapidité, des threads sont utilisés pour effectuer simultanément les connexions aux différents clients
 +
** La liste des connexions aux serveurs cibles est stockée dans un tableau. Après l'ajout des threads de connexion, cette liste est devenue une ressource partagée, et a donc été protégée avec la sémaphore POSIX ''pthread_mutex''.
 +
 +
'''Conclusion et piste pour développement'''
 +
 +
* La liste des serveurs est actuellement passée en paramètre du programme client.
 +
** Stocker la liste des serveur dans un fichier de configuration XML. Utiliser pour cela [http://xmlsoft.org/ libxml2].
 +
 +
== Jeudi 24 mars 2011 ==
 +
 +
=== Fichier de configuration XML ===
 +
 +
'''Travail effectué'''
 +
 +
* Création d'un fichier ''client_config.xml'' avec une structure simple
 +
* Installation de libxml2(-dev) et lecture de la documentation
 +
* Utilisation d'un exemple de parcours d'arbre avec libxml2
 +
* Création d'une fonction lisant les serveurs cibles depuis un fichier XML (voir xmlConfig.c)
 +
 +
== Lundi 28 mars 2011 ==
 +
 +
=== Pilote Guitar Hero ===
 +
 +
'''Travail effectué'''
 +
 +
* Nettoyage et écriture d'une partie du pilote USB Guitar Hero pour uinput
 +
 +
== Jeudi 31 mars 2011 ==
 +
 +
=== Détection des périphériques ===
 +
 +
'''Travail effectué'''
 +
 +
* Utilisation de ''[[#R.C3.A9f.C3.A9rences|inotify]]'' pour détecter les périphériques branchés à chaud (après le lancement du logiciel).
 +
 +
== Lundi 11 avril 2011 ==
 +
 +
=== Ecran oled tactile 32028 PMD3T ===
 +
 +
'''Travail effectué'''
 +
 +
* Installation de [http://www.4dsystems.com.au/prod.php?id=111 Workshop 3 IDE] et des pilotes du micro USB.
 +
* Tests et modification d'exemples simples pour d'imprégner du langage de programmation
 +
* Test de communication série avec l'écran (réussi)
 +
* Essai d'utiliser des images sur l'écran (abandonné)
 +
* Définition d'une première version du protocole de communication série Ecran-Foxboard
 +
<!-- this is going to be GREAT -->
 +
 +
== Mardi 26 avril 2011 ==
 +
 +
=== Ecran oled tactile 32028 PMD3T ===
 +
 +
'''Travail effectué'''
 +
 +
* Écriture de la majorité du code.
 +
**Protocole communication série dans son ensemble.
 +
**Interface et effets graphiques bien travaillés.
 +
**Grande fête pour les 1000 premières lignes de code
 +
 +
'''Reste a faire'''
 +
*Finaliser quelques effets graphiques
 +
*Terminer d’écrire quelques fonctions de l'interface
 +
*Tester sur l’écran du projet.
 +
**Le code est écris entièrement adaptable (normalement) à tout écran 4Dsystem
 +
<!-- J'en peux plus.... ce langage est tellement limité!!!!! -->
 +
 +
= Références =
 +
 +
* '''inotify''' is a Linux kernel subsystem that acts to extend filesystems to notice changes to the filesystem, and report those changes to applications<br />Source : [http://en.wikipedia.org/wiki/Inotify inotify - Wikipedia]
 +
* '''FOX Board G20''' is a Linux Embedded Single Board Computer built around an ARM9 microcontroller.<br />Source : [http://www.acmesystems.it/foxg20/ FOX Board G20]<br />[http://www.acmesystems.it/foxg20/doku.php?id=tutorial:serial_port Serial port]

Version actuelle datée du 25 mai 2011 à 19:29

Présentation

Objectif

Concevoir et développer un clavier réseau et une souris réseau capable de s'interfacer avec n'importe quelle machine fonctionnant sous Linux.

En fonction de l'avancement du projet, nous implémenteront le chiffrement de la connexion réseau grâce à GnuTLS.

Interface

Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier. Dans le cas d'un écran tactile, il sera utilisé pour faire la sélection de la machine destination. Dans le cas contraire, une molette ou des boutons seront utilisées.

Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.

Périphériques

Les périphériques seront raccordés à la Foxboard (seulement en USB), mais il est possible d'utiliser le logiciel sur une autre machine avec d'autres types de port (USB, PS/2...).

En fonction de l'avancement du projet, nous intégreront un plus grand nombre de périphériques, notamment la guitare de M. Vantroys, et la WiiMote.

Préparation du projet

Matériel

  • Clavier USB
  • Souris USB
  • Foxboard
  • Ecran OLED tactile
    • Modèle : µOLED-32024-P1T(GFX)
    • Taille de la carte : 49.1 x 67.3 x 11.0mm
    • Taille de l'écran : 2.4”, 42mm x 52.6mm
    • Taille de la zone d'affichage : 36.7mm x 49mm
    • Résolution : 240 x 320 QVGA
    • Connectique : 16 x General Purpose I/O pins. Upper 8 bits can be used as an I/O Bus for fast 8-bit parallel data transfers.

Electronique

  • Ecran OLED/LCD
    • Connecter l'écran sur les e/s logiques de la Foxboard
    • Mettre en fonctionnement l'écran

Logiciel

  • Serveur (sur chaque machine cible)
    • Serveur TCP port 2020
    • Pilote en mode utilisateur en utilisant le module uinput
  • Client (sur la Foxboard)
    • Connexions aux serveurs
    • Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (protocole TCP)
  • Administration (sur la Foxboard)
    • D'abord en ligne de commande, ensuite avec l'écran tactile
    • Changer les client destinataires, changer la keymap, arrêter le serveur

Avancement du projet

Lundi 28 février 2011

Absence non justifiée

Vendredi 4 mars 2011

Choix technique

Travail effectué

Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).

Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...

Conclusion

Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.

uinput : Pilote de Clavier/Souris virtuel

Travail effectué

Documentation sur le module Linux uinput.

Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.

Lundi 7 mars 2011

Récupération des événements Clavier/Souris

logkeys

Travail effectué

Installation du keylogger logkeys, disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) :

  • Via le gestionnaire de paquets : Debian Lenny est installé sur la Foxboard, il faudrait passer au dépôt Debian Squeeze (stable) pour obtenir logkeys : abandon car trop long
  • Compilation des sources : effectué sur la Foxboard après avoir installé les outils de compilation et librairies nécessaire. L'exécutable obtenu ne fonctionne pas pour une raison inconnue, abandon.

Conclusion

Nécessité d'écrire notre propre keylogger.

Ecriture d'un keylogger

Travail effectué

La fonction permettant de récupérer les événements clavier depuis un périphérique /dev/input est écrite, en utilisant l'API linux/input.h.

Conclusion

  • Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier
  • Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.

Ecran LCD/OLED

Travail effectué

Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.

Jeudi 10 mars 2011

Commutateur Ethernet

Travail effectué

Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.

Librairie TCP Serveur et Client

Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.

Travail effectué

  • Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).
  • Tester une connexion client-serveur

Serveur d'évenements Clavier-Souris

Travail effectué

  • Fonction listant les périphériques présents dans /dev/input/by-id/
  • Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux
  • Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :
    • Le serveur récupère les événements de tous les périphériques d'entrée utilisateur
    • Les événements sont envoyés à chaque clients

Conclusion

Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.

Pour réaliser cette démonstration il faudra :

  • Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées
  • Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.


Lundi 14 mars 2011

Serveur d'évenements Clavier-Souris

Travail effectué

  • Bugs corrigés
    • La connexion de clients simultanées fonctionne
    • Le serveur ne crash plus après la déconnexion d'un client
  • Librairie socket TCP (serveur et client) terminée
  • Démonstration du concept
    • Le pilote de Clavier/Souris est maintenant fonctionnel
    • Le client TCP se connectant à la foxboard et simulant les événements est fonctionnel
    • Nous avons pu controller deux machine avec un clavier et une souris en Ethernet

Conclusion

Nous avons obtenu le résultat espéré, et corrigé les deux principaux bugs.

M. Vantroys nous a ré expliqué sa vision du projet, et le souhait d'économiser les connexions réseau.

Nous allons donc inverser dès la prochaine séance les rôles clients et serveur :

  • Serveurs sur les machines cible
  • Clients sur la Foxboard, connectés aux machines sélectionnés sur l'interface (écran tactile à venir).

Nous prévoyons aussi d'implementer les KeyMaps dont nous allons avoir besoin pour la création d'un log contenant le texte entré au clavier.

Pistes pour développements

Lundi 21 mars 2011 Joyeux noel!

Ecran Tactile

Travail effectué

  • Début de l'étude de l’écran tactile.
    • Installation des outils constructeurs, lecture de la documentation, apprentissage du langage dédié et création d'une liste de composants/dispositifs nécessaires à la programmation du contrôleur intégré.

Programmation réseau et système

Travail effectué : inversion des rôles clients et serveur

  • Le serveur est installé sur une machine cible. Il peut recevoir plusieurs connexion et simule les événements clavier/souris qu'il reçoit.
  • Le client se connecte à plusieurs client et leur envois les événements
    • Pour gagner en rapidité, des threads sont utilisés pour effectuer simultanément les connexions aux différents clients
    • La liste des connexions aux serveurs cibles est stockée dans un tableau. Après l'ajout des threads de connexion, cette liste est devenue une ressource partagée, et a donc été protégée avec la sémaphore POSIX pthread_mutex.

Conclusion et piste pour développement

  • La liste des serveurs est actuellement passée en paramètre du programme client.
    • Stocker la liste des serveur dans un fichier de configuration XML. Utiliser pour cela libxml2.

Jeudi 24 mars 2011

Fichier de configuration XML

Travail effectué

  • Création d'un fichier client_config.xml avec une structure simple
  • Installation de libxml2(-dev) et lecture de la documentation
  • Utilisation d'un exemple de parcours d'arbre avec libxml2
  • Création d'une fonction lisant les serveurs cibles depuis un fichier XML (voir xmlConfig.c)

Lundi 28 mars 2011

Pilote Guitar Hero

Travail effectué

  • Nettoyage et écriture d'une partie du pilote USB Guitar Hero pour uinput

Jeudi 31 mars 2011

Détection des périphériques

Travail effectué

  • Utilisation de inotify pour détecter les périphériques branchés à chaud (après le lancement du logiciel).

Lundi 11 avril 2011

Ecran oled tactile 32028 PMD3T

Travail effectué

  • Installation de Workshop 3 IDE et des pilotes du micro USB.
  • Tests et modification d'exemples simples pour d'imprégner du langage de programmation
  • Test de communication série avec l'écran (réussi)
  • Essai d'utiliser des images sur l'écran (abandonné)
  • Définition d'une première version du protocole de communication série Ecran-Foxboard

Mardi 26 avril 2011

Ecran oled tactile 32028 PMD3T

Travail effectué

  • Écriture de la majorité du code.
    • Protocole communication série dans son ensemble.
    • Interface et effets graphiques bien travaillés.
    • Grande fête pour les 1000 premières lignes de code

Reste a faire

  • Finaliser quelques effets graphiques
  • Terminer d’écrire quelques fonctions de l'interface
  • Tester sur l’écran du projet.
    • Le code est écris entièrement adaptable (normalement) à tout écran 4Dsystem

Références

  • inotify is a Linux kernel subsystem that acts to extend filesystems to notice changes to the filesystem, and report those changes to applications
    Source : inotify - Wikipedia
  • FOX Board G20 is a Linux Embedded Single Board Computer built around an ARM9 microcontroller.
    Source : FOX Board G20
    Serial port