3 Utilisation avancée du Bluetooth
3.1 Contrôle à distance
Imaginez avoir à donner une présentation, ou bien faire une projection sans la moindre envie de sortir de votre confortable canapé pour effectuer des réglages. C'est ici que la prise de contrôle Bluetooth solutionne pas mal de chose:
$ sdptool browse 00:16:20:9D:D1:DD
[...]
Service Name: Mouse & Keyboard
Service Description: Remote Control
Service Provider: Sony Ericsson
Service RecHandle: 0x10009
Service Class ID List:
"Human Interface Device" (0x1124)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 17
"HIDP" (0x0011)
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Human Interface Device" (0x1124)
Version: 0x0100
Dans le premier chapitre, nous avons rapidement évoqué hidd, nous allons en parler ici. Deux choix s'offrent a nous pour le lancement:
- mode serveur, où hidd est lancé comme un daemon en tache de fond attendant pour des connections entrantes
- mode connexion, hidd va tenter de se connecter directement au périphérique pour débuter la prise de contrôle avec ce dernier
La différence réside dans qui initie la connexion en premier. Nous utilisons ici le mode serveur, puis débutons la prise de contrôle depuis le téléphone.
$ hidd -n --server
hidd[5654]: Bluetooth HID daemon
//depuis le telephone nous démarrons
//l'application de prise de contrôle. (voir Outils)
hidd[5668]: New HID device 00:16:20:9D:D1:DD (Sony Ericsson..)
Vous avez maintenant entre vos mains un contrôle total sur votre ordinateur, a distance a travers la connexion Bluetooth. L'interface de prise de contrôle varie en fonction des téléphones et peut être plus ou moins intuitive. Voici ce avec quoi je me retrouve:
Les contrôles sont déjà pré-définis ici, et il me vient à l'idée de modifier le mapping pour l'adapter à mes besoins. Heureusement, Sony-Ericsson documente son interface de Bluetooth HID remote control. Si vous êtes en possession d'une autre marque, le constructeur devrait avoir un document similaire à présenter pour personnaliser la prise de contrôle.
Je vais me référer à la documentation Developers' Guidelines - Bluetooth HID remote control. En bref, il est possible de créer sa propre configuration HID, et voici comment procéder:
- Créer le fichier de configuration des touches: ce fichier doit avoir l'extension kcf. La structure ressemble de manière assez proche à celle d'un fichier XML:
<SONY_ERICSSON_REMOTE_CONTROL_CONFIGURATION
VERSION = "1.0">
<KEYMAP>
<KEY_1>
<ACTION>
<KEYBOARD MODIFIERS = "00" USAGEID = "4E"/>
<!-- page down -->
</ACTION>
</KEY_1>
<KEY_2>
<ACTION>
<KEYBOARD MODIFIERS = "00" USAGEID = "09"/>
<!-- f -->
</ACTION>
</KEY_2>
<KEY_3>
<ACTION>
<KEYBOARD MODIFIERS = "00" USAGEID = "4B"/>
<!-- page up -->
</ACTION>
</KEY_3>
<KEY_4>
<ACTION>
<KEYBOARD MODIFIERS = "00" USAGEID = "50"/>
<!-- left arr -->
</ACTION>
</KEY_4>
<KEY_5>
<ACTION>
<KEYBOARD MODIFIERS = "00" USAGEID = "13"/>
<!-- p -->
</ACTION>
</KEY_5>
<KEY_6>
<ACTION>
<KEYBOARD MODIFIERS = "00" USAGEID = "4F"/>
<!-- right arr -->
</ACTION>
</KEY_6>
<KEY_7>
<ACTION>
<KEYBOARD MODIFIERS = "05" USAGEID = "10"/>
<!-- ctrl+alt+m: mute -->
</ACTION>
</KEY_7>
<KEY_9>
<ACTION>
<KEYBOARD MODIFIERS = "06" USAGEID = "2B"/>
<!-- alt+shift+tab-->
</ACTION>
</KEY_9>
<KEY_VOL_UP>
<ACTION>
<KEYBOARD MODIFIERS = "05" USAGEID = "52"/>
<!-- ctrl+alt+up_arrow: vol up -->
</ACTION>
</KEY_VOL_UP>
<KEY_VOL_DOWN>
<ACTION>
<KEYBOARD MODIFIERS = "05" USAGEID = "51"/>
<!-- ctrl+alt+down_arrow: vol down -->
</ACTION>
</KEY_VOL_DOWN>
<KEY_CAM>
<ACTION>
<KEYBOARD MODIFIERS = "05" USAGEID = "63"/>
<!-- ctrl+alt+del : halt/init 0 -->
</ACTION>
</KEY_CAM>
</KEYMAP>
</SONY_ERICSSON_REMOTE_CONTROL_CONFIGURATION>
Il n'est pas nécessaire de donner un long discours pour la compréhension de ce qui précède. Mentionnons juste que l'attribue MODIFIERS est utilisé pour altérer la séquence définie par USAGEID. USAGEID stockent le code hexadécimal que l'on peut trouver dans le document Universal Serial Bus, HID Usage Tables - par exemple A est associé à 04, la touche TAB est mappé sur 2B, etc. - alors que MODIFIERS est un bitmask qui se calcule grâce au tableau présent en page 16 du document de Sony. De cette façon, on comprend que la touche KEY_VOL_UP du téléphone est liée à la séquence Ctrl+Alt+up_arrow sur le système. Cette séquence est un binding que j'utilise avec le magnifique programme qu'est xbindkeys, qui va à son tour appeler aumix -v+5 pour monter le volume. Cette configuration de touche ci-dessus est dédiée à une utilisation avec un lecteur multimédia pour passer en plein écran, lecture/pause, avance/retour rapide, éteindre l'ordinateur, déplacer le curseur etc.
Une dernière chose qu'il est bon de mentionner sur la configuration d'un SE et qu'il n'est pas requis de faire figurer les lignes de contrôle de la souris. Les déplacements et clics marchent directement comme il se doit.
- Créer l'image: si vous voulez vraiment personnaliser l'interface sur le mobile, il est possible de dessiner ou reprendre une des images déjà présente sur le téléphone et l'insérer dans cette nouvelle configuration. La taille peut varier mais devrait respecter la résolution de l'écran du téléphone. Voici ce que j'obtiens:

- Packing: la dernière étape consiste en la création d'une archive tar, et de la renommer avec l'extension hid.
$ tar -tvf mine.hid
-rw-r--r-- andro/users 11887 2006-10-17 01:48:41 mine.jpg
-rw-r--r-- andro/users 1587 2006-10-17 02:00:26 mine.kcf
Il ne reste plus qu'à envoyer ce fichier HID au téléphone qui se fera un plaisir de le prendre en charge et de l'ajouter à vos configurations HID favorites!
3.2 SSH et votre mobile
Note: cette courte partie n'est pas directement lie au technologies de Bluetooth, mais devrait en intéresser plus d'un.
SSH - ou mieux, OpenSSH - est votre meilleur amis et votre téléphone supporte Java. Bonne nouvelle, il existe un petit logiciel OSS nommé MidpSSH. Caractéristiques:
- client SSH v1 et v2
- Macros & ssh keys bindings
- moniteur de trafic
- Sessions & profils
- sous GPL
Téléchargez la bonne archive jar sur votre téléphone depuis le site web puis transférez et lancez l'application. Après avoir configuré les communications de données sur votre téléphone, MidpSSH pourra se connecter directement à votre fournisseur télécom qui sortira sur Internet pour enfin aboutir sur le serveur ssh de votre choix. Un simple terminal (certes miniature) se présente à vous en attendant vos ordres.
Revenons vers le Bluetooth à proprement parler qui regorge de modes d'utilisations.
3.3 Dial-up over Bluetooth
Imaginez vous dans un endroit où vous n'avez aucune connexion a Internet. Vous voulez pourtant vous y connecter et votre téléphone lui est couvert par le réseau. Pourquoi ne pas l'utiliser comme modem? Voyons si le téléphone supporte le service adéquat, DUN:
$ sdptool browse 00:16:20:9D:D1:DD
[...]
Service Name: Dial-up Networking
Service RecHandle: 0x10001
Service Class ID List:
"Dialup Networking" (0x1103)
"Generic Networking" (0x1201)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Profile Descriptor List:
"Dialup Networking" (0x1103)
Version: 0x0100
[...]
Les lignes ci-dessus apparaissant, la connexion va pouvoir prendre place. Le seul requis est qu'une implementation PPP soit installe sur votre ordinateur. Grâce à rfcomm dont nous avons parle precedemment et PPP (je pense a Paul's PPP Package), vous êtes en bonne voie pour envoyer des commandes AT à votre téléphone. Les commandes AT sont un langage que nous pouvons utiliser pour communiquer avec un modem, soit composer, appeler/répondre, changer le volume, la sonnerie etc.
Tout d'abord, configurons un mappage rfcomm:
# rfcomm bind 0 00:16:20:9D:D1:DD 1
# rfcomm show
rfcomm0: 00:16:20:9D:D1:DD channel 1 clean
# ls -l /dev/rfcomm0
crw-rw---- 1 root root 216, 0 Oct 17 22:52 /dev/rfcomm0
Nous devons aussi mettre en place le script qui contient les commandes AT.
/etc/ppp/chatscripts/gprs:
ABORT BUSY
ABORT 'NO CARRIER'
ABORT VOICE
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
'' ATZ
OK-AT-OK AT+CGDCONT=1,"IP","websfr"
OK "ATD*99***1#"
CONNECT ''
Remplacer websfr avec l'APN de votre fournisseur.
Créez un nouveau fichier /etc/ppp/peers/btogprs:
/dev/rfcomm0 57600
connect '/usr/sbin/chat -v -f /etc/ppp/chatscripts/gprs'
noauth
defaultroute
debug
De cette façon, chat va exécuter les commandes AT pour ppp et ainsi initier la connexion.
Tentons notre chance (ne pas oublier de modprober les modules ppp si nécessaire):
# plog -f & //log en console
# pon btogprs //appel de la connexion btogprs
[...]
Oct 16 23:37:58 tux chat[15561]: ATD*99***1#^M^M
Oct 16 23:37:58 tux chat[15561]: CONNECT
Oct 16 23:37:58 tux chat[15561]: -- got it
Oct 16 23:37:58 tux chat[15561]: send (^M)
Oct 16 23:37:58 tux pppd[15560]: Serial connection established.
Oct 16 23:37:58 tux pppd[15560]: using channel 18
Oct 16 23:37:58 tux pppd[15560]: Using interface ppp0
Oct 16 23:37:58 tux pppd[15560]: Connect: ppp0 <--> /dev/rfcomm0
Si l'affichage ressemble a celui ci-dessus, il se peut que les connections AT ont bien été envoyé au téléphone. De plus, le lien PPP de l'interface ppp0 vers /dev/rfcomm0 devrait être établit. Comme avec MidpSSH, les communications de données doivent être configurées sur le téléphone. Jetez un coup d'oeil à la table de routage et c'est partit.
3.4 Scripting et proximité
Mes derniers mots sont dédiés à un script sympathique que l'on peut trouver sur gentoo-wiki. A partir du moment où l'on peut récupérer le RSSI (Received Signal Strength Information) grâce à hcitool, un simple script peut réaliser à peu près n'importe quelle opération basée sur la distance qui sépare le téléphone de l'ordinateur. Avec ce script, la station se vérrouille grâce à xscreensaver dès que vous (et votre téléphone) vous éloignez trop loin, ou plus exactement lors que la valeur RSSI dépasse un seuil limite que l'on configure dans le script. Je positionne cette valeur à -3 pour 5m. Il n'y a plus qu'à essayer!