Introduit en 1980 par le fabricant danois Bang & Olufsen avec le système Beolab 8000, le protocole Datalink 80 raccorde par un bus de données les différents appareils d’un même système , offrant à l’utilisateur un contrôle unifié sur ce dernier. Ainsi, une télécommande unique contrôle l’ensemble du système, et commencer la lecture sur un appareil provoque le basculement automatique de l’amplificateur sur l’entrée associée, ainsi que la mise en pause des autres appareils. Le protocole évolue au fil des années, voyant notamment, avec le Beosystem 5500, l’addition d’une transmission en temps réelle de l’état des appareils, alors affiché sur la télécommande (Master Control Panel 5500)
Étant propriétaire d’un système 5500 (BEOMASTER 5500, BEOCORD 5500, BEOGRAM CD 5500, et MASTER CONTROL PANEL 5500), j’ai souhaité lui ajouter une fonction Bluetooth audio, qui, contrairement à un adaptateur Bluetooth Audio classique, exploiterait le protocole Datalink pour offrir la même interface de contrôle que les autres éléments du système.
Le BEOMASTER 5500 étant doté d’une entrée TP2 permettant le contrôle d’un second BEOCORD, j’ai entrepris de concevoir un récepteur Bluetooth capable de simuler un BEOCORD 5500 sur le bus Datalink. Ce récepteur relaie les commandes du système (PLAY/PAUSE, etc.) via Bluetooth et transmet les informations sur la piste en cours de lecture au système.
Après un premier prototype à base d’ESP32 ne me donnant par entièrement satisfaction (codec SBC seulement, et stabilité de la connexion marginale), j’ai remanié le projet autour d’un module BM83 de Microchip, et je suis parvenu à un résultat satisfaisant, que j’ai nommé le BEOTOOTH 5500.
Ayant récemment développé un projet de récepteur audio Bluetooth utilisant AVRCP pour récupérer les informations du lecteur multimédia actif, j’ai pu constater que Linux Mint ne communique aucune information sur le média en cours de lecture à travers la liaison Bluetooth.
Après quelques recherche, il s’avère que c’est le démon MPRIS-PROXY qui est chargé de cette fonction, mais celui-ci ne semble pas actif sous Mint. Pire, il est introuvable ni à son emplacement supposé (/bin), ni dans les paquets !
La frayeur est de courte durée, il est bien installé avec le paquet bluez, et se situe à /lib/bluetooth/mpris-proxy.
Il suffit pour l’activer de créer un fichier de configuration pour systemd en mode utilisateur :
[Unit]
Description=Forward bluetooth media controls to MPRIS
[Service]
Type=simple
# For Linux Mint <= 21.3 or Ubuntu < 24.xx
#ExecStart=/lib/bluetooth/mpris-proxy
# For Linux Mint >= 22 or Ubuntu >= 24.xx
ExecStart=/bin/mpris-proxy
[Install]
WantedBy=default.target
On peut vérifier son bon fonctionnement avec la commande suivante :
$ systemctl --user status mpris-proxy.service
Qui doit nous retourner cette réponse :
Et voilà, les informations de la lecture multimédia (état lecture / pause, piste en cours, et position) sont maintenant accessibles par les périphériques Bluetooth connectés.
Cet article contient une synthèse de la procédure à suivre pour exécuter une application en mode Kiosk sous Debian, en utilisant le compositeur Weston.
Il existe le compositeur « cage » dédié à ce rôle, mais son manque de flexibilité est vite limitant (il est notamment impossible de désactiver une sortie video).
Le compositeur ainsi que l’application sont exécutés par un utilisateur « kiosk » avec des droits restreints, évitant de compromettre toute la sécurité du système en cas de crash du compositeur / retour au shell
1. Installer weston et seatd
seatd arbitre l’accès au matériel d’entrée / sortie ( écran / clavier + souris ), et est nécessaire à l’utilisation de weston.
# apt install tmux weston seatd
2. Fichier de configuration weston.ini
On créé le fichier weston.ini, que l’on place dans le répertoire personnel de l’utilisateur « kiosk » , avec pour contenu suivant :
Le bloc [core] spécifie l’utilisation du pilote « drm », qui prend directement la main sur la carte graphique sans passer par un autre compositeur, et désactive l’écran de veille.
Les blocs [output] configurent les différentes sorties video. Dans ce cas l’une est désactivée, tandis que l’autre est en mode portrait. Le nom des sorties provient du répertoire /sys/class/drm.
3. Script de lancement
Créer le script start_kiosk.sh dans le répertoire personnel de l’utilisateur « kiosk ». Son contenu est le suivant :
#!/bin/bash
weston --config /home/kiosk/weston.ini &
sleep 5s # could be less
export WAYLAND_DISPLAY=wayland-1
export DISPLAY=:1
exec /home/kiosk/kiosk_app --platform wayland 2>log_kiosk.txt
Modifier la commande de lancement pour correspondre au chemin du fichier weston.ini
La ligne « sleep 5s » pourrait être modifiée pour attendre une notification de démarrage de weston. Des solutions existent utilisant systemd, mais je n’ai pas trouvé de solution simple adaptée à mon cas.
Dans mon cas, j’exécute une application Qt nommée « kiosk_app », pour Qt il est nécessaire de spécifier –platform wayland, sans quoi l’application ne démarre pas.
4. Login automatique de l’utilisateur « kiosk »
Créé le fichier /etc/systemd/system/getty@tty1.service.d/autologin.conf avec pour contenu
Il est nécessaire d’utiliser le tty1 plutôt que le traditionnel tty7 pour l’interface graphique, car le changement de terminal automatique n’est pas fiable.
5. Conclusion
Cette approche permet le lancement d’une application en mode kiosk, sans aucun bureau traditionnel installé. L’utilisation de Wayland améliore grandement la fluidité, et garanti notamment l’absence de « tearing » (affichage partiel de 2 images consécutives) qui est très visible voire dérangeant lors de la lecture de video avec X11.
Il existe beaucoup de documentation sur la façon de compiler un noyau Ubuntu / Linux Mint à partir des sources, mais il s’avère que la plupart sont incomplètes et/ou obsolètes. L’utilisation d’une méthode inadaptée n’est décelable qu’après plusieurs heures de compilation, découvrir la bonne méthode par tâtonnement peut s’avérer particulièrement frustrant.
Voici la bonne méthode (source en anglais), éditée par mes soins pour éviter de dérouler toute la procédure en super-utilisateur (root), car cela n’est pas nécessaire.
1. Activer les dépôts de sources.
Depuis le menu Mint, lancer le logiciel « Sources de logiciels », et activer « Dépôts de code source ».
Cliquer ensuite sur « Valider » pour mettre a jour le cache.
Le code source du noyau Linux est disponible sur le site http://kernel.org, mais ce qui nous intéresse ici est le noyau patché par Ubuntu, qui est utilisé par Linux Mint. Téléchargeons les sources dans un dossier créé à cette fin :
mkdir linux-src
cd linux-src
apt source linux-image-unsigned-$(uname -r)
Plaçons-nous dans le dossier téléchargé, et donnons les permissions d’exécutions au scripts :
cd linux-hwe-6.2-6.2.0 # A mettre à jour avec le nom de votre noyau
chmod a+x debian/scripts/*
chmod a+x -R ./scripts
4. Appliquer vos patches
En exécutant, pour chaque patch, la commande suivante
patch -p1 <CHEMIN_DU_FICHIER_PATCH>.patch
5. Copier la configuration
cp /boot/config-$(uname -r) ./.config
# update config for new kernel
make oldconfig
6. Lancer la compilation
En exécutant la commande suivante :
make -j16 deb-pkg LOCALVERSION=-custom
L’argument « -j16 » permet de sélectionner le nombre de tâches exécutées en parallèle, une valeur plus élevée nécessitant plus de ressources matérielles (RAM notamment). La valeur idéal correspond généralement au nombre de thread exécutables en parallèle sur le système (par exemple 4 dans le cas d’un processeur 2 core / 4 threads).
7. Installer le nouveau noyau
# change to parent dir
cd ..
dpkg -i *.deb
update-grub
8. Démarrer sur le nouveau noyau
Le nouveau noyau est maintenant disponible au démarrage, dans le menu du chargeur d’amorçage Grub. Attention, ce n’est pas forcément le choix par défaut ! Il est reconnaissable a son préfixe « custom ».
Execution en root nécessaire. Crash après la programmation si l’option « -r » (reset avec flash) est utilisée, à cause de la déconnexion du device cible.
Produite entre 1991 et 1996 par le fabricant danois Bang & Olufsen, la Beolink 5000 est une télécommande permettant de contrôler les différents appareils de la marque, ainsi que de monitorer leur état grâce à l’écran LCD translucide présent à son extrémité. Ce modèle représentait en son temps l’état de l’art dans le domaine des télécommandes multimédia.
Malheureusement, bon nombre de ces télécommandes ont maintenant 30 ans d’age, et si certains composants vieillissants sont facilement remplacés ( notamment les condensateurs électrochimiques assurant la stabilité de la communication infrarouge ), les adhésifs chargés de maintenir en place l’écran et sa nappe montrent eux aussi des signes de faiblesse, avec pour conséquence un détachement partiel ou complet de la nappe de l’écran, ce dernier perdant de ce fait ses capacités d’affichage. La grande majorité des télécommandes encore existantes sont affectées par cette maladie. Certaines fonctions qui requièrent un écran fonctionnel, telles que le paramétrage de la télécommande, ou des équipements associés, deviennent alors inutilisables.
L’exemplaire en ma possession présentait un état encore plus dramatique, l’écran complètement séparé de la télécommande, la nappe le raccordant à son électronique de contrôle s’étant déchirée sous son poids. J’ai décidé de consacré une partie de mon temps libre de l’année dernière à la conception d’un remplacement.
J’avais déjà il y a quelques temps publié un article décrivant comment installer Linux sur un MacPro 1.1 sans carte graphique ni EFI. Cet article proposait une méthode d’installation utilisant le mode de démarrage en mode « compatibilité BIOS », qui a pour principaux inconvénient de nécessiter un passage par un CD d’amorçage pour l’installation, et, une fois l’installation terminée, implique des temps de démarrage de plus d’une minute. Ayant depuis mis la main sur une carte graphique avec le firmware Apple adéquat, cet article décrit l’installation de Linux Mint avec amorçage EFI.
La méthode décrite dans cet article nécessite une carte graphique Apple fonctionnelle afin de pouvoir afficher le menu d’amorçage !
Création de la clé USB d’installation
Utiliser GParted pour créer une nouvelle table de partition GPT sur la clé USB.
Créer 2 partitions sur la clé USB :
Une partition « EFI », de type FAT32, de taille 200Mo, avec le fanion « boot »
Une partition de type ext4 occupant le reste de la clé.
Copier l’intégralité des fichiers de l’ISO d’installation sur la partition ext4.
Sur la partition EFI, créer le dossier /efi/boot, et y copier le fichier bootia32.efi. (source).
Créer également le dossier /boot/grub, et y copier les fichiers vmlinuz et initrd.lz obtenus dans le dossier casper de l’ISO d’installation. Y copier également le fichier grub.cfg obtenu dans /boot/grub.
Editer le fichier grub.cfg, y insérer le contenu suivant ( avant la première entrée de menu ) :
menuentry "Install Mint MacPro" --class linuxmint {
linux /boot/grub/vmlinuz live-media-path=/casper/ ignore_uuid root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX boot=casper nosplash noefi --
initrd /boot/grub/initrd.lz
}
en remplaçant PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX par l’identifiant de la partition où l’on a copié les fichiers de l’ISO d’installation, obtenu à l’aide de la commande blkid.
Démarrage sur la clé USB d’installation
Immédiatement après avoir appuyé sur le bouton de mise sous tension du MacPro, maintenir appuyer la touche Alt du clavier, jusqu’à l’apparition d’un menu de sélection du périphérique d’amorçage. (Cela devrait prendre environ 5 secondes après le gong sonore de démarrage ) .
Appuyer une fois sur la flèche de droite pour sélectionner le périphérique USB EFI Bootpuis appuyer sur entrée.
Le lanceur grub démarre. Appuyer sur entrée pour procéder à la sélection de la première entrée, intitulée Install Mint MacPro.
Le démarrage de l’image d’installation prend jusqu’à 5 minutes, sans que rien ne s’affiche à l’écran, cela semble normal, et est vraisemblablement due à la faible vitesse d’accès USB de l’implémentation EFI sur ces machines.
Procéder à l’installation de manière usuelle.
A la fin de l’installation, ne pas redémarrer !
Procéder au montage de la partition du disque sur lequel l’installation a été effectuée, et éditer le fichier /boot/grub/grub.cfg, et rechercher la ligne contenant les arguments noyaux pour le démarrage par défaut (Il doit s’agit de la 1ere ligne commençant par la commande linux). Y ajouter l’arguement noefisi il n’y figure pas. ( Cette modification est nécessaire pour permettre un bon démarrage du noyau ).
linux /boot/vmlinuz-5.8.0-48-generic root=UUID=dabdd8d7-32f0-46a3-9c20-ba8cf5c342aa ro quiet splash noefi
Une fois la modification effectuée (et enregistrée), redémarrer la machine.
Après l’installation
Editer le fichier /etc/default/grub pour y faire figurer la modification précédemment effectuée :
GRUB_CMDLINE_LINUX="noefi"
Si l’on souhaite par la suite utiliser une carte graphique ne possédant pas le firmware Apple, y apporter également la modification suivante, sans laquelle ma machine (dotée d’une carte graphique AMD R9 380) se fige à l’extinction lorsque plusieurs écrans y sont raccordés.
Regénérer les fichiers de configuration de grub incorporant ces modifications, à l’aide de la commande suivante :
# update-grub
Conclusion
La machine démarre maintenant en 40 secondes montre en main, ce qui représente une nette amélioration du temps de démarrage précédemment obtenu avec la compatibilité BIOS, qui était supérieure a la minute, sans présenter d’autre inconvénient que de nécessiter une carte graphique Apple pour procéder à l’installation. (j’ai tenté par la suite de reproduire la procédure « à l’aveugle », sans résultat).
Cependant, l’argument noefi étant nécessaire au bon démarrage du noyau, mon ambition de pouvoir enfin editer la variable EFI assurant le réglage du volume du gong de démarrage est tombée à l’eau. Je me contenterai du temps de démarrage raccourci !
Contrairement à l’installation effectuée en mode BIOS, le paramètre noyaux amdgpu.dc=0 n’est plus nécessaire pour obtenir un affichage avec ma carte graphique AMD.
Pour résoudre le problème rencontré à l’extinction de la machine, les arguments noyau suivant ont été essayés, sans résultat : amdgpu.runpm=0, reboot=pci, acpi=noirq et irq=off
Commentaires récents