Termux : hackez votre Android

Publié le 23 octobre 2019 par Gee dans Le reste
Attention : si vous avez trouvé cet article en cherchant des termes comme « hacker android », je suis désolé de vous décevoir, mais cet article parle de hacking au sens de bidouillage. Si vous cherchez à pirater le téléphone ou la tablette de quelqu'un, vous pouvez fermer cet onglet immédiatement, ce n'est absolument pas le sujet. Merci de votre attention.

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.

Capture d'écran du terminal de Termux

Termux sur une tablette Android/LineageOS

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.

Capture d'écran de Termux avec une connexion SSH

Accès SSH à un Raspberry Pi local depuis Termux

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 :

Photo de ma tablette avec Windows 3.11 qui tourne dedans

Windows 3.11 dans Dosbox dans Termux dans LineageOS. BECAUSE I CAN.

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 :

Photo de la tablette avec Prince of Persia qui tourne dedans

Prince of Persia 1989 sur ma tablette ♥

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.

Capture d'écran de Termux avec une fenêtre de dialogue qui demande « Est-ce que Termux, c'est génial ? » On peut répondre « Ouais », « Carrément » ou « à donf ».

Une fenêtre de dialogue lancée par une simple commande Termux (elle s’affiche même hors du terminal et on peut récupérer le choix de l’utilisateur)

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 !


Publié le 23 octobre 2019 par Gee dans Le reste

  1. Je sais qu’Android est techniquement dérivé de Gnunux, mais la surcouche de verrouillage ajoutée par-dessus fait qu’on est à des lustres de la flexibilité d’un Gnunux de bureau. 

  2. Taper pkg list-all dans Termux pour avoir la liste complète. 

Soutenir

Ce blog est publié sous licence libre, il est librement copiable, partageable, modifiable et réutilisable. Il est gratuit car financé principalement par vos dons. Sans inscription, vous pouvez très simplement me soutenir :

Pour l'année 2023-2024, 8250 € ont pour l'instant été collectés sur un objectif annuel de 21 000 € (SMIC brut), soit 39 % de l'objectif :

Sources de revenu

L'année étant entamée à 55 %, il y a actuellement un retard de 3300 € sur l'objectif.

Avancement de l'année

Vous pouvez également, si vous le souhaitez, passer par une plateforme de financement participatif :