Termux : hackez votre Android
Disclâmeur : cet article va beaucoup parler de GNU/Linux (Gnunux pour les intimes), de terminaux et de lignes de commande. Si vous êtes allergiques, allez plutôt lire les bêtises que je dessine, ça vous plaira plus.
Introduction : Android, c’est de la merde
Comme ça c’est dit.
Les tablettes présentent des avantages certains en termes de nomadisme : forte réactivité à l’allumage, faible consommation permettant à la batterie de durer longtemps, etc. Par contre, ce qui m’a toujours frustré, c’est de ne pas pouvoir installer un OS type Gnunux dessus et de devoir me contenter d’Android1 (et dérivés plus ou moins libérés délivrés comme LineageOS que j’utilise personnellement).
Android me gonfle pour tout un tas de raisons : l’accès root désactivé par défaut, un système de fichiers complètement pété où certains fichiers sont inaccessibles, cachés, avec des arborescences foireuses (genre la fameuse mémoire qui s’appelle « sdcard » tandis que la carte SD s’appelle « 0000-0000 », LOGIQUE), des conventions de nommage/stockage absconses à l’opposé de la philosophie Gnunux qui dit, en gros : un endroit bien défini pour chaque chose, et un système basé au maximum sur des fichiers textes pour être le plus facilement éditable/lisible. Sur Android au contraire, tout est fait pour rendre une utilisation avancée (au-delà de « j’installe une app sur le PlayStore et je joue sagement avec ») ultra-chiante voire impossible.
Ajoutons à ça la surcouche de merde partout, par exemple sur l’interface USB qui fait que pour monter la tablette comme n’importe quel périphérique USB Mass Storage sur un ordi (le but de l’USB, à la base, hein), c’est la croix et la bannière. Bref, on sent clairement l’intention de retirer tout contrôle à l’utilisateur sur sa machine. Et ne parlons même pas du changement d’OS, c’est une horreur : j’ai installé des dizaines de Gnunux sur des tas de PC de tous horizons les doigts dans le pif, mais je transpire violemment quand je dois flasher une nouvelle ROM sur un téléphone ou une tablette.
Voilà pour l’intro et la petite gueulante qui va avec. Parlons maintenant d’un truc fabuleux qui vient mettre un peu d’huile dans ces rouages bien grippés : Termux, une application Android libre qui émule un environnement Gnunux et son terminal. Je dois admettre qu’au début, je n’ai installé cette app que pour faire mumuse : « ohohoh c’est rigolo, j’ai un terminal sur ma tablette ».
À l’usage, je dois dire que Termux est une petite tuerie, et qu’elle mériterait d’être plus connue. Attention, avoir un clavier physique est quasi-obligatoire : quelques astuces sont utilisées pour pouvoir utiliser le clavier virtuel d’Android (boutons Ctrl, Shift, flêches et cie fournies virtuellement aussi), mais ça reste peu pratique.
Termux : un mini-Gnunux dans ma tablette
D’abord, résumer Termux à un terminal est très réducteur : elle permet en fait d’installer tout un tas de logiciels (toujours en ligne de commande, bien sûr) qui donneront à un Gnunuxien comme moi la sensation d’être à la maison.
Une liste non exhaustive2 : les shells usuels Bash, Csh, Zsh, etc. ; des environnements de dév avec notamment Python, Perl, Ruby, GCC, Make ou encore CMake (compiler du C++ sur une tablette Android, c’est possible) ; Git, oui, fucking Git sur Android (et SVN aussi) ; Emacs et Vim, le bonheur de retrouver son éditeur favori ; pas mal d’utilitaires comme ImageMagick (génial pour traiter en série les photos prises directement sur l’appareil) ; ncdu, un analyseur d’utilisation d’espace disque par arborescence hyper-pratique ; Texlive pour faire du LaTeX ; et surtout, SSH, qui est pour moi la fonctionnalité de rêve, je vais y revenir.
Notez que ce sont les logiciels déjà packagés pour Termux : puisque des outils de dév sont présents, rien ne vous empêche d’en compiler d’autres. Pas mal de bibliothèques logicielles sont aussi disponibles, il y a donc de quoi faire, en tout cas pour les logiciels en ligne de commande (pour la partie graphique, c’est plus compliqué, j’y reviendrai aussi).
Termux+SSH : un Gnunux complet sur ma tablette
Bon, c’est vrai, tous ces logiciels dont je parle sont fort sympathiques. N’empêche qu’on reste sur un erzats de ce que serait un vrai environnement Gnunux. Et pour avoir un peu éprouvé, par exemple, l’Emacs de Termux, j’ai constaté qu’il n’était pas des plus stables (petits plantages aléatoires qui arrivent, faut penser à sauvegarder souvent). Bon, ça vient peut-être de mon .emacs
qui est peut-être un peu lourdingue (sur Termux, ça fait que Emacs met plusieurs secondes à se lancer), mais quand même.
Une des grandes forces de Termux, c’est de pouvoir intégrer un client SSH : peu importe alors si la logithèque de Termux est trop légère pour vous, car SSH vous permet de toute façon de vous connecter à n’importe quel serveur SSH et donc à avoir un terminal sur un authentique Gnunux, avec potentiellement n’importe quel logiciel. Les tablettes ont pas mal été pensées comme des clients légers pour accéder à des services en ligne (avec la dépendance aux GAFAM que ça implique, #dégooglisons) : avec Termux+SSH, on peut se servir de la tablette comme d’un client léger pour accéder à son propre serveur, donc le même principe, sauf qu’on contrôle toute la chaîne.
Comme dans un cadre nomade, la qualité et la fiabilité de la connexion peuvent être assez fluctuantes, j’utilise, à la place de SSH, Mosh (aussi disponible dans Termux) qui est prévu pour gérer les connexions intermittentes. Du coup, exit l’Emacs de Termux, j’accède à celui de mon serveur via Termux+Mosh, et roule ma poule. Là, aucun plantage, c’est stable (j’ai déjà tapé du texte avec pendant une heure dans un autocar sur l’A8 en traversant des tunnels, sans problème avec le partage de connexion 3G de mon téléphone).
Termux+SSH : ma tablette dans mon Gnunux
Le SSH fonctionne aussi dans l’autre sens : oui, vous pouvez installer un serveur SSH sur votre tablette. Plus besoin de s’embêter avec les connexions USB daubées d’Android : je peux monter l’arborescence de la tablette sur mon ordi avec un coup de SSHFS via le réseau local. À partir de là, ça glisse tout seul, ça transfère pépère et encore une fois, c’est stable. Le bonheur, j’vous dis.
Du coup, je peux même peux accéder au Termux de la tablette via SSH depuis mon ordinateur. Bon, ça n’a pas grand intérêt, sauf si vous n’avez pas de clavier physique sur votre tablette : ça peut permettre d’utiliser celui de votre ordi pour bricoler dessus avec Termux.
Et l’interface graphique, alors ?
Alors je sais, pour que ce soit le bonheur complet, il faudrait une interface graphique pour pouvoir faire tourner tous les logiciels Gnunux qu’on aime (Inkscape, je pense à toi). En réalité, c’est théoriquement possible, mais pour avoir testé, c’est assez fastidieux et ça reste assez peu utilisable à part pour la démonstration.
Pour cela, Termux peut tirer partie d’une autre app comme XServer XSDL et ainsi lancer des applications en mode graphique dans une app séparée. Pour la déconne, j’ai d’ailleurs réussi à faire un petit jeu d’OS-poupées-russes : sur mon LineageOs, dans Termux, j’ai installé Dosbox (émulateur de MSDOS) sur lequel j’ai installé… Windows 3.11.
Eh oui, Windows 3.11 tourne sur ma tablette :
Non pas que Windows 3.11 soit mon OS de choix. N’empêche que c’est rigolo de retrouver Paintbrush – l’ancêtre de Paint – et de l’utiliser via un écran tactile… Le grand écart technologique.
Et puis Dosbox, ça veut dire aussi faire tourner (instant nostalgie) de vieux jeux dos, par exemple Prince of Persia, premier du nom, et ça c’est chouette :
Encore une fois, c’est assez rudimentaire, XServer XSDL est peu stable et l’interface est à chier – je dis ça sans aucune animosité pour les dévs qui font ce qu’ils ou elles peuvent. Chez moi le son déconne un max, mais qui sait, peut-être qu’à l’avenir, on pourra utiliser de manière fluide nos logiciels Gnunux là-dedans…
Termux API : contrôler chaque élément de son appareil
Cerise sur le gâteau : Termux propose une API dédiée pour agir sur les différents éléments de votre tablette. Des tas de commandes simples à la Unix (une commande = une action) comme : termux-brightness
pour régler la luminosité de l’écran ; termux-dialog
pour afficher une fenêtre pour interagir avec l’utilisateur (voir l’image ci-dessous) ; termux-notification
pour lancer une notification dans l’interface d’Android ; termux-sms-send
pour envoyer un SMS ; etc.
Cette fonctionnalité est absolument géniale, il y a même termux-sensor
qui permet d’afficher en temps réel ce les informations enregistrées par tous les capteurs de l’appareil (et sur les tablettes et téléphones modernes, ils sont nombreux ! GPS, accéléromètre, bluetooth, écran tactile…). Associez ça au langage de script de votre choix + la possibilité de créer des icônes de raccourcis sur l’interface Android, et un univers de possibilités s’offre à vous, vous pouvez hacker votre tablette/téléphone à loisir (sans avoir besoin de vous fader le SDK d’Android et de générer des APK). Enfin la sensation de pouvoir étudier, contrôler et faire ce qu’on veut de ces appareils qui semblent avoir fait de l’opacité et du verrouillage leur marque de fabrique… Mine de rien, ça les rend beaucoup plus sympathiques !
Je n’ai encore qu’effleuré les possibilités de cette API, mais je suis par exemple en train de voir pour me bricoler un script qui me notifie le prochain passage du bus que je prends tous les matins à l’arrêt en récupérant les infos de trafic sur le site de la compagnie de bus.
Conclusion
Pour conclure : Termux, c’est le bien, et si vous êtes un bricoleur gnunuxien ou une bricoleuse gnunuxienne qui se sent un peu à l’étroit sur son Android, installez ça tout de suite ! C’est disponible sur F-Droid et sur Play Store, c’est libre et c’est gratuit.
Vive Termux et des câlinternets aux gens qui ont développé ça !