lundi 19 septembre 2011, 21:06:14 (UTC+0200)

HP TouchPad : accéder localement au shell

Suite à mes premiers pas sur la tablette HP TouchPad, je souhaitais disposer d'un shell accessible localement (c'est-à-dire sans cable USB ni connexion réseau). Le client de base sous webOS étant le navigateur, un shell "webifié" semblait être une bonne solution. Après avoir regardé l'offre côté logiciels libres (et essayé les démos présentes sur le site d'AnyTerm), le logiciel shellinabox a été retenu, dans sa version svn (r239).


Pour mener à bien la manip décrite ci-dessous, il faut :

  • une machine Unix pour réaliser la compilation (ici Ubuntu x86 32 bits)
  • un compilateur cross-platform (ici celui de Sourcery)
  • un HP TouchPad accessible en ligne de commande via SSH ou novaterm (ici v3.0.2)

Première étape, le compilateur cross-platform ! En raison de soucis avec le compilateur inclus dans le PalmPDK, nous utiliserons Sourcery G++ Lite 2011.03-41 for ARM GNU/Linux. Le récapitulatif des différentes étapes :


Télécharger le fichier "IA32 GNU/Linux TAR" et le décompresser :

$> tar xvjf arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Se déplacer dans le répertoire où sont stockés les binaires et les renommer afin de manipuler les noms usuels (gcc, objcopy, ...) :

$> cd arm-2011.03/bin
$> rename 's/arm-none-linux-gnueabi-//' *

Modifier $PATH afin de pointer d'abord vers ces binaires :

$> which gcc
/usr/bin/gcc
$> PATH=/home/nicob/arm-2011.03/bin:$PATH
$> export PATH
$> which gcc
/home/nicob/arm-2011.03/bin/gcc

Et voilà, le compilateur cross-platform sera donc appelé par défaut (dans ce shell) quand gcc sera invoqué.


Deuxième étape : OpenSSL ! Preware propose les paquets openssl et libssl, qui sont nécessaires à l'installation d'OpenSSH. Il serait donc possible d'utiliser ces paquets (ou ceux du canal parallèle ipkg-opt), mais cela créérait des problèmes de dépendances. Il faudrait en effet fournir un binaire pour les utilisateurs de Preware et un pour ceux de ikpg-opt, ou restreindre l'utilisation à un seul de ces catalogues alternatifs, ou encore fournir une n-ième version de ces paquets. Il reste aussi la possibilité de réaliser une compilation statique. Mais bon, étant donné que l'objectif est de se connecter localement (c'est-à-dire via l'interface de loopback), on peut tout aussi bien se passer de SSL et de ce problème ;-) Zou, c'est réglé ...


Troisième étape : compiler shellinabox après application des patchs "kivonbien"


On récupère la dernière version disponible sur Google Code :

$> svn checkout http://shellinabox.googlecode.com/svn/trunk/ shellinabox-svn
$> cd shellinabox-svn

On patch le fichier "vt100.js" (entre autres parceque la notion de "bouton droit" n'existe pas sous webOS) en se basant sur l'expérience d'un utilisateur de Reddit :

--- vt100.js.orig	2011-09-19 10:56:56.000000000 +0200
+++ vt100.js	2011-09-19 10:58:58.000000000 +0200
@@ -283,7 +283,7 @@
   this.visualBell           = typeof suppressAllAudio != 'undefined' &&
                               suppressAllAudio;
   this.autoprint            = true;
-  this.softKeyboard         = false;
+  this.softKeyboard         = true;
   this.blinkingCursor       = true;
   if (this.visualBell) {
     this.signature          = Math.floor(16807*this.signature + 1) %
@@ -1124,7 +1124,7 @@
 
 VT100.prototype.resizer = function() {
   // Hide onscreen soft keyboard
-  this.hideSoftKeyboard();
+  // this.hideSoftKeyboard();
 
   // The cursor can get corrupted if the print-preview is displayed in Firefox.
   // Recreating it, will repair it.

On configure pour ne supporter ni SSL ni PAM puis on compile :

$> ./configure --host=arm --disable-ssl --disable-pam 
$> make 

Voilà, il ne reste qu'à copier le fichier sur le TouchPad et à l'exécuter :

$> scp shellinaboxd root@192.168.33.201:
$> ssh root@192.168.33.201
NicolasHPTouchPad root # ./shellinaboxd -b --localhost-only

Vous pouvez désormais lancer accéder via le navigateur à http://127.0.0.1:4200/ (login = root, pas de mot de passe) :




Bon, il y a clairement des problèmes de mapping du clavier (typiquement, le "-" ne marche pas sur le clavier du TouchPad, il faut utiliser le clavier virtuel de l'application), mais ça permet d'avoir un shell minimaliste. Pour un usage au long cours, il faut lancer le binaire au démarrage de la tablette, par exemple en ajoutant une ligne "exec /path/to/shellinaboxd -b --localhost-only" à un script de démarrage quelconque comme celui d'OpenSSH. Pour les pressés et les téméraires qui veulent juste le binaire, il est était disponible ici.


Depuis la semaine dernière, une autre façon de disposer d'un shell local sous HP TouchPad est proposée. En effet, les feeds Stable de Preware ont vu débarquer le triplet gagnant Xecutah / Xserver / Xterm :




Que choisir entre shellinabox et xterm ? Le second est maintenu par la communauté et sera probablement régulièrement actualisé. Mais il a une empreinte système assez importante : environ 33 Mo de RAM et 6% de CPU en tâche de fond, contre 2 Mo et quasiment pas de CPU. Bien sûr, le serveur X sera mutualisé quand d'autres d'applis X tourneront sur la tablette. Autre point négatif pour xterm : les curseurs ne sont pas présents (argh !). Du coup, je fais tourner shellinabox en tâche de fond, avec lancement de xterm si le besoin s'en fait sentir. En tout cas, voilà le problème de l'accès local au Linux sous-jacent résolu !


Note finale : si quelqu'un veut produire une version packagée pour webOS (au format IPK) de shellinabox, je serais ravi ... et ce serait l'occasion de créer un script de démarrage dédié ;-)


Posted by Nicolas Grégoire | Permanent link | File under: touchpad

webmaster@agarri.fr
Copyright 2010-2021 Agarri