Les iPAQ et Linux
Note: toutes ces informations sont valables pour mon hp iPAQ h2210 (et certainement beaucoup d'autres).
En cas de problème, consultez les sites officiels des logiciels mentionnés ici.
L'ensemble des procédures a été testé sur les distributions Mandrakelinux et Fedora; la plupart des indications sont donc probablement souvent valables telles quelles, mais des ajustements peuvent être nécessaires selon les distributions.
Les assistants personnels iPAQ de
Hewlett-Packard sont d'excellentes petites machines, qui permettent d'avoir toujours à portée de main un
grand nombre d'outils. Elles sont basées sur des processeurs ARM (mon h2210 est équipé d'un PXA255 XScale @ 400 MHz), et tournent sous Windows Mobile (anciennement Windows CE, puis Pocket PC). Tous mes PC, eux, tournent sous Linux; vous voyez donc venir le challenge :)
Niveau: Ces explications supposent que vous savez installer des logiciels sous Linux, et que vous connaissez la gestion réseau de cet OS.
Synchronisation avec une station Linux
Les outils à destination du PC hôte fournis avec le iPAQ sont exclusivement Microsoft. Un PDA représente-t-il une raison suffisante de booter Windows plutôt que notre environnement Linux habituel? Certainement pas.
La communauté open-source vient une fois de plus à la rescousse en nous proposant
SynCE. Plus qu'un utilitaire, il s'agit véritablement d'une suite de synchronisation incluant divers utilitaires en ligne de commande, ainsi que des intégrations dans les gestionnaires de fenêtres les plus courants.
Installation
La première étape consiste à faire reconnaître le iPAQ par le noyau Linux. Les distributions modernes, telles que
Fedora incluent d'emblée les modules
usbserial et
ipaq. Dans ce cas, il suffit de poser le iPAQ sur sa station d'accueil USB et de l'allumer, ce à quoi le noyau devrait répondre:
kernel: usb 1-2: new full speed USB device using address 96
kernel: usbserial 1-2:1.0:
PocketPC? PDA converter detected
kernel: usb 1-2:
PocketPC? PDA converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
(voir
/var/log/messages à ce sujet)
Si cela ne fonctionne pas, il faudra probablement
recompiler le module.
Le iPAQ est à présent reconnu et nous disposons d'une émulation série sur USB (périphérique
ttyUSB0) sur laquelle nous allons pouvoir établir une connexion PPP. Il est maintenant temps d'installer
SynCE, qui va nous fournir les scripts de connexion et outils de transfert. Le site officiel fournit une excellente
documentation sur l'installation.
Connexion
Ces indications supposent que vous avez déclaré synce-serial-config et synce-serial-start dans le fichier /etc/sudoers; en effet, ces deux commandes doivent être exécutées en tant que root.
Pour se connecter, vérifier que le iPAQ est bien allumé et relié au PC, puis exécuter les commandes suivantes:
dccm
sudo synce-serial-config ttyUSB0
sudo synce-serial-start
De son côté, le iPAQ lance automatiquement la connexion. Une nouvelle interface
ppp0 apparaît, avec par défaut l'IP
192.168.131.102. Le iPAQ, lui, hérite de l'IP
192.168.131.201. Bien entendu, ces adresses sont privées et aucun système de SNAT/Masquerading n'est en place, ce qui signifie que le iPAQ ne peut pas accéder au réseau local ou à Internet en l'état actuel des choses. Nous verrons un peu plus tard comment établir une liaison Internet.
Pour déconnecter le iPAQ, il suffit de fermer la connexion depuis ce dernier ou d'exécuter un
killall -HUP dccm sur l'hôte (ou au pire, un
synce-serial-abort). On peut également déconnecter à partir du iPAQ lui-même.
Pour rétablir une connexion par la suite, je me suis aperçu qu'il pouvait être nécessaire d'éteindre et de rallumer le iPAQ avant de relancer le script de connexion, faute de quoi le iPAQ ne se connecte pas.
Connexion... automatique!
Cela fonctionne assez bien grâce au
script hotplug fourni. Toutefois, je ne saurais trop vous conseiller d'utiliser la
méthode basée sur udev, beaucoup plus propre et fiable. Ces scripts permettent d'exécuter automatiquement
synce-serial-start à la connexion du iPAQ, ce qui permet de s'affranchir des
sudo.
Créez donc les deux fichiers
/etc/udev/rules.d/ipaq.rules
DRIVER="ipaq", NAME="ipaq", SYMLINK="tts/USB%n", GROUP="tty", MODE="0600"
/etc/dev.d/ipaq/synce.dev (exécutable)
#!/bin/sh
LOGFILE=/var/log/synce
if [ "$ACTION" = "add" ] ; then
echo "`date +"%b %d %X"` `uname -n`: iPAQ plugged, starting connection..." >> $LOGFILE
synce-serial-start >> $LOGFILE
elif [ "$ACTION" = "remove" ] ; then
echo "`date +"%b %d %X"` `uname -n`: iPAQ removed" >> $LOGFILE
fi
Il faut cependant encore lancer
dccm en tant qu'utilisateur normal avant de raccorder le PDA; si vous utilisez les intégrations GNOME ou KDE, elles s'en chargeront pour vous.
Résultat: Comme sous Windows, le iPAQ est détecté, allumé et connecté même s'il est posé éteint sur le socle (cerise sur le gâteau avec
synce-gnomevfs et
synce-trayicon, sous GNOME, une icône PDA apparaît et disparaît sur votre bureau, et vous pouvez directement l'explorer...).
Hotplug envers et contre tout
Quelques conseils pour ceux qui tiendraient à utiliser hotplug malgré tout:
Pour mon h2210, les VID/PID sont 0x03f0 et 0x1016.
Délai de déconnexion: par défaut, le script spécifie un délai de 15 secondes (
sleep 15) entre la déconnexion physique du iPAQ et la fermeture effective de la connexion. Cela implique que des utilitaires comme
pls,
pcp.. ou
RAKI (le pendant d'ActiveSync pour
KDE) ne détecteront pas le départ du iPAQ avant 15 secondes. En outre, si le iPAQ est rebranché avant le terme de ce délai, des comportements étranges peuvent se produire.
La solution consiste tout simplement à abaisser le délai à une valeur acceptable. 2 ou 3 secondes devraient largement suffire à assurer un fonctionnement correct; peut-être même pouvez-vous envisager de supprimer ce délai, si cela convient à votre système.
Utilisation
Une fois le iPAQ connecté, il ne vous reste plus qu'à essayer les merveilleux outils à votre disposition, tels que
pls et
pcp, qui vous permettront d'interagir avec le iPAQ en ligne de commande.
Différentes intégrations graphiques sont disponibles sur le site. Il est également possible de synchroniser avec
Evolution grâce à
MultiSync.
Connexion Internet via un poste Linux
Si votre iPAQ n'a pas de fonction WLAN intégrée, et que vous n'avez pas non plus de carte d'extension WLAN, il faut passer par d'autres moyens pour établir une connexion à Internet. Nous allons nous servir d'une connexion PPP sur une ligne série entre le iPAQ et notre poste Linux relié à Internet. Deux possibilités s'offrent à nous:
- Utiliser la connexion PPP établie sur USB par SynCE (rappelez-vous, c'est juste un peu plus haut sur cette page!)
- Mettre en place une émulation série Bluetooth sur laquelle nous allons établir notre propre connexion PPP
Installation du poste Linux
Notez que quelle que soit la solution retenue, le poste Linux sert de point d'entrée dans le réseau; il devra donc dans tous les cas servir de passerelle IP.
Pour la passerelle IP, veillez à disposer du package
iptables.
Si l'on suppose que votre interface réseau classique est
eth0 et que l'interface qui vous reliera au iPAQ sera
ppp0, le script suivant suffit à mettre en place le masquerading:
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i ppp0 -j ACCEPT
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
Afin de sauvegarder ces réglages entre deux redémarrages, rendez-vous dans
/etc/sysctl.conf pour le paramètre
net.ipv4.ip_forward. Les règles iptables peuvent être préservées grâce à la commande
iptables-save, qui permet de générer un fichier
/etc/sysconfig/iptables (distributions de type Redhat).
Connexion via USB
Pour avoir accès au DNS, renseignez la valeur
ms-dns du fichier
/etc/ppp/peers/synce-device avec l'IP de votre DNS.
Bonne nouvelle: à partir de maintenant, si vous connectez votre iPAQ avec SynCE, tout est en place; votre iPAQ a accès à Internet!
Connexion Internet via Bluetooth
Il reste encore un peu de travail. Nous allons mettre un place un NAP (Network Access Point) Bluetooth qui sera l'équivalent sans fil de la connexion SynCE.
Au risque de radoter un peu, je rappelle l'empilement des couches utilisées:
* TCP/IP
* Connexion PPP
* Null modem
* Emulation série Bluetooth
* Connexion Bluetooth
Configuration Bluetooth
Cette installation est basée sur la pile
BlueZ, devenue la pile Bluetooth officielle de Linux dans le noyau 2.4. Vous devez disposer des packages
bluez-utils,
bluez-sdp,
bluez-pan (ou équivalents). On commence par configurer la couche HCI et l'émulation série. Rendez-vous dans le répertoire
/etc/bluetooth et ajoutez (ou dé-commentez) les lignes suivantes dans
hcid.conf:
lm accept,master;
auth enable;
encrypt enable;
Côté émulation série, vous devez disposer de périphériques
/dev/rfcomm[0..n] (où n = 3 devrait largement suffire). Si ce n'est pas le cas, créez-les avec:
mknod /dev/rfcomm0 c 216 0
mknod /dev/rfcomm1 c 216 1
mknod /dev/rfcomm2 c 216 2
...
Configuration PPP
Nous allons faire tourner un service Bluetooth appelé
Network Access Point, qui lancera une instance de
pppd lorsqu'un client Bluetooth s'y connectera. Il faut donc maintenant préparer la configuration PPP correspondante. Créez le fichier
/etc/ppp/peers/btdun suivant:
noauth
local
proxyarp
noipdefault
nodefaultroute
noipx
idle 0
192.168.131.102:192.168.131.201
ms-dns <ip.de.votre.dns>
netmask 255.255.255.0
Par souci de simplicité, nous utilisons ici la même convention d'attribution d'IP que SynCE.
Il ne reste plus qu'à lancer notre service Network Access Point:
pand --listen --role NAP
dund --listen --msdun call btdun
Cette dernière tâche peut être automatisée, selon votre distribution... par exemple, Mandrakelinux et Fedora (non, je n'ai pas d'actions chez eux, mais j'aime bien) installent directement pand et dund en tant que services système. Il suffit de les activer et d'aller spécifier les arguments ci-dessus dans
/etc/sysconfig/pand et
/etc/sysconfig/dund.
Configuration du iPAQ
Pour un iPAQ sous Windows Mobile 2003, accédez au
Bluetooth Manager et tapez sur
Nouveau puis
Connecter! Choisissez successivement
Connexion à Internet,
Via un point d'accès et sélectionnez votre poste Linux. Cochez la case
Connexion sécurisée et cryptée et cliquez enfin sur
Terminer. Votre raccourci de connexion est prêt à être utilisé.
Faire tourner Linux sur le iPAQ
Un peu de technique
Avant de songer à changer d'OS, il faut bien comprendre l'architecture de la machine. Outre son véloce processeur ARM, le iPAQ embarque:
- une mémoire principale SDRAM, utilisée pour le stockage principal et l'exécution.
- une mémoire Flash ROM qui permet de redémarrer l'OS en cas d'extinction totale du PDA, et est partiellement accessible à l'utilisateur pour assurer un stockage persistant en toutes circonstances.
Et là, tout de suite, certains me diront: impossible! Quand j'éteins mon iPAQ, la SDRAM devrait être vidée! Eh bien justement, vous ne l'éteignez pas - vous le mettez en veille. En utilisation normale, un iPAQ n'est jamais éteint, et sa batterie lui sert entre autres à préserver le contenu de la mémoire. Pour un PC, cela équivaudrait à stocker tous les fichiers sur un ramdisk.
Le vif du sujet