L’objectif est de proposer un système d’affichage sur une télévision, d’une ou plusieurs pages Web, sans intervention extérieure. Nous appellerons cette solution un « moniteur », dont le principe général est le suivant :
- Une clé USB RikoMagic, branchée :
- à une télévision via les ports HDMI et USB
- au réseau de l’entreprise par le port ethernet RJ45
- Le système :
- démarre à l’allumage de la télévision grâce à l’alimentation USB
- obtient une adresse en DHCP
- ouvre un navigateur « Chromium »
- se connecte sur l’adresse http://dashboard/ (doit donc correspondre à une adresse de découverte de service, qui redirige en fonction du client sur le service adéquat ; plus de précision en fin d’article).
Matériel
Nous avons validé le fonctionnement de cette procédure avec 2 clés HDMI RikoMagic, qui sont quasiment les seules à proposer un port Ethernet natif pour simplifier l’aspect plug&play de la solution.
Ces deux clés reposent sur le même matériel (2 USB, 1 GigaEthernet, 1 HDMI, 1 alimentation 5V, 1 microSD) mais ne sont pas flashées de la même manière : l’une fonctionne à base d’Ubuntu et supporte nativement le boot sur une carte microSD, alors qu’il est nécessaire de flasher celle à base d’Android pour pouvoir booter sur une microSD.
Quelques liens utiles :
- C’est une plateforme Rockchip ouverte : http://opensource.rock-chips.com/wiki_Main_Page
- Instructions pour builder depuis les sources : http://rockchip.wikidot.com/linux-user-guide, http://rockchip.wikidot.com/yocto-user-guide
- Et bien d’autres informations : http://wiki.t-firefly.com/index.php/Firefly-RK3288/en
Flashage de la clé RKM
Flasher une clé consiste à remplacer le firmware de la clé elle-même.
Cette étape peut être nécessaire si vous souhaitez repartir d’un firmware en version usine ou s’il n’est pas possible de booter sur la SDcard (par exemple avec la version Android de la clé).
Instructions Android MTK : https://androidmtk.com/use-rockchip-batch-tool
Création de la carte microSD
Il existe plusieurs méthodes pour générer une carte microSD bootable embarquant une Debian :
- Le puriste qui ne part de rien mais la mode opératoire reste à écrire,
- Le Kit de création d’image bootable dont le fonctionnement reste encore assez obscure,
- Et enfin, la solution la plus simple à mon goût, qui consiste à utiliser l’image microSD mise à disposition par Linuxium
Cette dernière solution consiste à télécharger linuxium (Ubuntu 14.04) : https://drive.google.com/….Tnc et d’écraser directement la microSD (remplacer /dev/sdX par le nom du device USB) :
$ 7z e -so -bse2 -bsp2 ubuntu1410-linux-rk3288-sdcard.img.7z | sudo dd of=/dev/sdX bs=4M
Depuis un autre terminal, lancer la commande « sync » qui rendra la main une fois que l’écriture sur la carte SD est finie :
$ sync
Adaptation de l’image linuxium (système Ubuntu + lightdm + gnome-unity)
Linuxium est une distrsibution Debian pour RK, mais elle n’est pas utilisable en l’état.
- Monter la microSD et se positionner dans le répertoire
sudo -i mount /dev/sdX1 /mnt/usb cd /mnt/usb
- Adapter le système à un usage français
rm -f etc/localtime cp -f usr/share/zoneinfo/Europe/Paris etc/localtime echo Europe/Paris > /etc/timezone sed -i -e 's/(XKBLAYOUT)=/1="fr"/' etc/default/keyboard
- Supprimer les références à l’utilisation linuxium, définir le nom de machine à MONITOR et ajouter un utilisateur admin
sed -i -e '/linuxium/ d' etc/passwd etc/passwd- etc/shadow etc/shadow- sed -i -e '/linuxium/ d' etc/subgid etc/subuid etc/sudoers sed -i -e '/LINUXIUM/ d' etc/hosts rm -rf home/linuxium echo "RKM" > etc/hostname echo "127.0.0.1 RKM" >> etc/hosts echo "admin:x:1000:4:Admin Account:/home/admin:/bin/bash" >> etc/passwd echo "admin:$6$qoZ10V6h$E6NKNNixbcMgAEKEenTg4mQ4ENOJADRszFBLFrEdhyptS5sogLKj/Fr6RMv0AXtDWlzhCOOnx1d6G1TB5JWWt1:17495:0:99999:7:::" >> etc/shadow cp -a etc/skel home/admin mkdir home/admin/.ssh chown 1000:4 -R home/admin
!! Le mot de passe du compte admin est : AdM!NrkM
Ce mot de passe pourra être changé par la suite via SSH, puis permettra de passer en root via la commande « sudo -i » - Désactiver les mises à jour à chaque connexion SSH
chmod -x etc/update-motd.d/90-updates-available chmod -x etc/update-motd.d/91-release-upgrade
- Adapter les dépôts de mise à jour
sed -i -e '/ubuntu-ports/ d' etc/apt/sources.list sed -i -e 's@ports.ubuntu.com@old-releases.ubuntu.com/ubuntu@' etc/apt/sources.list
- Donner les droits « root » à l’utilisateur « admin »
echo "admin ALL=(ALL) NOPASSWD: ALL" > etc/sudoers.d/admin
- Ajouter une configuration spéciale sur eth0 pour que l’adresse MAC reste permanente
tr -c '[:print:][:space:]' ' ' > etc/network/interfaces.d/eth0 <<"_EOF" auto eth0 iface eth0 inet dhcp pre-up /etc/network/fix-mac $IFACE _EOF
tr -c '[:print:][:space:]' ' ' > etc/network/fix-mac <<"_EOF" #!/bin/bash IFACE=$1 if [[ -z $IFACE ]] ; then echo "${0##**/} " >&2 exit 0 fi if [[ -e ${0%/*}/$IFACE.mac ]] ; then ETHER=$(<${0%/*}/$IFACE.mac) ip link set dev $IFACE address $ETHER if [[ $? != 0 ]] ; then echo "Error setting ethernet address $ETHER on $IFACE" >&2 exit 0 fi else ETHER=$(printf "%02X:%02X:%02X:%02X:%02X:%02X" \ $(((RANDOM%128)&0x02)) $((RANDOM%256)) $((RANDOM%256)) \ $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256))) ip link set dev $IFACE address $ETHER if [[ $? != 0 ]] ; then echo "Error re-setting ethernet address $ETHER on $IFACE" >&2 exit 0 fi echo $ETHER > ${0%/*}/$IFACE.mac fi exit 0 _EOF chmod 755 etc/network/fix-mac
# disable Network-Manager ln -s ../init.d/network-manager etc/rc0.d/K01network-manager ln -s ../init.d/network-manager etc/rc1.d/K01network-manager ln -s ../init.d/network-manager etc/rc2.d/K01network-manager ln -s ../init.d/network-manager etc/rc3.d/K01network-manager ln -s ../init.d/network-manager etc/rc4.d/K01network-manager ln -s ../init.d/network-manager etc/rc5.d/K01network-manager ln -s ../init.d/network-manager etc/rc6.d/K01network-manager
- Créer le fichier lightdm pour l’auto-login en “monitor”
tr -c '[:print:][:space:]' ' ' > etc/lightdm/lightdm.conf <<"_EOF" [SeatDefaults] autologin-user=monitor autologin-user-timeout=0 _EOF
- Ajouter l’utilisateur monitor dédié à l’auto-login
echo "monitor:x:1001:4:Monitor Account:/home/monitor:/bin/bash" >> etc/passwd echo "monitor:*:15893:0:99999:7:::" >> etc/shadow cp -a etc/skel home/monitor
- Supprimer les alertes au démarrage de Chromium
tr -c '[:print:][:space:]' ' ' > home/monitor/.xsessionrc <<"_EOF" /bin/sed -i 's/"exited_cleanly": *false/"exited_cleanly":true/' \ "$HOME/.config/chromium/Default/Preferences" \ "$HOME/.config/chromium/Local State" /bin/sed -i 's/"exit_type": *"Crashed"/"exit_type":"Normal"/' \ "$HOME/.config/chromium/Default/Preferences" \ "$HOME/.config/chromium/Local State" /bin/rm -f $HOME/.config/chromium/SingletonLock /usr/bin/xset -dpms s off s 0 0 exec /usr/bin/chromium-browser --start-fullscren --window-size=1900,1060 \ --disable-infobars --test-type --ignore-certificate-errors \ --disable-translate --kiosk --no-first-run \ http://dashboard/ _EOF
La configuration ci-dessus est faite pour que le navigateur ouvre l’URL http://dashboard/, mais il est possible de la remplacer par une autre URL (avant dernière ligne de la section ci-dessus).
- Modifier les droits de l’utilisateur “monitor”
chown 1001:100 -R home/monitor
- Démonter la SDcard
cd umount /dev/sdX1
Démarrage du moniteur
La dernière étape est simple :
- Insérer la clé microSD dans la carte RikoMagic
- Connecter la prise HDMI et USB
- La clé démarrera automatiquement avec la télévision : le logo Linuxium apparaît, puis le navigateur Chromium démarre et se connecte automatiquement à l’url http://dashboard/
Le démarrage peut être relativement long la première fois, ou si le réseau n’est pas connecté.
Il est ensuite possible de mettre en place un alias DNS (par défaut : http://dashboard) pour atteindre un serveur Apache qui redirige vers une URL spécifique en fonction de l’adresse source du client ou de tout autre critère.
Voici une exemple de configuration Apache très simpliste, pour rediriger un client qui se connecte sur http://dashboard vers une URL spécifique en fonction de l’IP source :
<VirtualHost *:80> ServerAdmin support@zenetys.com ServerName dashboard RewriteEngine on RewriteCond %{REMOTE_HOST} 192\.168\.56\.1 RewriteRule .* https://www.zenetys.com/ [R=302,L] RewriteCond %{REMOTE_HOST} 192\.168\.56\.2 RewriteRule .* http://monip.org/ [R=302,L] </VirtualHost>
Références
- CNXSOFT – Boot Ubuntu (Linux) or Android from an SD Card on Rockchip RK3288 Devices
- XDA Developers – Running Android or Linux from an SD card on a RK3288 device – An easy way to dual boot
- Freak Tab – Running Android or Linux from an SD card on a RK3288 device – An easy way to dual boot
- Github rockchip-linux – Firefly-RK3288 Linux Kernel
- Freak Tab – Use Windows to create an SD card so you can run Linux on a RK3288 device
- HAOYU Electronics (hotmcu wiki) – Flashing Firmware Image Files Using The Rockchip Tool