====== Borne d'arcade BioHackLab ====== (page créée le 7 février 2025) Une borne pour jouer aux jeux réalisés pendant les ateliers / game jam ===== Matériel ===== Écran Gateway 19" TFT LCD, connexion par VGA avec adaptateur. Résolution 1280 x 1024, 59.907Hz ===== Préparation Raspberry Pi ===== Quoi de neuf sur Debian 12 Bookworm pour Raspberry ? https://www.framboise314.fr/bookworm-la-nouvelle-version-de-raspberry-pi-os/ * Adresse MAC Wifi : d8:3a:dd:ee:23:f3 * Adresse MAC ethernet : d8:3a:dd:ee:23:f2 **Préparer la carte micro-SD avec l'OS**\\ C'est très simple en utilisant Raspberry Pi Imager qui s'occupe de préparer la carte micro-SD avec un OS choisi dans une liste assez garnie.\\ Installation de Raspberry Pi Imager à télécharger ici : https://www.raspberrypi.com/software/ On peut le démarrer avec rpi-imager & Ce logiciel permet de choisir l'OS à installer (ici : Raspberry Pi OS 64-bit = Debian Bookworm) et de définir quelques réglages : * nom de l'hôte : biohacklab.local * réseau wifi : FabLab_24 * utilisateur : xor / lpl * SSH activé (si jamais on oublie de l'activer il est toujours possible d'[[https://howchoo.com/pi/how-to-enable-ssh-on-raspbian-without-a-screen/|activer SSH sur la carte microSD]]) **Afficher l'adresse IP du rpi**\\ ''hostname -I'' ou ''ip addr'' **Se connecter au rpi en SSH**\\ ''ssh xor@192.168.1.35'' **Copier un fichier vers le rpi**\\ ''scp ./fondecran_01.png xor@192.168.1.35:/home/xor/borne_biohacklab_ui_v5'' **Premier démarrage**\\ * pas d'image sur le moniteur (branché avec un adaptateur micro-HDMI / VGA) * biohacklab.local ne répond pas * ''sudo nmap -sP 192.168.1.*'' : le rpi n'apparaît pas Passage obligatoire sur https://www.raspberrypi.com/documentation/computers/getting-started.html \\ On peut aussi trouver l'adresse IP à partir de l'adresse MAC sudo nmap -sn 192.168.1.1/24|awk '/^Nmap/{ip=$NF}/D8:3A:DD/{print ip}' On peut trouver l'adresse MAC du Pi en ligne de commande avec ''ifconfig'' Même si nmap ne «voit» pas le rpi, on peut s'y connecter en SSH! ssh xor@biohacklab.local ssh xor@192.168.1.30 **Ressources générales sur le raspberry pi** * cheat sheet : https://gist.github.com/hofmannsven/9132419 * keyboard shorcuts : https://g7rdx.co.uk/linux/raspberry-keyboard-shortcuts/ ==== Questions d'écran ==== Essai pour configurer le moniteur directement dans le fichier ''/boot/firmware/config.txt'' > sans succès \\ Boot avec HDMI branché sans adaptateur : ok \\ **Faire fonctionner l'adaptateur micro-HDMI - VGA** \\ Il s'agit de ce modèle acheté chez Smallcab : [[https://www.smallcab.net/convertisseur-micro-hdmi-vers-pour-raspberry-p-2393.html|adaptateur micro HDMI / VGA]] \\ Après un premier essai non concluant sur un moniteur, le second testé a fonctionné! **Problème de moniteur** \\ L'affichage "saute", puis le message "video mode not supported" s'affiche On modifiant le fichier ''/boot/firmware/cmdline.txt'' et en ajoutant au début :\\ video=HDMI-A-2:720x576M@50 ça fonctionne de nouveau ... \\ mais ce n'est pas du 720x576, il doit y avoir un autre composant qui agit après le démarrage \\ doc : https://www.raspberrypi.com/documentation/computers/configuration.html#command-line-options \\ voir aussi : https://pimylifeup.com/raspberry-pi-screen-resolution/ \\ le rpi est il en wayland ou en x ? pour l'adaptateur surtout pas le D! (dans video=HDMI-A-2:720x576M@50D) D pour digital, A pour analog \\ Réponse : en wayland ( https://www.framboise314.fr/bookworm-la-nouvelle-version-de-raspberry-pi-os/ ) ==== Chromium en mode kiosque ==== On trouve pas mal de choses sur le sujet mais en grande partie obsolète car le système du raspberry pi change au fil du temps... \\ La meilleure référence semble être : https://forums.raspberrypi.com/viewtopic.php?t=378883 \\ Avant tout : **on sort du «kiosk mode» avec** Alt + F4, ou Ctrl + Shift + Backspace **Refs plus ou moins obsolètes :** * https://www.raspberrypi.com/tutorials/how-to-use-a-raspberry-pi-in-kiosk-mode/ * https://www.scalzotto.nl/posts/raspberry-pi-kiosk/ * https://www.airdroid.com/mdm/chromium-kiosk-mode/ * https://wiki.houptlab.org/index.php?title=Raspberry_Pi_Kiosk&mobileaction=toggle_view_desktop * https://reelyactive.github.io/diy/pi-kiosk/ ==== Configurer le démarrage automatique ==== **Choix d'un serveur** \\ Plusieurs possibilités exposées ici : https://github.com/processing/p5.js/wiki/Local-server \\ Essai avec SimpleHTTPServer en python qui est déjà installé ( https://github.com/processing/p5.js/wiki/Local-server#python-simplehttpserver ) \\ On le lance avec ''python -m http.server'' depuis un répertoire qui devient la racine du serveur. **Masquer la souris** \\ On peut installer le paquet unclutter pour masquer le pointeur de souris quand il n'y a pas d'activité sudo apt install unclutter **NON**, ça ne fonctionne plus sur Debian 12 Bookworm avec Wayland :/ \\ Autre solution à tester ici : https://forums.raspberrypi.com/viewtopic.php?t=358285#p2175588 **Masquer automatiquement la barre des tâches**\\ Ajouter les lignes suivantes dans le fichier ''.config/wf-panel-pi.ini'' autohide=true autohide_duration=500 heightwhenhidden=0 # test sinon la barre est à moitié visible ... Problème maintenant, la barre ne réapparaît plus au survol de la souris! Après un redémarrage, elle réapparaît à moitié et reste fixe! TODO : améliorer\\ Exemple très complet du fichier wf-panel-pi.ini : https://github.com/WayfireWM/wf-shell/blob/master/wf-shell.ini.example === Étape 1 : démarrer sans logging manuel === sudo raspi-config Sélectionner : System Options > Boot / Auto Login > Desktop Autologin: Desktop GUI, automatically logged in as 'xor' user. === Étape 2 : préparer le fichier autostart === Créer le fichier cd /home/xor/.config/labwc touch autostart nano autostart Pour le modifier par la suite nano /home/xor/.config/labwc/autostart Le fichier ''autostart'' contient cd /home/xor/borne_biohacklab_ui_v5/ /usr/bin/python -m http.server & # <-- & : important de lancer le processus en arrière-plan, sinon la suite du script ne se réalise pas # unclutter -idle 1 & # masquer le pointeur après 1 seconde d'inactivité, ne fonctionne pas pas sur Debian 12 avec Wayland sleep 8 chromium --start-fullscreen --start-maximized --noerrdialogs --disable-infobars --kiosk http://localhost:8000 === Étape 3 : quand tout fonctionne, passer en lecture seule === sudo raspi-config Dans les menus : * sélectionner Performance options * sélectionner Overlay File System * confirmer l'activation de «Overlay File System» * confirmer la protection en écriture de la partition de boot * confirmer le reboot Voir : https://pip.raspberrypi.com/categories/685-whitepapers-app-notes/documents/RP-003610-WP/Making-a-more-resilient-file-system.pdf **Rétablir la partition en lecture / écriture** \\ Temporairement (jusqu'au reboot) : sudo mount -o remount,rw /boot -> ça ne fonctionne pas :/ \\ Pour rétablir la partition en lecture, il faut 2 reboot : dans raspi-config, désactiver l'Overlay File System, puis reboot \\ dans raspi-config, passer la partition en écriture, puis reboot \\ (Voir ici pour le détail de la procédure complète : https://core-electronics.com.au/guides/read-only-raspberry-pi/) ===== Interface hardware ===== Premier schéma {{:projets:biohacklab:prototype_premier_schema.jpg?direct&600|}} ==== Alimentation 12V ==== Fournisseur : Smallcab https://www.smallcab.net/alimentation-12v10a-borniers-p-1870.html {{:projets:biohacklab:schema-alimentation-borniers-12v5a-face.png?direct&600|}} {{:projets:biohacklab:schema-alimentation-borniers-12v5a-dessus.png?direct&600|}} ==== Trackball ==== Il s'agit de ce trackball acheté chez Smallcab : [[https://www.smallcab.net/trackball-lumineux-p-2488.html|trackball lumineux USB]] \\ Il est fourni sans boutons, j'en rajoute. {{:projets:biohacklab:prototype_cablage_trackball.jpg?direct&600|}} ==== Makey Makey et boutons ==== Le makey makey permet de remplacer le clavier (flèches directionnelles et autres touches) \\ Voir la page consacrée au [[materiel:makey_makey:start|Makey Makey]] ===== Interface UI ===== Schéma de principe {{:projets:biohacklab:borne_schema_ui.jpg?direct&800|}} Pour éviter des barres de scrolling dans l'iframe, il faut indiquer dans le code de la page qui s'affiche * https://stackoverflow.com/questions/15494568/html-iframe-disable-scroll * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe ===== Fabrication ===== Formulaire de calcul bien pratique pour calculer angles et longueurs d'un triangle rectangle (Pythagore for ever) : https://www.123calculus.com/triangle-rectangle-page-7-30-120.html **Maquette papier** \\ Pour tester les dimensions et donner un nom à chaque partie {{:projets:biohacklab:borne_maquette_papier.jpg?direct&600|}} \\ {{:projets:biohacklab:borne_maquette.pdf|}} {{:projets:biohacklab:borne_maquette.svg?linkonly|}} ==== Découpe et assemblage des pièces en MDF ==== {{:projets:biohacklab:borne_plan_mdf_pour_a4_ok.png?direct&1000|}} \\ {{:projets:biohacklab:borne_plan_mdf_pour_a4.pdf|}} {{:projets:biohacklab:borne_plan_mdf_pour_a4.svg?linkonly|}} {{:projets:biohacklab:borne_plan_mdf_assemblage.png?direct&600|}} \\ {{:projets:biohacklab:borne_plan_mdf_assemblage.svg?linkonly|}} ==== Découpe et assemblage des pièces en contreplaqué ==== Les pièces sont préparées pour être découpées sur une machine qui accepte un format maximum de 600x300 mm {{:projets:biohacklab:borne_plan_complet.png?direct&1000|}} \\ {{:projets:biohacklab:borne_plan_complet_20250305_19h32.svg?linkonly|}} ==== v0.1 ==== {{:projets:biohacklab:borne_v0.1.jpg?direct&600|}} État : démarre à la prise (rpi bloqué en écriture), interface fonctionnelle mais un peu moche, jeux à corriger pour certains... **TODO software** * La barre à gauche des jeux est vraiment moche * icone de retour à l'accueil trop petit * pourquoi les jeux bitsy sont ils si longs à démarrer ? (python http.server ?) * + liste des bugs remontés ===== Maintenance ===== ==== sept. 2025 ==== Le système démarre, le navigateur (chromium) s'ouvre, mais ne charge pas la page... Il s'agit d'un bug connu de chrome sur raspberry pi : le bug du premier onglet! En effet, l'écran reste blanc et le curseur de chargement tourne indéfiniment, si on recharge la page (F5), tout fonctionne normalement. \\ Plusieurs solutions possibles, dépendantes du serveur d'affichage utilisé, X11 ou Wayland, car il y a une transition en cours dans le monde linux entre les deux. Avec X11 on peut utiliser xdotool qui permet d'envoyer des frappes clavier fake vers une fenêtre, avec Wayland on ne peut pas (pas de communication entre les fenêtres/applications pour des raisons de sécurité... \\ Après essais de différentes solutions, ça ne fonctionne toujours pas, une autre possibilité est d'ouvrir un serveur de debugging sur chromium et de luis envoyer des commandes pour déclencher un rechargement de la page. Sur X11 et Wayland : https://nullrequest.com/posts/whywaylandisthefuture On peut connaître le système d'affichage utilisé avec : ''echo $XDG_SESSION_TYPE'' Essai avec le serveur de debugging : sans succès / TODO ajouter code autostart + script python (cf. rep /home/xor/.config/labwc) \\ Essai avec firefox en mode kiosque : sans succès :/ (à creuser... cf. https://wiki.mozilla.org/Firefox/CommandLineOptions ) Finalement comme solution temporaire, on ajoute un mini clavier USB dans la borne, sur lequel il faut appuyer sur F5 quand ça mouline sur un premier onglet blanc : ça fonctionne mais c'est moche