BEOTOOTH 5500 : Un récepteur Bluetooth compatible Datalink

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)

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.

Boitier BEOTOOTH 5500
Lire la suite

Linux Mint / Ubuntu : Transmettre les informations de lecture multimédia via Bluetooth (AVRCP TG)

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 :

$ mkdir ~/.config/systemd/user
$ nano ~/.config/systemd/user/mpris-proxy.service

Y ajouter le contenu suivant :

[Unit]
Description=Forward bluetooth media controls to MPRIS

[Service]
Type=simple
ExecStart=/lib/bluetooth/mpris-proxy

[Install]
WantedBy=default.target

Il ne reste plus qu’à l’activer :

$ systemctl --user start mpris-proxy.service
$ systemctl --user enable mpris-proxy.service

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.

Codecs Bluetooth supplémentaires pour Linux Mint 21

Par défaut le seul codec audio disponible sous Linux Mint 21 est le codec SBC standard, de relativement faible qualité.

Il est cependant possible d’utiliser des codecs supplémentaires, en installant le module pulseaudio disponible ici :

https://github.com/EHfive/pulseaudio-modules-bt

(Instructions de compilations fournie sur la page).

Une application Kiosk Wayland, avec Weston

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 :

[core]
backend=drm-backend.so
idle-time=0

[output]
name=HDMI-A-1
mode=1920x1080
transform=rotate-90

[output]
name=eDP-1
mode=off

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

[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear -a kiosk %I $TERM
Type=simple
Environment=XDG_SESSION_TYPE=wayland

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.

Linux Mint : Compiler un noyau patché

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.

2. Installer les outils de compilation

Exécuter en console les commandes suivantes :

sudo apt update
sudo apt build-dep linux linux-image-$(uname -r)

sudo apt install libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf llvm build-essential libncurses5-dev gcc bc dwarves

3. Récupérer le code source du noyau

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 ».

Programmer sur microcontrôleur CH55x avec SDCC sous Linux

Mes notes succinctes à ce sujet :

Installation

Récupérer la bibliothèque ch554_sdcc : https://github.com/Blinkinlabs/ch554_sdcc (copie ci dessous si disparition du repo)

Récupérer l’outil de programmation ch552_tool : https://github.com/MarsTechHAN/ch552tool (copie ci dessous si disparition du repo)

Installer sdcc

$ apt-get install sdcc

Copier un exemple et l’utiliser comme base (le Makefile pointe vers un Makefile.include qui contient le nécessaire pour compiler vers le MCU cible).

Flasher le code

Le MCU contient un bootloader USB, activé en connectant D+ au +5V à travers une résistance de 10kohms à la mise sous tension.

Utilisation de ch552tool :

$ sudo python3 ch55xtool/ch55xtool.py -f FIRMWARE.bin -r

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.

Acer Aspire R13 : Faire fonctionner l’entrée micro jack

Ajouter la ligne suivante à la fin du fichier /etc/modprobe.d/alsa-base.conf

options snd-hda-intel model=auto,dell-headset-multi

Réparation d’un « boitier à chaine » STILE RF

Le « boitier à chaine » STILE RF est un appareil permettant l’ouverture / fermeture d’une fenêtre battante à l’aide d’une télécommande.

Photo du STILE RF
Boitier à chaine STILE RF

L’exemplaire en ma possession refuse totalement de fonctionner, et ne donne aucun signe de vie. Voyons si il est possible de le réparer.

Lire la suite

Kit E-Paper pour Beolink 5000

Ma Beolink 5000, après le remplacement de son écran défaillant par un afficheur E-Paper

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.

Lire la suite

MacPro 1,1 : Installer Linux Mint avec amorçage EFI

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 ) .

Le menu de sélection du périphérique d’amorçage

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.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nosplash"

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).

Il ne reste plus qu’à baillonner l’interruption gpe11, et optimiser le refroidissement de la carte graphique.

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 !

Sources :

https://forums.linuxmint.com/viewtopic.php?t=333755

https://help.ubuntu.com/community/MacPro

Notes :

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