J'explique ici comment j'ai pu exploiter mon mobile GPRS pour connecter mon portable à Internet par l'infrarouge. Ces informations sont spécifiques à ma configuration matérielle et logicielle, mais facilement transposables.
Comme d'habitude, tout cela fonctionne chez moi, mais vous est livré sans garantie d'aucune sorte. En particulier, suivez bien les recommandations du Linux Infrared Howto (voir liens) en ce qui concerne les précautions à prendre avant les premiers tests.
Le matériel et les logiciels utilisés :
Voici les étapes nécessaires :
Pour finir, on trouvera les liens dont je me suis largement inspiré pour ce document.
Avant toute chose, utilisons la simplicité debian :
$ sudo apt-get install irda-common irda-tools
Ces deux paquets installeront les programmes nécessaires, tels que irattach, findchip, irdadump.
J'ai suivi les informations du Linux Infrared Howto (voir les liens) en ce qui concerne la compilation des modules et leur configuration.
Il faut bien sûr vérifier au niveau du BIOS que le port infrarouge de la machine est bien activé, et en noter au passage les paramètres (IRQ, port et DMA).
Il existe trois sortes de drivers infrarouges de bas niveau : SIR, dongle et FIR. Le FIR permet d'obtenir de plus grandes vitesses, mais n'est pas forcément reconnu - cela dépend du chipset de votre machine.
Le chipset FIR du Thinkpad T20 est parfaitement reconnu :
$ sudo findchip -v
Found NSC PC87338 Controller at 0x2e, DevID=0x0b, Rev. 2
SIR Base 0x2f8, FIR Base 0x2f8
IRQ = 3, DMA = 3
Enabled: yes, Suspended: no
UART compatible: yes
Half duplex delay = 0 us
Les paramètres d'adresse, d'IRQ et de DMA sont bien sûr ceux choisis au niveau du BIOS.
Les options de compilation du noyau que j'ai retenues sont les suivantes (j'ai supprimé quelques lignes concernant des options inutiles) :
# # IrDA (infrared) support # CONFIG_IRDA=m # # IrDA protocols # CONFIG_IRLAN=m CONFIG_IRNET=m CONFIG_IRCOMM=m # CONFIG_IRDA_ULTRA is not set # # IrDA options # CONFIG_IRDA_CACHE_LAST_LSAP=y CONFIG_IRDA_FAST_RR=y CONFIG_IRDA_DEBUG=y # # Infrared-port device drivers # # SIR device drivers # CONFIG_IRTTY_SIR=m # # FIR device drivers # CONFIG_NSC_FIR=m
J'ai adapté la configuration des modules de façon à intégrer le module nsc-ircc qui gère le chipset NSC PC87338, et à m'assurer qu'il n'y a pas de conflit sur les dispositifs série qui empêcherait le montage de celui-ci (voir la ligne pre-install).
Voici le contenu de /etc/modutils/irda :
# la ligne ci-dessous est commentée car le module # irtty n'est pas nécessaire pour moi dans la mesure # ou j'utilise le driver FIR nsc-ircc # alias tty-ldisc-11 irtty alias char-major-161 ircomm-tty # alias char-major-60 ircomm_tty alias char-major-10-187 irnet # module FIR alias irda0 nsc-ircc pre-install nsc-ircc setserial /dev/ttyS1 uart none # cette option semble nécessaire pour certains téléphones mobiles : options ppp_async flag_time=0
Et bien sûr, ne pas oublier après toute modification :
$ sudo update-modules $ sudo depmod -a
Pour activer l'infrarouge, il est primordial que le module serial ne soit pas monté avant le module irda. On peut alors mettre en place les modules et activer la détection de périphériques infrarouges en une seule commande :
$ sudo irattach irda0 -s
Quelques contrôles :
$ ifconfig
irda0 Lien encap:IrLAP HWaddr 1e:cf:c7:34
UP RUNNING NOARP MTU:2048 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:875 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:8
RX bytes:0 (0.0 b) TX bytes:27375 (26.7 KiB)
[...]
$ lsmod | grep ir
nsc-ircc 13528 1
irda 135692 1 [nsc-ircc]
$ tail /var/log/syslog
Jan 1 23:26:34 IBM_T20 kernel: nsc-ircc, Found chip at base=0x02e
Jan 1 23:26:34 IBM_T20 kernel: nsc-ircc, driver loaded (Dag Brattli)
Jan 1 23:26:34 IBM_T20 kernel: IrDA: Registered device irda0
Jan 1 23:26:34 IBM_T20 kernel: nsc-ircc, Found dongle: Sharp RY5HD01
Jan 1 23:26:34 IBM_T20 irattach: executing: 'echo 1 > /proc/sys/net/irda/discovery'
Jan 1 23:26:34 IBM_T20 irattach: Starting device irda0
Jan 1 23:26:34 IBM_T20 irattach: executing: 'echo IBM_T20 > /proc/sys/net/irda/devname'
Jan 1 23:26:34 IBM_T20 kernel: irlap_change_speed(), setting speed to 9600
On peut alors activer l'infrarouge du téléphone (Connexions / Activation IR / Activé) et le détecter :
$ cat /proc/net/irda/discovery IrLMP: Discovery log: nickname: T300, hint: 0x9124, saddr: 0x1ecfc734, daddr: 0x00005d05
Le GPRS (General Packet Radio Service) est un service relativement nouveau, complémentaire du traditionnel GSM. Avec le GPRS, la transmission se fait par paquets, et est donc facturée à la quantité, et non au temps passé. De plus les débits obtenus sont comparables à ceux d'un modem classiques, ce qui est bien meilleur que les tentatives de connexion via GSM.
Le forfait GPRS de mon opérateur me permet ainsi la transmission de 10 Mo par mois, ce qui dans un sens est ridicule, mais dans un autre est suffisant pour récupérer mes e-mails lorsque je suis absent du bureau ou de chez moi.
Les explications données ici permettent d'utiliser le modem du téléphone pour connecter l'ordinateur à Internet via mon opérateur, ce qui est différent du WAP ou de la récupération des e-mails sur le téléphone - qui sont possibles également avec le même forfait. Mais je me vois mal récupérer sur mon téléphone les mails reçus du boulot, avec force attachements Word et compagnie, pour parfois une simple note (gros gros soupir...)
Pour pouvoir se connecter au GPRS, il faut envoyer un certain nombre de paramètres fournis par votre opérateur. Ces paramètres peuvent être stockés dans le téléphone ou transmis à celui-ci avant la connexion proprement dite. Mon téléphone, acheté dans un coffret opérateur, était préconfiguré pour un certain nombre de profils (WAP, e-mail, MMS), mais pas pour le transfert de données.
Un coup de fil à l'opérateur permet d'obtenir les paramètres nécessaires. Certains téléphones peuvent même être configurés automagiquement à partir d'un SMS (OTA configuration : On The Air).
Les principaux paramètres à renseigner (dans le téléphone) sont les suivants :
Pour renseigner ces paramètres dans le Sony Ericsson T300, choisir le menu Connexions / Comm. Data / Comptes Data / Ajouter Compte.
Bien noter le numéro CID fourni lorsqu'on a validé les informations : il servira à identifier ce profil (parmi les autres, WAP etc.) au moment de la connexion.
La connexion entre l'ordinateur et le téléphone se fait par infrarouge, via /dev/ircomm0, et est gérée par /usr/sbin/pppd. Ce dernier à son tour utilise /usr/sbin/chat pour converser avec le modem.
Nous allons indiquer les paramètres nécessaires à chacun de ces programmes dans des fichiers de configuration.
Les paramètres de pppd sont lus par défaut successivement dans les fichiers suivants (voir manpage) :
/etc/ppp/options ~/.ppprc /etc/ppp/options.ircomm0
De plus, on peut indiquer à pppd un fichier de paramètres particulier, stocké dans /etc/ppp/peers/, dont le nom lui sera fourni sur la ligne de commande par
$ pppd call nom du fichier
Dans ce cas, on pourra placer dans /etc/chatscripts/ la configuration de chat correspondante (voir ci-dessous). Ce fonctionnement est très utilisé, et en particulier par pppconfig sous debian.
Il faut vérifier qu'aucune option des fichiers cités plus haut ne peut gêner la connexion. Il s'agit en particulier de lcp-echo-interval et lcp-echo-failure (voir le GPRS HOWTO). Ces deux options sont présentes par défaut dans /etc/ppp/options, je les ai donc commentées, et ajoutées au fichier de connexion « classique » par le modem de l'ordinateur /etc/ppp/options.modem.
Contenu commenté de /etc/ppp/peers/gprs :
# /etc/ppp/peers/gprs # fichier de configuration pppd # JcB - 30/12/2002 # Ne pas fonctionner en arrière-plan et très bavard nodetach debug # Pas de Harware flow control pour IrDa nocrtscts # Pas de "carrier detection signal" dans le GPRS via IrDa local # interface et vitesse de transmission /dev/ircomm0 115200 # scripts de connexion et déconnexion connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs-connect" disconnect "/usr/sbin/chat -v -f /etc/chatscripts/gprs-disconnect" # pppd ne propose pas d'adresse IP à l'autre extrémité... noipdefault # ...et accepte son idée de notre adresse IP ipcp-accept-local # l'interface ppp devient la route par défaut dans la table de routage defaultroute # options de compression # Il semble que la compression soit ici inutile entre l'ordinateur et le # téléphone, car le goulot d'étranglement est plutôt le GPRS novj nobsdcomp novjccomp nopcomp noaccomp # authentification # le téléphone n'a pas à s'identifier noauth # normalement inutile user jcb # passe ce paramètre aux scripts ip-up # nécessaire pour mettre en place les paramètres # de dns (voir ci-dessous) ipparam gprs #remotename gprs
Passons aux paramètres de connexion...(/etc/chatscripts/gprs-connect)
TIMEOUT 5 ECHO ON ABORT 'BUSY' ABORT 'ERROR' ABORT 'NO ANSWER' ABORT 'NO CARRIER' ABORT 'NO DIALTONE' '' "\rATZ" TIMEOUT 12 SAY "CTRL-C pour déconnecter\n" SAY "Envoi des paramètres de connexion\n" OK 'ATD*98*3#' TIMEOUT 22 SAY "\nAttente de connexion...\n" CONNECT "" SAY "\nConnecté\n"
... et de déconnexion (/etc/chatscripts/gprs-disconnect) :
ABORT 'BUSY' ABORT 'ERROR' ABORT 'NO DIALTONE' SAY "Arrêt du modem\n" "" "\K" "" "+++ATH" SAY "Connexion terminée\n"
Deux commandes AT sont utilisées lors de la connexion. Le traditionnel ATZ réinitialise le modem. La commande de numérotation ATD appelle un numéro spécial *98*3# : celui-ci requiert du modem une session de données GPRS en utilisant le profil stocké sous le CID 3. C'est en effet le numéro CID sous lequel étaient stockés les paramètres de connexion entrés auparavant dans le téléphone (voir ci-dessus, Configuration pppd).
Il existe de nombreuses autres manières de démarrer une session GPRS, voir le guide des commandes AT supportées par votre téléphone ou le GPRS Howto pour quelques exemples.
J'ai utilisé la même mécanisme que celui qui remplace /etc/resolv.conf pour faire apparaître les serveurs de noms primaires et secondaires dans le cadre des connexions ppp « ordinaires ».
Les scripts /etc/ppp/ip-up.d/0dns-up et /etc/ppp/ip-down.d/0dns-down sont chargés de remplacer /etc/resolv.conf par /etc/ppp/resolv/[ipparam] au début de la connexion, et de rétablir celui-ci à la fin. Le paramètre ipparam est renseigné dans la configuration de pppd et vaut ici « gprs ».
Les serveurs de noms primaires et secondaires sont fournis par l'opérateur. Le contenu du fichier /etc/ppp/resolv/gprs est chez moi :
nameserver 172.20.2.10 nameserver 194.6.128.4
Il ne reste qu'à tester la connexion. Assurez-vous que l'infrarouge fonctionne et est activé sur le téléphone. Vérifiez que ce dernier est vu par l'ordinateur (voir ci-dessus Mise en place de l'infrarouge sur le T20).
On peut alors lancer le script de connexion :
$ pppd call gprs
Les options choisies permettent de suivre le déroulement des opérations. Si tout se passe bien, on peut voir les paramètres de la connexion ppp par ifconfig. Bravo, vous êtes connecté !
Dans le cas où cela ne fonctionne pas, essayer d'abord d'identifier le point noir. Les plus gros problèmes que j'aie pu avoir concernaient la liaison infrarouge téléphone-ordinateur : attention aux conflits d'IRQ et d'adresse, penser aussi à vérifier que le module serial n'est pas monté avant les modules infrarouges.
Enfin, il est possible que ces derniers ne supportent pas bien la mise en veille de l'ordinateur : il peut être prudent de les démonter avant la mise en sommeil et de les remonter ensuite.
Se connecter :
$ sudo modprobe -r serial $ sudo irattach irda0 -s $ pon gprs
Il est parfois nécessaire de lancer deux fois le pon gprs avant que le téléphone (son modem) ne se manifeste. Étrange...
Se déconnecter :
A priori, il faut d'abord désactiver l'infrarouge du téléphone. En effet, toute tentative de l'arrêter après la déconnexion se solde par un blocage complet de celui-ci.
$ poff gprs $ sudo ifconfig irda0 down
A Django site.