Table of contents
information
Avant toute chose, cet article traite de manipulations techniques qui pourraient, dans certains cas, causer un certain nombre de dysfonctionnements voire des pertes de données. Je n'assumerai en aucun cas la responsabilité de tels problèmes.
En préambule, je tiens à préciser que je vois personnellement d'un assez mauvais œil les montres connectées. Elles sont pour moi un gadget supplémentaire n'apportant pas de réelles innovations en matière d'usage, mais sont une source inépuisable de données pour ceux qui nous les vendent (données de déplacement, paramètres de santé...). Un système d'exploitation pour ce type d'objet a néanmoins retenu mon attention. Il s'agit d'AsteroidOS.
Le système
AsteroidOS est un système d'exploitation pour montre connectée basé sur Linux. Les interfaces sont développées en QT et sont affichées grâce à Wayland.
Si on veut être honnête, ce système d'exploitation est très en retard par rapport à ce que peut proposer Google WearOS ou une Apple Watch et ne propose que très peu d'options supplémentaires par rapport à une montre non connectée. Néanmoins, le projet est intéressant et les montres qui le supportent étant assez anciennes, il est possible de s'en procurer à moindre coût d'occasion (et donc à moindre impact environnemental).
On trouve comme fonctionnalités intégrées :
- L'affichage de l'heure.
- Un agenda.
- Un chronomètre.
- Un minuteur.
- Un réveil.
- Une calculatrice.
- Une boussole.
- Une lampe torche (en réalité cela met tout simplement l'écran en blanc, ce qui ne génère pas non plus de grande quantité de lumière).
- L'affichage de notre fréquence cardiaque à un instant T (pas de suivi ou d'enregistrement des courbes, rendant cet OS inutile pour les sportifs).
- Boutons de gestion de la musique depuis la montre (pause, volume, musique suivante/précédente).
- La météo.
- Un petit jeu inspiré de 2048.
La montre
Ayant acheté une montre connectée dans l'unique objectif d'essayer cet OS, je suis parti sur l'une de celles qui a la meilleure compatibilité à savoir la LG Watch Urban.
Elle a notamment l'énorme avantage d'être connectable directement à un ordinateur sans devoir faire de bricolage au niveau du hardware.
Son bracelet est facilement changeable puisqu'il s'agit d'attache standard pour montre. Et en cas de problème au niveau hardware, elle est facilement démontable, comme le prouve les équipes de iFixit.
Installation
Pour l'installation, il faut au préalable vérifier qu'ADB est bien installé sur son ordinateur.
Pour la suite, le tutoriel présent sur le site suffit pour installer facilement l'OS.
Je détaille néanmoins ici les étapes d'installation :
Dans un premier temps, il faut télécharger les fichiers de la dernière version de WearOS pour la montre : Le kernel, Le recovery et La ROM.
Puis les fichiers d'AsteroidOS : Les données utilisateur et La ROM.
La stabilité de distribution étant ce qu'elle est, il peut être bon de remplacer le recovery par TWRP. Cela peut permettre d'effectuer des backups.
Ensuite, il faut accéder au bootloader de l'appareil. Pour ce faire, il suffit d'éteindre la montre puis de la rallumer. Au démarrage quand le logo "LG" apparait il faut faire glisser son doigt du coin supérieur gauche de l'écran au coin inférieur droit.
Enfin il faut brancher l'appareil à un ordinateur via le câble USB et taper les commandes :
fastboot oem unlock
fastboot flash recovery recovery.img
fastboot flash system MM-system-ext4-*.img
fastboot flash boot Skin1980-boot-*.img
fastboot continue
# Attendre que l'os de base ait fini de s'installer avant de revenir sur fastboot et continuer.
fastboot flash recovery twrp-*-bass.img
fastboot flash userdata asteroid-image-bass.rootfs.ext4
fastboot flash boot zImage-dtb-bass.fastboot
fastboot oem lock
fastboot continue
Application téléphone
Par défaut, il est possible d'utiliser l'application mobile officielle d'AsteroidOs. Cependant, cette dernière est assez peu maintenue et relativement instable. Il est donc préférable d'utiliser GadgetBridge, une alternative plus complète également en mesure de piloter des montres qui ne fonctionnent pas sous AsteroidOS.
Connexion Wi-Fi
Pour se connecter à la montre, il faut aller dans les paramètres de la montre puis configurer le mode USB sur Mode ADB, puis taper les commandes sur un pc pendant que la montre est connectée :
adb usb
adb shell
Ensuite, pour se connecter en WiFi, il faut taper les commandes :
WIFI_SSID=*********
WIFI_PASSWORD=*********
rm -Rf /var/lib/connman/wifi*
connmanctl enable wifi
connmanctl scan wifi
WIFI="$(connmanctl services | grep $WIFI_SSID | tr -s " " | cut -f3 -d ' ')"
cat << EOL > /var/lib/connman/$WIFI.config
[service_wifi_$WIFI]
Type = wifi
Name = $WIFI_SSID
Passphrase = $WIFI_PASSWORD
Security = psk
AutoConnect=true
EOL
ifconfig wlan0 down
ifconfig wlan0 up
systemctl restart connman
System
Le gestionnaire de paquet de la distribution est opkg. Il s'utilise globalement comme apt-get sur les systèmes Debian.
Il faut cependant être attentif à ne pas faire d'opkg dist-upgrade. Cela pose un problème au moment de la mise à jour de la BusyBox et casse complètement l'OS... Donc obligé de tout réinstaller.
De même, des upgrades globaux (opkg upgrade) peuvent introduire des instabilités plus ou moins graves... Chose malheureusement symptomatique des distributions mal ou insuffisamment testées. Une fois la distribution installée, le plus sage est donc malheureusement de ne plus toucher à rien.
Optimisation
La configuration de base d'AsteroidOS génère beaucoup de logs, ce qui finit par impacter l'autonomie de l'appareil et qui finit par remplir toute la place sur le disque (qui est fortement limité).
Une solution peut donc être de réduire le spam de log et d'éviter de les stocker sur disque, mais d'uniquement les conserver en mémoire :
echo '
Storage=volatile
SystemMaxUse=32M
RuntimeMaxUse=32M
MaxLevelStore=warning
' >> /etc/systemd/journald.conf
Watchface
J'utilise une watchface custom pour la montre. Pour l'installer, il suffit de taper les commandes depuis un pc :
cd /tmp
git clone -q --depth 1 -- https://github.com/flavien-perier/asteroid-watchface.git
cd asteroid-watchface
adb push usr/ /
adb shell systemctl restart user@1000
Applications
Le site d'AsteroidOS liste différentes applications installées par défaut, ou installables, qui peuvent s'avérer plus ou moins utiles.
Asteroid Health
Asteroid Health est une application de comptage de pas, ou les données restent exclusivement dans la montre. Pas de risque de fuite sur le cloud.
opkg install asteroid-health
Script de synchronisation
L'os n'étant pas très complet de base, il peut être bon de rajouter un petit script qui permette de synchroniser son agenda quand la montre a accès à internet ainsi que d'afficher son adresse ip dans une notification.
opkg update
opkg install curl
echo "CALENDAR_URL=******" > /home/root/sync.conf
echo '#!/bin/bash
set -e
touch /tmp/calendar-sync-last-update
SYNC_DATE="$(date +%F)"
LAST_SYNC_DATE="$(cat /tmp/calendar-sync-last-update)"
if [[ "$SYNC_DATE" != "$LAST_SYNC_DATE" ]]
then
if connmanctl state | grep -q "State = ready"
then
source /home/root/sync.conf
curl -s -o /tmp/calendar.ics "$CALENDAR_URL"
su -l ceres -c "icalconverter import /tmp/calendar.ics -d"
IP="$(ip -br -4 a show wlan0 | tr -s " " | cut -f3 -d " " | cut -f1 -d "/")"
su -l ceres -c "notificationtool -o add --icon=ios-wifi --application=\"System\" --urgency=3 --hint=\"x-nemo-preview-summary WiFi\" --hint=\"x-nemo-preview-body IP: $IP\" \"WiFi\" \"IP: $IP\"" || true
echo "$SYNC_DATE" > /tmp/calendar-sync-last-update
fi
fi' | tee /home/root/calendar-sync
chmod 550 /home/root/calendar-sync
cat << EOL > /etc/systemd/system/calendar-sync.service
[Unit]
Description=Calendar synchronization service
Wants=calendar-sync.timer
[Service]
ExecStart=/home/root/calendar-sync
Type=oneshot
[Install]
WantedBy=network-online.target
EOL
chmod 755 /etc/systemd/system/calendar-sync.service
cat << EOL > /etc/systemd/system/calendar-sync.timer
[Unit]
Description=Calendar synchronization service
Requires=calendar-sync.service
[Timer]
Unit=calendar-sync.service
OnUnitInactiveSec=2hours
[Install]
WantedBy=timers.target
EOL
chmod 755 /etc/systemd/system/calendar-sync.timer
systemctl enable --now calendar-sync.service
systemctl enable --now calendar-sync.timer
systemctl daemon-reload
Fix techniques
Écran qui ne s'éteint pas
Sur plusieurs de mes installations d'AsteroidOS, je me suis retrouvé face à un écran qui ne s'éteint plus de manière automatique (ce qui impacte évidemment énormément la batterie).
La meilleure solution que j'ai trouvée est de réinitialiser mce (un démon permettant des interactions avec le hardware).
Pour ce faire, c'est relativement simple :
systemctl stop mce
rm -f /var/lib/mce/builtin-gconf.values
systemctl start mce