Aller au contenu

Publiez vos dashboards avec la clé HDMI RikoMagic v5 LE

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.

Benoit Dolez, , 5 min de lecture
Publiez vos dashboards avec la clé HDMI RikoMagic v5 LE

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

RikoMagic V5

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 :

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⁠ (s'ouvre dans un nouvel onglet)

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⁠ (s'ouvre dans un nouvel onglet)

Cette dernière solution consiste à télécharger linuxium (Ubuntu 14.04) : https://drive.google.com/….Tnc⁠ (s'ouvre dans un nouvel onglet) 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.

  1. Monter la microSD et se positionner dans le répertoire

    sudo -i
    mount /dev/sdX1 /mnt/usb
    cd /mnt/usb
    
  2. 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
    
  3. 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 »

  4. 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
    
  5. 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
    
  6. Donner les droits « root » à l’utilisateur « admin »

    echo "admin ALL=(ALL) NOPASSWD: ALL" > etc/sudoers.d/admin
    
  7. 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
    
  8. 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
    
  9. 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
    
  10. 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/⁠ (s'ouvre dans un nouvel onglet), mais il est possible de la remplacer par une autre URL (avant dernière ligne de la section ci-dessus).

  11. Modifier les droits de l’utilisateur “monitor”

    chown 1001:100 -R home/monitor
    
  12. 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/⁠ (s'ouvre dans un nouvel onglet)

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⁠ (s'ouvre dans un nouvel onglet)) 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⁠ (s'ouvre dans un nouvel onglet) 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

Dans la même thématique

Tout le blog