Aujourd'hui, je m'emmerde ferme à la maison. Pour m'occuper je me lance dans du bricolage : je voudrais utiliser mon téléphone portable pour commander à distance mon ordinateur, en particulier la lecture des vidéos.
J'utilise le matériel suivant :
akampana;
clarinde(tout système d'exploitation GNU/Linux récent convient, par exemple Ubuntu 7.04 Feisty Fawn).
telephommande
Avant que le script ne détecte votre téléphone, il faut
sélectionner dans le menu Connectivité
du téléphone le mode
actif & visible
. Ensuite je vous recommande de vérouiller
le clavier du téléphone en pressant trois secondes sur la touche * ;
autrement, le clavier du téléphone commandera simultanément
l'ordinateur et le téléphone !!!
clarinde ~$telephommande -h
Usage: telephommande [OPTIONS]
Control your computer from a SAGEM myX6-2 phone via Bluetooth.
Use one of the following to specify a phone device:
-a, --address=ADDRESS Connect to the phone at ADDRESS
-n, --name=NAME Connect to the phone named NAME
Various
-d, --debug Print output of subprocesses
-h, --help This help message
clarinde ~$telephommande -n akampana
Device akampana found at address 00:12:37:xx:xx:xx
Connected to akampana
Press Ctrl-C to close connection
Pour connaître les commandes auxquelles correspondent les touches du
téléphone, il y a l'option --info
(ou -i
).
clarinde ~$telephommande -i
Key Command
-----------------------------------
diaresis amixer set Master toggle
down amixer set Master 4dB-
hang-up totem --quit
left totem --seek-bwd
left dot totem --play-pause
right totem --seek-fwd
right dot totem --fullscreen
up amixer set Master 4dB+
Toutes les expérimentations sont faites sous Bash. Le script ne fait qu'automatiser ce qui suit. Dans les copies d'écrans, tous les caractères saisis apparaissent en gras.
Pour communiquer avec le téléphone via Bluetooth, on a besoin de son adresse.
clarinde ~$sudo hcitool scan
Scanning ...
00:12:37:xx:xx:xx akampana
d'après l'article
de Wikipédia sur Bluetooth, le protocole SDP (Service Discovery
Protocol) permet à un appareil Bluetooth de rechercher d'autres
appareils et d'identifier les services disponibles. Dans le même
article, il est question d'un service port série
(Serial Port
Profile) désigné dans les documentations techniques par SP.
Commençons par vérifier que le téléphone SAGEM myX6-2 dispose bien
de cette fonctionnalité. Pour ça, je sélectionne dans le menu
Connectivité
du téléphone le mode actif & visible
, puis
j'exécute les commandes suivantes.
clarinde ~$sdptool search --bdaddr 00:12:37:xx:xx:xx SP | grep -i channel
Channel: 20
clarinde ~$sudo rfcomm connect 0 00:12:37:xx:xx:xx 20
Connected /dev/rfcomm0 to 00:12:37:xx:xx:xx on channel 20
Press CTRL-C for hangup
Il est possible de modifier la nature de la connexion du côté du
téléphone à l'aide des commandes AT. Ces commandes sont décrites dans
le document intitulé AT command set for GSM Mobile Equipment
distribué par l'ETSI (European Telecommunications Standards
Institute). La commande +CMER permet de surveiller l'activité du
clavier du téléphone.
Voyons voir comment ça marche. Dans un nouveau terminal, j'exécute les commandes suivantes.
clarinde ~$ls -al /dev/rfcomm*
crw-rw---- 1 root dialout 216, 0 2007-08-15 18:14 /dev/rfcomm0
clarinde ~$minicom -s
Welcome to minicom 2.2
OPTIONS: I18n
Compiled on Mar 7 2007, 15:10:03.
Port /dev/rfcomm0
Press CTRL-A Z for help on special keys
AT+CMER=2,1,0,0,0
OK
+CKEV: 94,1
+CKEV: 94,0
+CKEV: 77,1
+CKEV: 77,0
+CKEV: 86,1
+CKEV: 86,0
+CKEV: 67,1
+CKEV: 67,0
+CKEV: 35,1
+CKEV: 35,0
Dans cette copie d'écran, les lignes commençant par +CKEV
ont été générées automatiquement en pressant et en relachant une
touche du téléphone. Le nombre a deux chiffres qui suit +CKEV
permet d'identifier chaque touche ; ici il s'agit des quatre touches
de direction (dans l'ordre haut, droite, bas, gauche) et de la touche
#.
Le principe est maintenant clair : il suffit d'automatiser la
connexion, puis d'analyser les chaînes de caractères commençant par
+CKEV
pour identifier les touches du téléphone qui sont
pressées, et enfin de commander à l'ordinateur d'agir en conséquence.
C'est fait dans le script
telephommande
. Il est écrit en Python. Chacun l'adaptera à
ses besoins.