<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Smartin1</id>
		<title>Wiki de Projets IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Smartin1"/>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Smartin1"/>
		<updated>2026-05-17T00:52:13Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=682</id>
		<title>Clavier souris reseau</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=682"/>
				<updated>2011-04-26T17:53:12Z</updated>
		
		<summary type="html">&lt;p&gt;Smartin1 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Modèle:Sommaire droite}}&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.&lt;br /&gt;
&lt;br /&gt;
=== Périphériques ===&lt;br /&gt;
&lt;br /&gt;
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...).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Préparation du projet =&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
* Clavier USB&lt;br /&gt;
* Souris USB&lt;br /&gt;
&lt;br /&gt;
* Foxboard&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED tactile&lt;br /&gt;
** Modèle : [http://www.4dsystems.com.au/prod.php?id=118 µOLED-32024-P1T(GFX)]&lt;br /&gt;
** Taille de la carte : 49.1 x 67.3 x 11.0mm&lt;br /&gt;
** Taille de l'écran : 2.4”, 42mm x 52.6mm &lt;br /&gt;
** Taille de la zone d'affichage : 36.7mm x 49mm &lt;br /&gt;
** Résolution : 240 x 320 QVGA&lt;br /&gt;
** 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.  &lt;br /&gt;
&lt;br /&gt;
== Electronique ==&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED/LCD&lt;br /&gt;
** Connecter l'écran sur les e/s logiques de la Foxboard&lt;br /&gt;
** Mettre en fonctionnement l'écran&lt;br /&gt;
&lt;br /&gt;
== Logiciel ==&lt;br /&gt;
&lt;br /&gt;
* Serveur (sur chaque machine cible)&lt;br /&gt;
** Serveur TCP port 2020&lt;br /&gt;
** Pilote en mode utilisateur en utilisant le module uinput&lt;br /&gt;
&lt;br /&gt;
* Client (sur la Foxboard)&lt;br /&gt;
** Connexions aux serveurs&lt;br /&gt;
** Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (protocole TCP)&lt;br /&gt;
&lt;br /&gt;
* Administration (sur la Foxboard)&lt;br /&gt;
** D'abord en ligne de commande, ensuite avec l'écran tactile&lt;br /&gt;
** Changer les client destinataires, changer la keymap, arrêter le serveur&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]&lt;br /&gt;
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]&lt;br /&gt;
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]&lt;br /&gt;
** [http://xmlsoft.org/html/libxml-tree.html libxml2 documentation : module tree]&lt;br /&gt;
&lt;br /&gt;
= Avancement du projet =&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 février 2011 ==&lt;br /&gt;
&lt;br /&gt;
'''Absence non justifiée'''&lt;br /&gt;
&amp;lt;!-- FAUX! jétais juste transparent...--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vendredi 4 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Choix technique ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).&lt;br /&gt;
&lt;br /&gt;
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.&lt;br /&gt;
&lt;br /&gt;
===  uinput : Pilote de Clavier/Souris virtuel ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Documentation sur le module Linux uinput.&lt;br /&gt;
&lt;br /&gt;
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.&lt;br /&gt;
&lt;br /&gt;
== Lundi 7 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Récupération des événements Clavier/Souris ===&lt;br /&gt;
&lt;br /&gt;
==== logkeys ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) : &lt;br /&gt;
* 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&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nécessité d'écrire notre propre keylogger.&lt;br /&gt;
&lt;br /&gt;
==== Ecriture d'un keylogger ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier&lt;br /&gt;
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.&lt;br /&gt;
&lt;br /&gt;
=== Ecran LCD/OLED ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.&lt;br /&gt;
&lt;br /&gt;
== Jeudi 10 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Commutateur Ethernet ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.&lt;br /&gt;
&lt;br /&gt;
=== Librairie TCP Serveur et Client ===&lt;br /&gt;
&lt;br /&gt;
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).&lt;br /&gt;
* Tester une connexion client-serveur&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''&lt;br /&gt;
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux&lt;br /&gt;
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :&lt;br /&gt;
** Le serveur récupère les événements de tous les périphériques d'entrée utilisateur&lt;br /&gt;
** Les événements sont envoyés à chaque clients&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette démonstration il faudra :&lt;br /&gt;
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées&lt;br /&gt;
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 14 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Bugs corrigés&lt;br /&gt;
** La connexion de clients simultanées fonctionne&lt;br /&gt;
** Le serveur ne crash plus après la déconnexion d'un client&lt;br /&gt;
* Librairie socket TCP (serveur et client) terminée&lt;br /&gt;
* Démonstration du concept&lt;br /&gt;
** Le pilote de Clavier/Souris est maintenant fonctionnel&lt;br /&gt;
** Le client TCP se connectant à la foxboard et simulant les événements est fonctionnel&lt;br /&gt;
** Nous avons pu controller deux machine avec un clavier et une souris en Ethernet&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu le résultat espéré, et corrigé les deux principaux bugs.&lt;br /&gt;
&lt;br /&gt;
M. Vantroys nous a ré expliqué sa vision du projet, et le souhait d'économiser les connexions réseau.&lt;br /&gt;
&lt;br /&gt;
Nous allons donc inverser dès la prochaine séance les rôles clients et serveur : &lt;br /&gt;
* Serveurs sur les machines cible&lt;br /&gt;
* Clients sur la Foxboard, connectés aux machines sélectionnés sur l'interface (écran tactile à venir).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Pistes pour développements'''&lt;br /&gt;
&lt;br /&gt;
* 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&lt;br /&gt;
* Permettre l'ajout d'autres périphériques (Guitar Hero, Wiimote, ...)&lt;br /&gt;
&lt;br /&gt;
== Lundi 21 mars 2011 ''Joyeux noel!'' ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran Tactile ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Début de l'étude de l’écran tactile. &lt;br /&gt;
** 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é.&lt;br /&gt;
&lt;br /&gt;
=== Programmation réseau et système ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué : inversion des rôles clients et serveur'''&lt;br /&gt;
&lt;br /&gt;
* Le serveur est installé sur une machine cible. Il peut recevoir plusieurs connexion et simule les événements clavier/souris qu'il reçoit.&lt;br /&gt;
* Le client se connecte à plusieurs client et leur envois les événements&lt;br /&gt;
** Pour gagner en rapidité, des threads sont utilisés pour effectuer simultanément les connexions aux différents clients&lt;br /&gt;
** 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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion et piste pour développement'''&lt;br /&gt;
&lt;br /&gt;
* La liste des serveurs est actuellement passée en paramètre du programme client.&lt;br /&gt;
** Stocker la liste des serveur dans un fichier de configuration XML. Utiliser pour cela [http://xmlsoft.org/ libxml2].&lt;br /&gt;
&lt;br /&gt;
== Jeudi 24 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration XML ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Création d'un fichier ''client_config.xml'' avec une structure simple&lt;br /&gt;
* Installation de libxml2(-dev) et lecture de la documentation&lt;br /&gt;
* Utilisation d'un exemple de parcours d'arbre avec libxml2&lt;br /&gt;
* Création d'une fonction lisant les serveurs cibles depuis un fichier XML (voir xmlConfig.c)&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Pilote Guitar Hero ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Nettoyage et écriture d'une partie du pilote USB Guitar Hero pour uinput&lt;br /&gt;
&lt;br /&gt;
== Jeudi 31 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Détection des périphériques ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Utilisation de ''[[#R.C3.A9f.C3.A9rences|inotify]]'' pour détecter les périphériques branchés à chaud (après le lancement du logiciel).&lt;br /&gt;
&lt;br /&gt;
== Lundi 11 avril 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran oled tactile 32028 PMD3T ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Installation de [http://www.4dsystems.com.au/prod.php?id=111 Workshop 3 IDE] et des pilotes du micro USB.&lt;br /&gt;
* Tests et modification d'exemples simples pour d'imprégner du langage de programmation&lt;br /&gt;
* Test de communication série avec l'écran (réussi)&lt;br /&gt;
* Essai d'utiliser des images sur l'écran (abandonné)&lt;br /&gt;
* Définition d'une première version du protocole de communication série Ecran-Foxboard&lt;br /&gt;
&amp;lt;!-- this is going to be GREAT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mardi 26 avril 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran oled tactile 32028 PMD3T ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Écriture de la majorité du code.&lt;br /&gt;
**Protocole communication série dans son ensemble.&lt;br /&gt;
**Interface et effets graphiques bien travaillés.&lt;br /&gt;
**Grande fête pour les 1000 premières lignes de code&lt;br /&gt;
&lt;br /&gt;
'''Reste a faire'''&lt;br /&gt;
*Finaliser quelques effets graphiques&lt;br /&gt;
*Terminer d’écrire quelques fonctions de l'interface&lt;br /&gt;
*Tester sur l’écran du projet.&lt;br /&gt;
**Le code est écris entièrement adaptable (normalement) à tout écran 4Dsystem&lt;br /&gt;
&amp;lt;!-- J'en peux plus.... ce langage est tellement limité!!!!! --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
* '''inotify''' is a Linux kernel subsystem that acts to extend filesystems to notice changes to the filesystem, and report those changes to applications&amp;lt;br /&amp;gt;Source : [http://en.wikipedia.org/wiki/Inotify inotify - Wikipedia]&lt;/div&gt;</summary>
		<author><name>Smartin1</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=681</id>
		<title>Clavier souris reseau</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=681"/>
				<updated>2011-04-26T17:49:21Z</updated>
		
		<summary type="html">&lt;p&gt;Smartin1 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Modèle:Sommaire droite}}&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.&lt;br /&gt;
&lt;br /&gt;
=== Périphériques ===&lt;br /&gt;
&lt;br /&gt;
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...).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Préparation du projet =&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
* Clavier USB&lt;br /&gt;
* Souris USB&lt;br /&gt;
&lt;br /&gt;
* Foxboard&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED tactile&lt;br /&gt;
** Modèle : [http://www.4dsystems.com.au/prod.php?id=118 µOLED-32024-P1T(GFX)]&lt;br /&gt;
** Taille de la carte : 49.1 x 67.3 x 11.0mm&lt;br /&gt;
** Taille de l'écran : 2.4”, 42mm x 52.6mm &lt;br /&gt;
** Taille de la zone d'affichage : 36.7mm x 49mm &lt;br /&gt;
** Résolution : 240 x 320 QVGA&lt;br /&gt;
** 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.  &lt;br /&gt;
&lt;br /&gt;
== Electronique ==&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED/LCD&lt;br /&gt;
** Connecter l'écran sur les e/s logiques de la Foxboard&lt;br /&gt;
** Mettre en fonctionnement l'écran&lt;br /&gt;
&lt;br /&gt;
== Logiciel ==&lt;br /&gt;
&lt;br /&gt;
* Serveur (sur chaque machine cible)&lt;br /&gt;
** Serveur TCP port 2020&lt;br /&gt;
** Pilote en mode utilisateur en utilisant le module uinput&lt;br /&gt;
&lt;br /&gt;
* Client (sur la Foxboard)&lt;br /&gt;
** Connexions aux serveurs&lt;br /&gt;
** Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (protocole TCP)&lt;br /&gt;
&lt;br /&gt;
* Administration (sur la Foxboard)&lt;br /&gt;
** D'abord en ligne de commande, ensuite avec l'écran tactile&lt;br /&gt;
** Changer les client destinataires, changer la keymap, arrêter le serveur&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]&lt;br /&gt;
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]&lt;br /&gt;
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]&lt;br /&gt;
** [http://xmlsoft.org/html/libxml-tree.html libxml2 documentation : module tree]&lt;br /&gt;
&lt;br /&gt;
= Avancement du projet =&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 février 2011 ==&lt;br /&gt;
&lt;br /&gt;
'''Absence non justifiée'''&lt;br /&gt;
&lt;br /&gt;
== Vendredi 4 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Choix technique ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).&lt;br /&gt;
&lt;br /&gt;
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.&lt;br /&gt;
&lt;br /&gt;
===  uinput : Pilote de Clavier/Souris virtuel ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Documentation sur le module Linux uinput.&lt;br /&gt;
&lt;br /&gt;
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.&lt;br /&gt;
&lt;br /&gt;
== Lundi 7 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Récupération des événements Clavier/Souris ===&lt;br /&gt;
&lt;br /&gt;
==== logkeys ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) : &lt;br /&gt;
* 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&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nécessité d'écrire notre propre keylogger.&lt;br /&gt;
&lt;br /&gt;
==== Ecriture d'un keylogger ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier&lt;br /&gt;
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.&lt;br /&gt;
&lt;br /&gt;
=== Ecran LCD/OLED ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.&lt;br /&gt;
&lt;br /&gt;
== Jeudi 10 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Commutateur Ethernet ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.&lt;br /&gt;
&lt;br /&gt;
=== Librairie TCP Serveur et Client ===&lt;br /&gt;
&lt;br /&gt;
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).&lt;br /&gt;
* Tester une connexion client-serveur&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''&lt;br /&gt;
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux&lt;br /&gt;
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :&lt;br /&gt;
** Le serveur récupère les événements de tous les périphériques d'entrée utilisateur&lt;br /&gt;
** Les événements sont envoyés à chaque clients&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette démonstration il faudra :&lt;br /&gt;
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées&lt;br /&gt;
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 14 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Bugs corrigés&lt;br /&gt;
** La connexion de clients simultanées fonctionne&lt;br /&gt;
** Le serveur ne crash plus après la déconnexion d'un client&lt;br /&gt;
* Librairie socket TCP (serveur et client) terminée&lt;br /&gt;
* Démonstration du concept&lt;br /&gt;
** Le pilote de Clavier/Souris est maintenant fonctionnel&lt;br /&gt;
** Le client TCP se connectant à la foxboard et simulant les événements est fonctionnel&lt;br /&gt;
** Nous avons pu controller deux machine avec un clavier et une souris en Ethernet&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu le résultat espéré, et corrigé les deux principaux bugs.&lt;br /&gt;
&lt;br /&gt;
M. Vantroys nous a ré expliqué sa vision du projet, et le souhait d'économiser les connexions réseau.&lt;br /&gt;
&lt;br /&gt;
Nous allons donc inverser dès la prochaine séance les rôles clients et serveur : &lt;br /&gt;
* Serveurs sur les machines cible&lt;br /&gt;
* Clients sur la Foxboard, connectés aux machines sélectionnés sur l'interface (écran tactile à venir).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Pistes pour développements'''&lt;br /&gt;
&lt;br /&gt;
* 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&lt;br /&gt;
* Permettre l'ajout d'autres périphériques (Guitar Hero, Wiimote, ...)&lt;br /&gt;
&lt;br /&gt;
== Lundi 21 mars 2011 ''Joyeux noel!'' ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran Tactile ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Début de l'étude de l’écran tactile. &lt;br /&gt;
** 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é.&lt;br /&gt;
&lt;br /&gt;
=== Programmation réseau et système ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué : inversion des rôles clients et serveur'''&lt;br /&gt;
&lt;br /&gt;
* Le serveur est installé sur une machine cible. Il peut recevoir plusieurs connexion et simule les événements clavier/souris qu'il reçoit.&lt;br /&gt;
* Le client se connecte à plusieurs client et leur envois les événements&lt;br /&gt;
** Pour gagner en rapidité, des threads sont utilisés pour effectuer simultanément les connexions aux différents clients&lt;br /&gt;
** 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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion et piste pour développement'''&lt;br /&gt;
&lt;br /&gt;
* La liste des serveurs est actuellement passée en paramètre du programme client.&lt;br /&gt;
** Stocker la liste des serveur dans un fichier de configuration XML. Utiliser pour cela [http://xmlsoft.org/ libxml2].&lt;br /&gt;
&lt;br /&gt;
== Jeudi 24 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration XML ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Création d'un fichier ''client_config.xml'' avec une structure simple&lt;br /&gt;
* Installation de libxml2(-dev) et lecture de la documentation&lt;br /&gt;
* Utilisation d'un exemple de parcours d'arbre avec libxml2&lt;br /&gt;
* Création d'une fonction lisant les serveurs cibles depuis un fichier XML (voir xmlConfig.c)&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Pilote Guitar Hero ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Nettoyage et écriture d'une partie du pilote USB Guitar Hero pour uinput&lt;br /&gt;
&lt;br /&gt;
== Jeudi 31 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Détection des périphériques ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Utilisation de ''[[#R.C3.A9f.C3.A9rences|inotify]]'' pour détecter les périphériques branchés à chaud (après le lancement du logiciel).&lt;br /&gt;
&lt;br /&gt;
== Lundi 11 avril 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran oled tactile 32028 PMD3T ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Installation de [http://www.4dsystems.com.au/prod.php?id=111 Workshop 3 IDE] et des pilotes du micro USB.&lt;br /&gt;
* Tests et modification d'exemples simples pour d'imprégner du langage de programmation&lt;br /&gt;
* Test de communication série avec l'écran (réussi)&lt;br /&gt;
* Essai d'utiliser des images sur l'écran (abandonné)&lt;br /&gt;
* Définition d'une première version du protocole de communication série Ecran-Foxboard&lt;br /&gt;
&amp;lt;!-- this is going to be GREAT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mardi 26 avril 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran oled tactile 32028 PMD3T ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Écriture de la majorité du code.&lt;br /&gt;
**Protocole communication série dans son ensemble.&lt;br /&gt;
**Interface et effets graphiques bien travaillés.&lt;br /&gt;
**Grande fête pour les 1000 premières lignes de code&lt;br /&gt;
&lt;br /&gt;
'''Reste a faire'''&lt;br /&gt;
*Finaliser quelques effets graphiques&lt;br /&gt;
*Terminer d’écrire quelques fonctions de l'interface&lt;br /&gt;
*Tester sur l’écran du projet.&lt;br /&gt;
**Le code est écris entièrement adaptable (normalement) à tout écran 4Dsystem&lt;br /&gt;
&amp;lt;!-- J'en peux plus.... ce langage est tellement limité!!!!! --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
* '''inotify''' is a Linux kernel subsystem that acts to extend filesystems to notice changes to the filesystem, and report those changes to applications&amp;lt;br /&amp;gt;Source : [http://en.wikipedia.org/wiki/Inotify inotify - Wikipedia]&lt;/div&gt;</summary>
		<author><name>Smartin1</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=597</id>
		<title>Clavier souris reseau</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=597"/>
				<updated>2011-04-11T16:11:10Z</updated>
		
		<summary type="html">&lt;p&gt;Smartin1 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Modèle:Sommaire droite}}&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.&lt;br /&gt;
&lt;br /&gt;
=== Périphériques ===&lt;br /&gt;
&lt;br /&gt;
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...).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Préparation du projet =&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
* Clavier USB&lt;br /&gt;
* Souris USB&lt;br /&gt;
&lt;br /&gt;
* Foxboard&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED tactile&lt;br /&gt;
** Modèle : [http://www.4dsystems.com.au/prod.php?id=118 µOLED-32024-P1T(GFX)]&lt;br /&gt;
** Taille de la carte : 49.1 x 67.3 x 11.0mm&lt;br /&gt;
** Taille de l'écran : 2.4”, 42mm x 52.6mm &lt;br /&gt;
** Taille de la zone d'affichage : 36.7mm x 49mm &lt;br /&gt;
** Résolution : 240 x 320 QVGA&lt;br /&gt;
** 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.  &lt;br /&gt;
&lt;br /&gt;
== Electronique ==&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED/LCD&lt;br /&gt;
** Connecter l'écran sur les e/s logiques de la Foxboard&lt;br /&gt;
** Mettre en fonctionnement l'écran&lt;br /&gt;
&lt;br /&gt;
== Logiciel ==&lt;br /&gt;
&lt;br /&gt;
* Serveur (sur chaque machine cible)&lt;br /&gt;
** Serveur TCP port 2020&lt;br /&gt;
** Pilote en mode utilisateur en utilisant le module uinput&lt;br /&gt;
&lt;br /&gt;
* Client (sur la Foxboard)&lt;br /&gt;
** Connexions aux serveurs&lt;br /&gt;
** Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (protocole TCP)&lt;br /&gt;
&lt;br /&gt;
* Administration (sur la Foxboard)&lt;br /&gt;
** D'abord en ligne de commande, ensuite avec l'écran tactile&lt;br /&gt;
** Changer les client destinataires, changer la keymap, arrêter le serveur&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]&lt;br /&gt;
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]&lt;br /&gt;
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]&lt;br /&gt;
** [http://xmlsoft.org/html/libxml-tree.html libxml2 documentation : module tree]&lt;br /&gt;
&lt;br /&gt;
= Avancement du projet =&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 février 2011 ==&lt;br /&gt;
&lt;br /&gt;
'''Absence non justifiée'''&lt;br /&gt;
&lt;br /&gt;
== Vendredi 4 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Choix technique ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).&lt;br /&gt;
&lt;br /&gt;
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.&lt;br /&gt;
&lt;br /&gt;
===  uinput : Pilote de Clavier/Souris virtuel ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Documentation sur le module Linux uinput.&lt;br /&gt;
&lt;br /&gt;
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.&lt;br /&gt;
&lt;br /&gt;
== Lundi 7 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Récupération des événements Clavier/Souris ===&lt;br /&gt;
&lt;br /&gt;
==== logkeys ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) : &lt;br /&gt;
* 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&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nécessité d'écrire notre propre keylogger.&lt;br /&gt;
&lt;br /&gt;
==== Ecriture d'un keylogger ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier&lt;br /&gt;
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.&lt;br /&gt;
&lt;br /&gt;
=== Ecran LCD/OLED ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.&lt;br /&gt;
&lt;br /&gt;
== Jeudi 10 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Commutateur Ethernet ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.&lt;br /&gt;
&lt;br /&gt;
=== Librairie TCP Serveur et Client ===&lt;br /&gt;
&lt;br /&gt;
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).&lt;br /&gt;
* Tester une connexion client-serveur&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''&lt;br /&gt;
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux&lt;br /&gt;
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :&lt;br /&gt;
** Le serveur récupère les événements de tous les périphériques d'entrée utilisateur&lt;br /&gt;
** Les événements sont envoyés à chaque clients&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette démonstration il faudra :&lt;br /&gt;
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées&lt;br /&gt;
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 14 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Bugs corrigés&lt;br /&gt;
** La connexion de clients simultanées fonctionne&lt;br /&gt;
** Le serveur ne crash plus après la déconnexion d'un client&lt;br /&gt;
* Librairie socket TCP (serveur et client) terminée&lt;br /&gt;
* Démonstration du concept&lt;br /&gt;
** Le pilote de Clavier/Souris est maintenant fonctionnel&lt;br /&gt;
** Le client TCP se connectant à la foxboard et simulant les événements est fonctionnel&lt;br /&gt;
** Nous avons pu controller deux machine avec un clavier et une souris en Ethernet&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu le résultat espéré, et corrigé les deux principaux bugs.&lt;br /&gt;
&lt;br /&gt;
M. Vantroys nous a ré expliqué sa vision du projet, et le souhait d'économiser les connexions réseau.&lt;br /&gt;
&lt;br /&gt;
Nous allons donc inverser dès la prochaine séance les rôles clients et serveur : &lt;br /&gt;
* Serveurs sur les machines cible&lt;br /&gt;
* Clients sur la Foxboard, connectés aux machines sélectionnés sur l'interface (écran tactile à venir).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Pistes pour développements'''&lt;br /&gt;
&lt;br /&gt;
* 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&lt;br /&gt;
* Permettre l'ajout d'autres périphériques (Guitar Hero, Wiimote, ...)&lt;br /&gt;
&lt;br /&gt;
== Lundi 21 mars 2011 ''Joyeux noel!'' ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran Tactile ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Début de l'étude de l’écran tactile. &lt;br /&gt;
** 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é.&lt;br /&gt;
&lt;br /&gt;
=== Programmation réseau et système ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué : inversion des rôles clients et serveur'''&lt;br /&gt;
&lt;br /&gt;
* Le serveur est installé sur une machine cible. Il peut recevoir plusieurs connexion et simule les événements clavier/souris qu'il reçoit.&lt;br /&gt;
* Le client se connecte à plusieurs client et leur envois les événements&lt;br /&gt;
** Pour gagner en rapidité, des threads sont utilisés pour effectuer simultanément les connexions aux différents clients&lt;br /&gt;
** 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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion et piste pour développement'''&lt;br /&gt;
&lt;br /&gt;
* La liste des serveurs est actuellement passée en paramètre du programme client.&lt;br /&gt;
** Stocker la liste des serveur dans un fichier de configuration XML. Utiliser pour cela [http://xmlsoft.org/ libxml2].&lt;br /&gt;
&lt;br /&gt;
== Jeudi 24 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration XML ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Création d'un fichier ''client_config.xml'' avec une structure simple&lt;br /&gt;
* Installation de libxml2(-dev) et lecture de la documentation&lt;br /&gt;
* Utilisation d'un exemple de parcours d'arbre avec libxml2&lt;br /&gt;
* Création d'une fonction lisant les serveurs cibles depuis un fichier XML (voir xmlConfig.c)&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Pilote Guitar Hero ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Nettoyage et écriture d'une partie du pilote USB Guitar Hero pour uinput&lt;br /&gt;
&lt;br /&gt;
== Jeudi 31 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Détection des périphériques ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Utilisation de ''[[#R.C3.A9f.C3.A9rences|inotify]]'' pour détecter les périphériques branchés à chaud (après le lancement du logiciel).&lt;br /&gt;
&lt;br /&gt;
== Lundi 11 avril 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran oled tactile 32028 PMD3T ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Installation de [http://www.4dsystems.com.au/prod.php?id=111 Workshop 3 IDE] et des pilotes du micro USB.&lt;br /&gt;
* Tests et modification d'exemples simples pour d'imprégner du langage de programmation&lt;br /&gt;
* Test de communication série avec l'écran (réussi)&lt;br /&gt;
* Essai d'utiliser des images sur l'écran (abandonné)&lt;br /&gt;
* Définition d'une première version du protocole de communication série Ecran-Foxboard&lt;br /&gt;
&amp;lt;!-- this is going to be GREAT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
* '''inotify''' is a Linux kernel subsystem that acts to extend filesystems to notice changes to the filesystem, and report those changes to applications&amp;lt;br /&amp;gt;Source : [http://en.wikipedia.org/wiki/Inotify inotify - Wikipedia]&lt;/div&gt;</summary>
		<author><name>Smartin1</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=596</id>
		<title>Clavier souris reseau</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=596"/>
				<updated>2011-04-11T16:07:48Z</updated>
		
		<summary type="html">&lt;p&gt;Smartin1 : /* Lundi 11 avril 2011 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Modèle:Sommaire droite}}&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.&lt;br /&gt;
&lt;br /&gt;
=== Périphériques ===&lt;br /&gt;
&lt;br /&gt;
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...).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Préparation du projet =&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
* Clavier USB&lt;br /&gt;
* Souris USB&lt;br /&gt;
&lt;br /&gt;
* Foxboard&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED tactile&lt;br /&gt;
** Modèle : [http://www.4dsystems.com.au/prod.php?id=132 µLCD-24PT(SGC)]&lt;br /&gt;
** Taille : 2.4&amp;quot; - 48.64 x 60.7 x 14mm&lt;br /&gt;
** Taille de la zone d'affichage : 36.72 x 48.96mm&lt;br /&gt;
** Résolution : 240 x 320 QVGA&lt;br /&gt;
** 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. &lt;br /&gt;
&lt;br /&gt;
* Alternative : Ecran OLED non tactile ?&lt;br /&gt;
&lt;br /&gt;
== Electronique ==&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED/LCD&lt;br /&gt;
** Connecter l'écran sur les e/s logiques de la Foxboard&lt;br /&gt;
** Mettre en fonctionnement l'écran&lt;br /&gt;
&lt;br /&gt;
== Logiciel ==&lt;br /&gt;
&lt;br /&gt;
* Serveur (sur chaque machine cible)&lt;br /&gt;
** Serveur TCP port 2020&lt;br /&gt;
** Pilote en mode utilisateur en utilisant le module uinput&lt;br /&gt;
&lt;br /&gt;
* Client (sur la Foxboard)&lt;br /&gt;
** Connexions aux serveurs&lt;br /&gt;
** Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (protocole TCP)&lt;br /&gt;
&lt;br /&gt;
* Administration (sur la Foxboard)&lt;br /&gt;
** D'abord en ligne de commande, ensuite avec l'écran tactile&lt;br /&gt;
** Changer les client destinataires, changer la keymap, arrêter le serveur&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]&lt;br /&gt;
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]&lt;br /&gt;
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]&lt;br /&gt;
** [http://xmlsoft.org/html/libxml-tree.html libxml2 documentation : module tree]&lt;br /&gt;
&lt;br /&gt;
= Avancement du projet =&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 février 2011 ==&lt;br /&gt;
&lt;br /&gt;
'''Absence non justifiée'''&lt;br /&gt;
&lt;br /&gt;
== Vendredi 4 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Choix technique ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).&lt;br /&gt;
&lt;br /&gt;
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.&lt;br /&gt;
&lt;br /&gt;
===  uinput : Pilote de Clavier/Souris virtuel ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Documentation sur le module Linux uinput.&lt;br /&gt;
&lt;br /&gt;
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.&lt;br /&gt;
&lt;br /&gt;
== Lundi 7 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Récupération des événements Clavier/Souris ===&lt;br /&gt;
&lt;br /&gt;
==== logkeys ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) : &lt;br /&gt;
* 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&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nécessité d'écrire notre propre keylogger.&lt;br /&gt;
&lt;br /&gt;
==== Ecriture d'un keylogger ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier&lt;br /&gt;
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.&lt;br /&gt;
&lt;br /&gt;
=== Ecran LCD/OLED ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.&lt;br /&gt;
&lt;br /&gt;
== Jeudi 10 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Commutateur Ethernet ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.&lt;br /&gt;
&lt;br /&gt;
=== Librairie TCP Serveur et Client ===&lt;br /&gt;
&lt;br /&gt;
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).&lt;br /&gt;
* Tester une connexion client-serveur&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''&lt;br /&gt;
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux&lt;br /&gt;
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :&lt;br /&gt;
** Le serveur récupère les événements de tous les périphériques d'entrée utilisateur&lt;br /&gt;
** Les événements sont envoyés à chaque clients&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette démonstration il faudra :&lt;br /&gt;
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées&lt;br /&gt;
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 14 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Bugs corrigés&lt;br /&gt;
** La connexion de clients simultanées fonctionne&lt;br /&gt;
** Le serveur ne crash plus après la déconnexion d'un client&lt;br /&gt;
* Librairie socket TCP (serveur et client) terminée&lt;br /&gt;
* Démonstration du concept&lt;br /&gt;
** Le pilote de Clavier/Souris est maintenant fonctionnel&lt;br /&gt;
** Le client TCP se connectant à la foxboard et simulant les événements est fonctionnel&lt;br /&gt;
** Nous avons pu controller deux machine avec un clavier et une souris en Ethernet&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu le résultat espéré, et corrigé les deux principaux bugs.&lt;br /&gt;
&lt;br /&gt;
M. Vantroys nous a ré expliqué sa vision du projet, et le souhait d'économiser les connexions réseau.&lt;br /&gt;
&lt;br /&gt;
Nous allons donc inverser dès la prochaine séance les rôles clients et serveur : &lt;br /&gt;
* Serveurs sur les machines cible&lt;br /&gt;
* Clients sur la Foxboard, connectés aux machines sélectionnés sur l'interface (écran tactile à venir).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Pistes pour développements'''&lt;br /&gt;
&lt;br /&gt;
* 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&lt;br /&gt;
* Permettre l'ajout d'autres périphériques (Guitar Hero, Wiimote, ...)&lt;br /&gt;
&lt;br /&gt;
== Lundi 21 mars 2011 ''Joyeux noel!'' ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran Tactile ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Début de l'étude de l’écran tactile. &lt;br /&gt;
** 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é.&lt;br /&gt;
&lt;br /&gt;
=== Programmation réseau et système ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué : inversion des rôles clients et serveur'''&lt;br /&gt;
&lt;br /&gt;
* Le serveur est installé sur une machine cible. Il peut recevoir plusieurs connexion et simule les événements clavier/souris qu'il reçoit.&lt;br /&gt;
* Le client se connecte à plusieurs client et leur envois les événements&lt;br /&gt;
** Pour gagner en rapidité, des threads sont utilisés pour effectuer simultanément les connexions aux différents clients&lt;br /&gt;
** 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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion et piste pour développement'''&lt;br /&gt;
&lt;br /&gt;
* La liste des serveurs est actuellement passée en paramètre du programme client.&lt;br /&gt;
** Stocker la liste des serveur dans un fichier de configuration XML. Utiliser pour cela [http://xmlsoft.org/ libxml2].&lt;br /&gt;
&lt;br /&gt;
== Jeudi 24 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration XML ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Création d'un fichier ''client_config.xml'' avec une structure simple&lt;br /&gt;
* Installation de libxml2(-dev) et lecture de la documentation&lt;br /&gt;
* Utilisation d'un exemple de parcours d'arbre avec libxml2&lt;br /&gt;
* Création d'une fonction lisant les serveurs cibles depuis un fichier XML (voir xmlConfig.c)&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Pilote Guitar Hero ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Nettoyage et écriture d'une partie du pilote USB Guitar Hero pour uinput&lt;br /&gt;
&lt;br /&gt;
== Jeudi 31 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Détection des périphériques ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Utilisation de ''[[#R.C3.A9f.C3.A9rences|inotify]]'' pour détecter les périphériques branchés à chaud (après le lancement du logiciel).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 11 avril 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran oled tactile 32028 PMD3T ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Installation de [http://www.4dsystems.com.au/prod.php?id=111 Workshop 3 IDE] et des pilotes du micro USB.&lt;br /&gt;
* Tests et modification d'exemples simples pour d'imprégner du langage de programmation&lt;br /&gt;
* Test de communication série avec l'écran (réussi)&lt;br /&gt;
* Essai d'utiliser des images sur l'écran (abandonné)&lt;br /&gt;
* Définition d'une première version du protocole de communication série Ecran-Foxboard&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- this is going to be GREAT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
* '''inotify''' is a Linux kernel subsystem that acts to extend filesystems to notice changes to the filesystem, and report those changes to applications&amp;lt;br /&amp;gt;Source : [http://en.wikipedia.org/wiki/Inotify inotify - Wikipedia]&lt;/div&gt;</summary>
		<author><name>Smartin1</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=595</id>
		<title>Clavier souris reseau</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=595"/>
				<updated>2011-04-11T16:06:16Z</updated>
		
		<summary type="html">&lt;p&gt;Smartin1 : /* Jeudi 31 mars 2011 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Modèle:Sommaire droite}}&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.&lt;br /&gt;
&lt;br /&gt;
=== Périphériques ===&lt;br /&gt;
&lt;br /&gt;
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...).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Préparation du projet =&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
* Clavier USB&lt;br /&gt;
* Souris USB&lt;br /&gt;
&lt;br /&gt;
* Foxboard&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED tactile&lt;br /&gt;
** Modèle : [http://www.4dsystems.com.au/prod.php?id=132 µLCD-24PT(SGC)]&lt;br /&gt;
** Taille : 2.4&amp;quot; - 48.64 x 60.7 x 14mm&lt;br /&gt;
** Taille de la zone d'affichage : 36.72 x 48.96mm&lt;br /&gt;
** Résolution : 240 x 320 QVGA&lt;br /&gt;
** 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. &lt;br /&gt;
&lt;br /&gt;
* Alternative : Ecran OLED non tactile ?&lt;br /&gt;
&lt;br /&gt;
== Electronique ==&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED/LCD&lt;br /&gt;
** Connecter l'écran sur les e/s logiques de la Foxboard&lt;br /&gt;
** Mettre en fonctionnement l'écran&lt;br /&gt;
&lt;br /&gt;
== Logiciel ==&lt;br /&gt;
&lt;br /&gt;
* Serveur (sur chaque machine cible)&lt;br /&gt;
** Serveur TCP port 2020&lt;br /&gt;
** Pilote en mode utilisateur en utilisant le module uinput&lt;br /&gt;
&lt;br /&gt;
* Client (sur la Foxboard)&lt;br /&gt;
** Connexions aux serveurs&lt;br /&gt;
** Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (protocole TCP)&lt;br /&gt;
&lt;br /&gt;
* Administration (sur la Foxboard)&lt;br /&gt;
** D'abord en ligne de commande, ensuite avec l'écran tactile&lt;br /&gt;
** Changer les client destinataires, changer la keymap, arrêter le serveur&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]&lt;br /&gt;
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]&lt;br /&gt;
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]&lt;br /&gt;
** [http://xmlsoft.org/html/libxml-tree.html libxml2 documentation : module tree]&lt;br /&gt;
&lt;br /&gt;
= Avancement du projet =&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 février 2011 ==&lt;br /&gt;
&lt;br /&gt;
'''Absence non justifiée'''&lt;br /&gt;
&lt;br /&gt;
== Vendredi 4 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Choix technique ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).&lt;br /&gt;
&lt;br /&gt;
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.&lt;br /&gt;
&lt;br /&gt;
===  uinput : Pilote de Clavier/Souris virtuel ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Documentation sur le module Linux uinput.&lt;br /&gt;
&lt;br /&gt;
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.&lt;br /&gt;
&lt;br /&gt;
== Lundi 7 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Récupération des événements Clavier/Souris ===&lt;br /&gt;
&lt;br /&gt;
==== logkeys ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) : &lt;br /&gt;
* 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&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nécessité d'écrire notre propre keylogger.&lt;br /&gt;
&lt;br /&gt;
==== Ecriture d'un keylogger ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier&lt;br /&gt;
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.&lt;br /&gt;
&lt;br /&gt;
=== Ecran LCD/OLED ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.&lt;br /&gt;
&lt;br /&gt;
== Jeudi 10 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Commutateur Ethernet ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.&lt;br /&gt;
&lt;br /&gt;
=== Librairie TCP Serveur et Client ===&lt;br /&gt;
&lt;br /&gt;
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).&lt;br /&gt;
* Tester une connexion client-serveur&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''&lt;br /&gt;
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux&lt;br /&gt;
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :&lt;br /&gt;
** Le serveur récupère les événements de tous les périphériques d'entrée utilisateur&lt;br /&gt;
** Les événements sont envoyés à chaque clients&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette démonstration il faudra :&lt;br /&gt;
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées&lt;br /&gt;
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 14 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Bugs corrigés&lt;br /&gt;
** La connexion de clients simultanées fonctionne&lt;br /&gt;
** Le serveur ne crash plus après la déconnexion d'un client&lt;br /&gt;
* Librairie socket TCP (serveur et client) terminée&lt;br /&gt;
* Démonstration du concept&lt;br /&gt;
** Le pilote de Clavier/Souris est maintenant fonctionnel&lt;br /&gt;
** Le client TCP se connectant à la foxboard et simulant les événements est fonctionnel&lt;br /&gt;
** Nous avons pu controller deux machine avec un clavier et une souris en Ethernet&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu le résultat espéré, et corrigé les deux principaux bugs.&lt;br /&gt;
&lt;br /&gt;
M. Vantroys nous a ré expliqué sa vision du projet, et le souhait d'économiser les connexions réseau.&lt;br /&gt;
&lt;br /&gt;
Nous allons donc inverser dès la prochaine séance les rôles clients et serveur : &lt;br /&gt;
* Serveurs sur les machines cible&lt;br /&gt;
* Clients sur la Foxboard, connectés aux machines sélectionnés sur l'interface (écran tactile à venir).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''Pistes pour développements'''&lt;br /&gt;
&lt;br /&gt;
* 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&lt;br /&gt;
* Permettre l'ajout d'autres périphériques (Guitar Hero, Wiimote, ...)&lt;br /&gt;
&lt;br /&gt;
== Lundi 21 mars 2011 ''Joyeux noel!'' ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran Tactile ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Début de l'étude de l’écran tactile. &lt;br /&gt;
** 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é.&lt;br /&gt;
&lt;br /&gt;
=== Programmation réseau et système ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué : inversion des rôles clients et serveur'''&lt;br /&gt;
&lt;br /&gt;
* Le serveur est installé sur une machine cible. Il peut recevoir plusieurs connexion et simule les événements clavier/souris qu'il reçoit.&lt;br /&gt;
* Le client se connecte à plusieurs client et leur envois les événements&lt;br /&gt;
** Pour gagner en rapidité, des threads sont utilisés pour effectuer simultanément les connexions aux différents clients&lt;br /&gt;
** 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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion et piste pour développement'''&lt;br /&gt;
&lt;br /&gt;
* La liste des serveurs est actuellement passée en paramètre du programme client.&lt;br /&gt;
** Stocker la liste des serveur dans un fichier de configuration XML. Utiliser pour cela [http://xmlsoft.org/ libxml2].&lt;br /&gt;
&lt;br /&gt;
== Jeudi 24 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration XML ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Création d'un fichier ''client_config.xml'' avec une structure simple&lt;br /&gt;
* Installation de libxml2(-dev) et lecture de la documentation&lt;br /&gt;
* Utilisation d'un exemple de parcours d'arbre avec libxml2&lt;br /&gt;
* Création d'une fonction lisant les serveurs cibles depuis un fichier XML (voir xmlConfig.c)&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Pilote Guitar Hero ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Nettoyage et écriture d'une partie du pilote USB Guitar Hero pour uinput&lt;br /&gt;
&lt;br /&gt;
== Jeudi 31 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Détection des périphériques ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Utilisation de ''[[#R.C3.A9f.C3.A9rences|inotify]]'' pour détecter les périphériques branchés à chaud (après le lancement du logiciel).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 11 avril 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Ecran oled tactile 32028 PMD3T ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Installation de [http://www.4dsystems.com.au/prod.php?id=111 Workshop 3 IDE] et des pilotes du micro USB.&lt;br /&gt;
* Tests et modification d'exemples simples pour d'imprégner du langage de programmation&lt;br /&gt;
* Essai d'utiliser des images sur l'écran (abandonné)&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
* '''inotify''' is a Linux kernel subsystem that acts to extend filesystems to notice changes to the filesystem, and report those changes to applications&amp;lt;br /&amp;gt;Source : [http://en.wikipedia.org/wiki/Inotify inotify - Wikipedia]&lt;/div&gt;</summary>
		<author><name>Smartin1</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=451</id>
		<title>Clavier souris reseau</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=451"/>
				<updated>2011-03-21T17:16:51Z</updated>
		
		<summary type="html">&lt;p&gt;Smartin1 : /* Avancement du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Modèle:Sommaire droite}}&lt;br /&gt;
&lt;br /&gt;
= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.&lt;br /&gt;
&lt;br /&gt;
=== Périphériques ===&lt;br /&gt;
&lt;br /&gt;
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...).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Préparation du projet =&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
* Clavier USB&lt;br /&gt;
* Souris USB&lt;br /&gt;
&lt;br /&gt;
* Foxboard&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED tactile&lt;br /&gt;
** Modèle : [http://www.4dsystems.com.au/prod.php?id=132 µLCD-24PT(SGC)]&lt;br /&gt;
** Taille : 2.4&amp;quot; - 48.64 x 60.7 x 14mm&lt;br /&gt;
** Taille de la zone d'affichage : 36.72 x 48.96mm&lt;br /&gt;
** Résolution : 240 x 320 QVGA&lt;br /&gt;
** 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. &lt;br /&gt;
&lt;br /&gt;
* Alternative : Ecran OLED non tactile ?&lt;br /&gt;
&lt;br /&gt;
== Electronique ==&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED/LCD&lt;br /&gt;
** Connecter l'écran sur les e/s logiques de la Foxboard&lt;br /&gt;
** Mettre en fonctionnement l'écran&lt;br /&gt;
&lt;br /&gt;
== Logiciel ==&lt;br /&gt;
&lt;br /&gt;
* Coté serveur (Foxboard ou autre)&lt;br /&gt;
** Serveur : Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (TCP ? UDP ?)&lt;br /&gt;
** Outil ligne de commande : Changer les client destinataires, changer la keymap, arrêter le serveur&lt;br /&gt;
&lt;br /&gt;
* Coté client&lt;br /&gt;
** Pilote en mode utilisateur en utilisant le module uinput&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]&lt;br /&gt;
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]&lt;br /&gt;
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]&lt;br /&gt;
&lt;br /&gt;
= Avancement du projet =&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 février 2011 ==&lt;br /&gt;
&lt;br /&gt;
'''Absence non justifiée'''&lt;br /&gt;
&lt;br /&gt;
== Vendredi 4 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Choix technique ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).&lt;br /&gt;
&lt;br /&gt;
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.&lt;br /&gt;
&lt;br /&gt;
===  uinput : Pilote de Clavier/Souris virtuel ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Documentation sur le module Linux uinput.&lt;br /&gt;
&lt;br /&gt;
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.&lt;br /&gt;
&lt;br /&gt;
== Lundi 7 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Récupération des événements Clavier/Souris ===&lt;br /&gt;
&lt;br /&gt;
==== logkeys ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) : &lt;br /&gt;
* 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&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nécessité d'écrire notre propre keylogger.&lt;br /&gt;
&lt;br /&gt;
==== Ecriture d'un keylogger ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier&lt;br /&gt;
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.&lt;br /&gt;
&lt;br /&gt;
=== Ecran LCD/OLED ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.&lt;br /&gt;
&lt;br /&gt;
== Jeudi 10 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Commutateur Ethernet ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.&lt;br /&gt;
&lt;br /&gt;
=== Librairie TCP Serveur et Client ===&lt;br /&gt;
&lt;br /&gt;
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).&lt;br /&gt;
* Tester une connexion client-serveur&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''&lt;br /&gt;
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux&lt;br /&gt;
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :&lt;br /&gt;
** Le serveur récupère les événements de tous les périphériques d'entrée utilisateur&lt;br /&gt;
** Les événements sont envoyés à chaque clients&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette démonstration il faudra :&lt;br /&gt;
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées&lt;br /&gt;
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 14 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Bugs corrigés&lt;br /&gt;
** La connexion de clients simultanées fonctionne&lt;br /&gt;
** Le serveur ne crash plus après la déconnexion d'un client&lt;br /&gt;
* Librairie socket TCP (serveur et client) terminée&lt;br /&gt;
* Démonstration du concept&lt;br /&gt;
** Le pilote de Clavier/Souris est maintenant fonctionnel&lt;br /&gt;
** Le client TCP se connectant à la foxboard et simulant les événements est fonctionnel&lt;br /&gt;
** Nous avons pu controller deux machine avec un clavier et une souris en Ethernet&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu le résultat espéré, et corrigé les deux principaux bugs.&lt;br /&gt;
&lt;br /&gt;
M. Vantroys nous a ré expliqué sa vision du projet, et le souhait d'économiser les connexions réseau.&lt;br /&gt;
&lt;br /&gt;
Nous allons donc inverser dès la prochaine séance les rôles clients et serveur : &lt;br /&gt;
* Serveurs sur les machines cible&lt;br /&gt;
* Clients sur la Foxboard, connectés aux machines sélectionnés sur l'interface (écran tactile à venir).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Pistes pour développements'''&lt;br /&gt;
&lt;br /&gt;
* 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&lt;br /&gt;
* Permettre l'ajout d'autres périphériques (Guitar Hero, Wiimote, ...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 21 mars 2011 Joyeux noel!==&lt;br /&gt;
&lt;br /&gt;
=== Ecran Tactile ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
*Début de l'étude de l’écran tactile. &lt;br /&gt;
**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é.&lt;/div&gt;</summary>
		<author><name>Smartin1</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=405</id>
		<title>Clavier souris reseau</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=405"/>
				<updated>2011-03-14T17:49:17Z</updated>
		
		<summary type="html">&lt;p&gt;Smartin1 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.&lt;br /&gt;
&lt;br /&gt;
=== Connectique ===&lt;br /&gt;
Les périphériques se raccorderont au réseau via une connexion Ethernet filaire ou via une connexion WiFi. &lt;br /&gt;
&lt;br /&gt;
= Préparation du projet =&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
* Clavier USB&lt;br /&gt;
* Souris USB&lt;br /&gt;
&lt;br /&gt;
* Foxboard&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED tactile&lt;br /&gt;
** Modèle : [http://www.4dsystems.com.au/prod.php?id=132 µLCD-24PT(SGC)]&lt;br /&gt;
** Taille : 2.4&amp;quot; - 48.64 x 60.7 x 14mm&lt;br /&gt;
** Taille de la zone d'affichage : 36.72 x 48.96mm&lt;br /&gt;
** Résolution : 240 x 320 QVGA&lt;br /&gt;
** 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. &lt;br /&gt;
&lt;br /&gt;
* Alternative : Ecran OLED non tactile ?&lt;br /&gt;
&lt;br /&gt;
== Electronique ==&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED/LCD&lt;br /&gt;
** Connecter l'écran sur les e/s logiques de la Foxboard&lt;br /&gt;
** Mettre en fonctionnement l'écran&lt;br /&gt;
&lt;br /&gt;
== Logiciel ==&lt;br /&gt;
&lt;br /&gt;
* Coté serveur (Foxboard ou autre)&lt;br /&gt;
** Serveur : Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (TCP ? UDP ?)&lt;br /&gt;
** Outil ligne de commande : Changer les client destinataires, changer la keymap, arrêter le serveur&lt;br /&gt;
&lt;br /&gt;
* Coté client&lt;br /&gt;
** Pilote en mode utilisateur en utilisant le module uinput&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]&lt;br /&gt;
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]&lt;br /&gt;
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]&lt;br /&gt;
&lt;br /&gt;
= Avancement du projet =&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 février 2011 ==&lt;br /&gt;
&lt;br /&gt;
'''Absence non justifiée'''&lt;br /&gt;
&lt;br /&gt;
== Vendredi 4 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Choix technique ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).&lt;br /&gt;
&lt;br /&gt;
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.&lt;br /&gt;
&lt;br /&gt;
===  uinput : Pilote de Clavier/Souris virtuel ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Documentation sur le module Linux uinput.&lt;br /&gt;
&lt;br /&gt;
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.&lt;br /&gt;
&lt;br /&gt;
== Lundi 7 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Récupération des événements Clavier/Souris ===&lt;br /&gt;
&lt;br /&gt;
==== logkeys ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) : &lt;br /&gt;
* 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&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nécessité d'écrire notre propre keylogger.&lt;br /&gt;
&lt;br /&gt;
==== Ecriture d'un keylogger ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier&lt;br /&gt;
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.&lt;br /&gt;
&lt;br /&gt;
=== Ecran LCD/OLED ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.&lt;br /&gt;
&lt;br /&gt;
== Jeudi 10 mars 2010 ==&lt;br /&gt;
&lt;br /&gt;
=== Commutateur Ethernet ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.&lt;br /&gt;
&lt;br /&gt;
=== Librairie TCP Serveur et Client ===&lt;br /&gt;
&lt;br /&gt;
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).&lt;br /&gt;
* Tester une connexion client-serveur&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''&lt;br /&gt;
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux&lt;br /&gt;
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :&lt;br /&gt;
** Le serveur récupère les événements de tous les périphériques d'entrée utilisateur&lt;br /&gt;
** Les événements sont envoyés à chaque clients&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette démonstration il faudra :&lt;br /&gt;
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées&lt;br /&gt;
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lundi 14 mars 2010 ==&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Bugs corrigés&lt;br /&gt;
** La connexion de clients simultanées fonctionne&lt;br /&gt;
** Le serveur ne crash plus après la déconnexion d'un client&lt;br /&gt;
* Librairie socket TCP (serveur et client) terminée&lt;br /&gt;
* Démonstration du concept&lt;br /&gt;
** Le pilote de Clavier/Souris est maintenant fonctionnel&lt;br /&gt;
** Le client TCP se connectant à la foxboard et simulant les événements est fonctionnel&lt;br /&gt;
** Nous avons pu controller deux machine avec un clavier et une souris en Ethernet&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous avons obtenu le résultat espéré, et corrigé les deux principaux bugs.&lt;br /&gt;
&lt;br /&gt;
M. Vantroys nous a ré expliqué sa vision du projet, et le souhait d'économiser les connexions réseau.&lt;br /&gt;
&lt;br /&gt;
Nous allons donc inverser les rôles clients et serveur : &lt;br /&gt;
* Serveurs sur les machines cible&lt;br /&gt;
* Clients sur la Foxboard, connectés aux machines sélectionnés sur l'interface (écran tactile à venir).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nous allons intégrer un plus grand nombre de périphériques, notamment la guitare de Mr. Vantroys.&lt;/div&gt;</summary>
		<author><name>Smartin1</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=390</id>
		<title>Clavier souris reseau</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=390"/>
				<updated>2011-03-10T18:05:49Z</updated>
		
		<summary type="html">&lt;p&gt;Smartin1 : /* Serveur d'évenements Clavier-Souris */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.&lt;br /&gt;
&lt;br /&gt;
=== Connectique ===&lt;br /&gt;
Les périphériques se raccorderont au réseau via une connexion Ethernet filaire ou via une connexion WiFi. &lt;br /&gt;
&lt;br /&gt;
= Préparation du projet =&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
* Clavier USB&lt;br /&gt;
* Souris USB&lt;br /&gt;
&lt;br /&gt;
* Foxboard&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED tactile&lt;br /&gt;
** Modèle : [http://www.4dsystems.com.au/prod.php?id=132 µLCD-24PT(SGC)]&lt;br /&gt;
** Taille : 2.4&amp;quot; - 48.64 x 60.7 x 14mm&lt;br /&gt;
** Taille de la zone d'affichage : 36.72 x 48.96mm&lt;br /&gt;
** Résolution : 240 x 320 QVGA&lt;br /&gt;
** 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. &lt;br /&gt;
&lt;br /&gt;
* Alternative : Ecran OLED non tactile ?&lt;br /&gt;
&lt;br /&gt;
== Electronique ==&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED/LCD&lt;br /&gt;
** Connecter l'écran sur les e/s logiques de la Foxboard&lt;br /&gt;
** Mettre en fonctionnement l'écran&lt;br /&gt;
&lt;br /&gt;
== Logiciel ==&lt;br /&gt;
&lt;br /&gt;
* Coté serveur (Foxboard ou autre)&lt;br /&gt;
** Serveur : Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (TCP ? UDP ?)&lt;br /&gt;
** Outil ligne de commande : Changer les client destinataires, changer la keymap, arrêter le serveur&lt;br /&gt;
&lt;br /&gt;
* Coté client&lt;br /&gt;
** Pilote en mode utilisateur en utilisant le module uinput&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]&lt;br /&gt;
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]&lt;br /&gt;
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]&lt;br /&gt;
&lt;br /&gt;
= Avancement du projet =&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 février 2011 ==&lt;br /&gt;
&lt;br /&gt;
'''Absence non justifiée'''&lt;br /&gt;
&lt;br /&gt;
== Vendredi 4 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Choix technique ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).&lt;br /&gt;
&lt;br /&gt;
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.&lt;br /&gt;
&lt;br /&gt;
===  uinput : Pilote de Clavier/Souris virtuel ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Documentation sur le module Linux uinput.&lt;br /&gt;
&lt;br /&gt;
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.&lt;br /&gt;
&lt;br /&gt;
== Lundi 7 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Récupération des événements Clavier/Souris ===&lt;br /&gt;
&lt;br /&gt;
==== logkeys ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) : &lt;br /&gt;
* 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&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nécessité d'écrire notre propre keylogger.&lt;br /&gt;
&lt;br /&gt;
==== Ecriture d'un keylogger ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier&lt;br /&gt;
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.&lt;br /&gt;
&lt;br /&gt;
=== Ecran LCD/OLED ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.&lt;br /&gt;
&lt;br /&gt;
== Jeudi 10 mars 2010 ==&lt;br /&gt;
&lt;br /&gt;
=== Commutateur Ethernet ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.&lt;br /&gt;
&lt;br /&gt;
=== Librairie TCP Serveur et Client ===&lt;br /&gt;
&lt;br /&gt;
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).&lt;br /&gt;
* Tester une connexion client-serveur&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''&lt;br /&gt;
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux&lt;br /&gt;
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :&lt;br /&gt;
** Le serveur récupère les événements de tous les périphériques d'entrée utilisateur&lt;br /&gt;
** Les événements sont envoyés à chaque clients&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette démonstration il faudra :&lt;br /&gt;
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées&lt;br /&gt;
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.&lt;/div&gt;</summary>
		<author><name>Smartin1</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=389</id>
		<title>Clavier souris reseau</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Clavier_souris_reseau&amp;diff=389"/>
				<updated>2011-03-10T18:04:36Z</updated>
		
		<summary type="html">&lt;p&gt;Smartin1 : /* Jeudi 10 mars 2010 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Présentation =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
Les deux périphériques seront connectés à une Foxboard. Un écran OLED sera fixé sur le boitier.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Il faudra également concevoir et développer des mécanismes simples permettant de configurer les périphériques.&lt;br /&gt;
&lt;br /&gt;
=== Connectique ===&lt;br /&gt;
Les périphériques se raccorderont au réseau via une connexion Ethernet filaire ou via une connexion WiFi. &lt;br /&gt;
&lt;br /&gt;
= Préparation du projet =&lt;br /&gt;
&lt;br /&gt;
== Matériel ==&lt;br /&gt;
&lt;br /&gt;
* Clavier USB&lt;br /&gt;
* Souris USB&lt;br /&gt;
&lt;br /&gt;
* Foxboard&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED tactile&lt;br /&gt;
** Modèle : [http://www.4dsystems.com.au/prod.php?id=132 µLCD-24PT(SGC)]&lt;br /&gt;
** Taille : 2.4&amp;quot; - 48.64 x 60.7 x 14mm&lt;br /&gt;
** Taille de la zone d'affichage : 36.72 x 48.96mm&lt;br /&gt;
** Résolution : 240 x 320 QVGA&lt;br /&gt;
** 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. &lt;br /&gt;
&lt;br /&gt;
* Alternative : Ecran OLED non tactile ?&lt;br /&gt;
&lt;br /&gt;
== Electronique ==&lt;br /&gt;
&lt;br /&gt;
* Ecran OLED/LCD&lt;br /&gt;
** Connecter l'écran sur les e/s logiques de la Foxboard&lt;br /&gt;
** Mettre en fonctionnement l'écran&lt;br /&gt;
&lt;br /&gt;
== Logiciel ==&lt;br /&gt;
&lt;br /&gt;
* Coté serveur (Foxboard ou autre)&lt;br /&gt;
** Serveur : Enregistrer les événements clavier et souris, puis les transmettre sur le réseau (TCP ? UDP ?)&lt;br /&gt;
** Outil ligne de commande : Changer les client destinataires, changer la keymap, arrêter le serveur&lt;br /&gt;
&lt;br /&gt;
* Coté client&lt;br /&gt;
** Pilote en mode utilisateur en utilisant le module uinput&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** [http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch24.html Linux Kernel API - Chapter 24. Input Subsystem]&lt;br /&gt;
** [http://www.blueicefield.com/2010/02/11/un-petit-keylogger-sous-linux/ Exemple de keylogger Linux]&lt;br /&gt;
** [http://thiemonge.org/getting-started-with-uinput Exemple uinput en espace utilisateur]&lt;br /&gt;
&lt;br /&gt;
= Avancement du projet =&lt;br /&gt;
&lt;br /&gt;
== Lundi 28 février 2011 ==&lt;br /&gt;
&lt;br /&gt;
'''Absence non justifiée'''&lt;br /&gt;
&lt;br /&gt;
== Vendredi 4 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Choix technique ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation d'une Arduino, test du programme LED clignotante (pour se rafraîchir la mémoire sur le fonctionnement de Arduino).&lt;br /&gt;
&lt;br /&gt;
Démontage d'un souris, pour regarder comment y récupérer les signaux des interrupteurs, de la molette, du capteur optique...&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Après discussion avec le professeur, abandon du Arduino pour utiliser exclusivement Foxboard auquel on connecte un écran LCD/OLED tactile.&lt;br /&gt;
&lt;br /&gt;
===  uinput : Pilote de Clavier/Souris virtuel ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Documentation sur le module Linux uinput.&lt;br /&gt;
&lt;br /&gt;
Test du code source exemple : requiert les droits root pour charger le module uinput et exécuter le pilote.&lt;br /&gt;
&lt;br /&gt;
== Lundi 7 mars 2011 ==&lt;br /&gt;
&lt;br /&gt;
=== Récupération des événements Clavier/Souris ===&lt;br /&gt;
&lt;br /&gt;
==== logkeys ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Installation du keylogger ''logkeys'', disponible sur les dépôts Debian pour l'architecture ARM (celle de la Foxboard) : &lt;br /&gt;
* 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&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nécessité d'écrire notre propre keylogger.&lt;br /&gt;
&lt;br /&gt;
==== Ecriture d'un keylogger ====&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
* Nécessité de faire appel à un keymap pour déchiffrer les frappes Clavier&lt;br /&gt;
* Possibilité d'utiliser la fonction écrite pour récupérer les événements clavier ET souris.&lt;br /&gt;
&lt;br /&gt;
=== Ecran LCD/OLED ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Recherche d'un écran LCD/OLED tactile à prix plus abordable, lecture des documentations.&lt;br /&gt;
&lt;br /&gt;
== Jeudi 10 mars 2010 ==&lt;br /&gt;
&lt;br /&gt;
=== Commutateur Ethernet ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
Nous avons manifesté le besoin d'avoir davantage de prise Ethernet, nous avons donc configuré un Commutateur 24 ports.&lt;br /&gt;
&lt;br /&gt;
=== Librairie TCP Serveur et Client ===&lt;br /&gt;
&lt;br /&gt;
Sylvain avais déjà commencé à écrire cette librairie pour le tutorat Système et Réseaux.&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Finir d'écrire les fonctions de la librairie grace aux exemples du cours de Xavier Redon (formidable!).&lt;br /&gt;
* Tester une connexion client-serveur&lt;br /&gt;
&lt;br /&gt;
=== Serveur d'évenements Clavier-Souris ===&lt;br /&gt;
&lt;br /&gt;
'''Travail effectué'''&lt;br /&gt;
&lt;br /&gt;
* Fonction listant les périphériques présents dans ''/dev/input/by-id/''&lt;br /&gt;
* Création d'un serveur TCP, en utilisant les librairies Socket et Threads du tutorat Système et Réseaux&lt;br /&gt;
* Grâce au travail de lundi (récupération des événements Clavier/Souris), modification du serveur TCP :&lt;br /&gt;
** Le serveur récupère les événements de tous les périphériques&lt;br /&gt;
** Les événements sont envoyés à chaque clients&lt;br /&gt;
&lt;br /&gt;
'''Conclusion'''&lt;br /&gt;
&lt;br /&gt;
Nous espérons en fin de séance prochaine faire une première démonstration de clavier/souris en réseau.&lt;br /&gt;
&lt;br /&gt;
Pour réaliser cette démonstration il faudra :&lt;br /&gt;
* Corriger un bug dans le serveur empêchant plusieurs connexions de clients simultanées&lt;br /&gt;
* Continuer le pilote de Clavier/Souris virtuel pour se connecter au serveur TCP et en récupérer les événements.&lt;/div&gt;</summary>
		<author><name>Smartin1</name></author>	</entry>

	</feed>