Les touches spéciales ACER sous Mandriva Linux (3)
dernière partie : l’automatisation

Dans cet article, nous allons programmer les touches multimédia de l’Acer Travelmate 2493. Dans une première partie, nous verrons la démarche de détection utilisée ce qui permettra aux utilisateurs d’autres modèles d’ordinateur portable de l’adapter. Dans une seconde partie, nous associerons les commandes aux touches ; Les plus pressés iront directement à la troisième partie où nous mettrons le résultat de nos recherches pour que ces touches soient actives à chaque démarrage.

Vous pensiez avoir terminé ? Et bien, non ! Car au prochain démarrage de votre ordinateur, tout sera oublié. Nous allons donc maintenant automatiser tout ça.

Tout d’abord, il faut dire au noyau de charger le driver acerhk avec nos parametres. Cela se fait dans /etc/modprobe.preload où l’on ajoute la ligne :

acerhk force_series=4650 poll=0

Les setkeycodes au lancement de linux

Nous allons créer un fichier dans le dossier /etc/rc.d/init.d qui se nommera acerhk. Voici son contenu :

#!/bin/sh
. /etc/rc.d/init.d/functions
gprintf "AcerHK : définition des Keycodes"
setkeycodes e077 101
setkeycodes e043 120
setkeycodes e073 122
setkeycodes e074 123
setkeycodes e025 129
setkeycodes e026 130
setkeycodes e027 131
setkeycodes e033 132
setkeycodes e034 027
passed;echo

La première ligne indique que nous sommes en présence d’un fichier batch, la seconde donne accès aux fonctions gprintf et passed. gprintf va écrire le texte de notre choix tandis que success écrit le [ FAIT ] jaune.

Puis nous allons décider dans quelles conditions linux lancera ce fichier. Pour cela, nous mettons dans /etc/rc.d/rc5.d un lien symbolique de cette manière :

ln -s /etc/rc.d/init.d/acerhk /etc/rc.d/rc5.d/S99acerhk

Explication :
 ln -s crée un lien symbolique
 /etc/rc.d/init.d/acerhk vers ce fichier-là
 rc5.d parce que cela se fera en démarrage "graphique" (rc0 = à l’arrêt, rc1 en mode mono-utilisateur non graphique, rc3 = multi-utilisateurs non graphique et rc6 = redémarrage)
 S99 donne la priorité de lancement, à savoir "pas urgent, pas important, en dernier, vraiment mon linux tu fais ça si tout va bien, hein !"
 acerhk on donne un nom à notre lien symbolique

Du keycode au nom symbolique à chaque démarrage de KDE

Voilà, désormais, les setkeycodes sont automatiques. Passons du keycode au nom symbolique des touches. Tout à l’heure, nous avons créé un fichier dénommé " /.xmodmap.conf", il faut maintenant le lancer à chaque démarrage de kde. Pour cela, nous créons un autre script bash que l’on place dans /.kde/Autostart (RAPPEL signifie /home/monlogin Vous devez donc être loggué en tant que utilisateur simple et pas "root" pour que le pointe au bon endroit sinon ça ira dans /root et donc ne concernera pas le kde de votre utilisateur normal). Mon script s’appelle acerhk.sh mais vous pouvez avoir plus d’imagination !

#!/bin/bash
xmodmap ~/.Xmodmap

Voilà c’est terminé. Kde a déjà conservé vos saisies des actions
d’entrées et s’en souvient au démarrage suivant.

Allumer la touche "mail" quand vous en avez reçu

J’ai donc cherché à exploiter cette touche mail de sorte qu’elle clignote quand un message est disponible. Evidemment, il aurait été possible de passer par kmail ou thunderbird (qui propose un plugin "mailbox alert" pour ce faire).

Mais je voulais que cette lumière soit active même si je n’ai pas lancé mon lecteur de messagerie. je suis donc parti sur l’idée d’un script perl avec sa bibliothèque de fonctions ImapClient mais sans y arriver. Heureusement, Sébastien Munch l’a fait en python et le propose sur son site. Qu’il en soit très chaleureusement remercié. Je n’ai donc eu qu’à changer quelques lignes pour que cela fonctionne dans ma configuration :

#!/usr/bin/env python

boxes = (
 # type     adresse            user         pass
  ('imaps', 'imap.beuselinck.com', 'beuz', 'monmotdepasse'),
  )

do_not_check = (
  'INBOX.Drafts',
  'INBOX.Trash',
  'INBOX.spams',
  'INBOX.Sent',
  'INBOX.Junk',
  'INBOX.failure',
  )

import imaplib
got_mail = False

for srv in boxes:
  if srv[0].startswith('imap'):
      if srv[0].endswith('s'):
          M = imaplib.IMAP4_SSL(srv[1])
      else:
          M = imaplib.IMAP4(srv[1])
      M.login(srv[2], srv[3])
      typ, data = M.list()
      for box in data:
          boxname = box.split('"')[-2]
          if boxname not in do_not_check:
              M.select(boxname)
              typ, data = M.search(None, 'UNSEEN')
              if data != ['']:
                  got_mail = True
                  print "Got mail in : %s - %s" % (srv[1], boxname)
      M.close()
      M.logout()
led = open('/proc/driver/acerhk/led', 'w')
led.write('%d' % got_mail)

Evidemment, il faut ensuite lancer ce script à intervalles réguliers. Nous le faisons grace à crontab. La commande crontab -u beuz -e nous permet d’écrire :

# min(0-59)  hours(0-23) day(1-31) month(1-12) dow(0-7)   command
*/5 * * * * /home/beuz/automail.sh

Et voilà, j’ai désormais la touche "Acer Mail" qui clignote orange quand j’ai des nouveaux messages non-lus. Le test est fait tout les 5 minutes.

Conclusion

La démarche a permis de maîtriser certaines particularités de l’Acer Travelmate 2493 et doit être facilement transposable à d’autres portables de la même marque. Il y aurait certaines améliorations à apporter comme éteindre la led orange au lancement de thunderbird (donc en appuyant sur ladite touche). De même, les modifications xmodmap mériterait peut-être d’être automatisées pour tous les utilisateurs (c’est un portable et je suis le seul à l’utiliser) .

j’ai passé sous silence (temporairement au moins) certaines fonctionnalités de ce modèle (les leds wifi et bluetooth, le lecteur de cartes mémoire...).

Notez enfin que je n’ai pas (encore) trouvé de documentation pour allumer la led "AcerMail" sous WindowsXP mais ce n’est pas forcément possible. D’autant que la documentation fabricant ne signale même pas qu’il s’agit d’une touche avec led !