Description
Voyons ensemble comment gérer les fonctionnalités multimédias sous OpenBSD.
Audio
Gestion du Bip
Le bip sonore qui se fait entendre parfois dans certains contextes, tel lors de l’utilisation de la complétion de commande avec la touche Tab, peut être rendu muet.
Avant OpenBSD 6.7, c’est l’outil mixerctl
qui le permettait :
# mixerctl inputs.mix_beep = 0
Depuis OpenBSD 6.7, ce paramètre est géré par le pilote wscons(4)
et configuré par le biais du contrôleur wsconsctl(8)
— ce qui
nécessite des droits administrateurs.
Pour le rendre muet :
# wsconsctl keyboard.bell.volume=0
Pour le désactiver définitivement et garder le paramètre au redémarrage,
copiez-le fichier /etc/examples/wsconsctl.conf
vers /etc
et
décommentez la ligne : #keyboard.bell.volume=0
Enregistrement audio
Depuis OpenBSD 6.4, pour des raisons de confidentialité, l’enregistrement audio est désactivé. Pour le réactiver :
# sysctl kern.audio.record=1
Pensez à modifier le fichier /etc/sysctl.conf
!
Cela sera utile dans le contexte d’utilisation d’un microphone, d’une webcam ayant un micro, etc… ce qui permettra d’utiliser correctement tout logiciel tel audacity… ainsi que lors de l’utilisation du protocole WebRTC avec les navigateurs web, que sont Firefox et Chromium.
Gestion des niveaux
La gestion des niveaux de volume se fait en espace utilisateur, grâce à l’outil sndioctl(1). Pas besoin de droits administrateur dans la session utilisateur.
- pour augmenter/diminuer le niveau :
$ sndioctl output.level=+0.1
- pour mettre/enlever le mode muet :
$ sndioctl output.mute=!
- pour voir les niveaux en pourcentage :
$ sndioctl output.level | awk -F = '{printf "%d\n",$2*100}'
Pensez à modifier votre fichier ~/.kshrc
pour ajouter la commande
si vous voulez un niveau audio par défaut lors du démarrage de la session.
Gestion des paramètres
Pour la gestion des paramètres, c’est l’outil mixerctl(1) qui est à utiliser. Celui-ci s’utilise toujours avec des droits administrateurs !
# mixerctl -av
permet de savoir ce qui de votre matériel est reconnu.
Toute modification de paramètres devra être enregistré dans le fichier
/etc/mixerctl.conf
qui n’existe pas par défaut. Il faut le copier depuis
les fichiers d’exemples :
# cp /etc/examples/mixerctl.conf /etc/
Illustrons par le cas d’utilisation d’une sortie USB Audio et SPDIF :
HDMI Audio
C’est apparemment une situation complexe qui semble n’avoir encore à ce jour pas de solution.
Pour comprendre le propos lire la discussion suivante et suivez le fil : https://marc.info/?l=openbsd-tech&m=158780750403100&w=2
USB Audio
DAC USB
outputs.mode=analog
Il est de plus en plus courant d’avoir un périphérique Audio par USB, voir
un DAC Audio USB. Une fois connecté, pour vérifier son support, utilisons
la commande suivante :
dmesg | grep uaudio
ainsi que la commande usbdevs
.
Tel que, pour l’exemple :
uaudio0 at uhub0 port 1 configuration 1 interface 1 "Logitech Logitech USB Headset" rev 1.10/10.13 addr 2
uaudio0: class v1, full-speed, sync, channels: 2 play, 1 rec, 7 ctls
audio1 at uaudio0
qui est reconnu en tant que périphérique uaudio0
qui est connecté sur
le périphérique spécial audio audio1
.
Le serveur sndiod le reconnaît en tant que périphérique snd/1
.
Deux manières différentes de procéder :
- la plus simple est de reconfigurer la variable
server.device
pour qu’il écoute le périphériquesnd/1
:$ sndioctl server.device=1
ce qui a pour avantage de ne pas avoir à reconfigurer tout autre logiciel pour écouter ledit périphérique. - la deuxième est liée aux programmes gérant de l’audio capables d’utiliser
directement le périphérique
snd/1
.
Par exemple, avec le logiciel audacious, il faut aller dans les
Paramètres > Paramètre de son, puis face au champ Greffon de sortie,
il y a deux boutons, dont l’un nommé [Paramètres] qui ouvre une autre
fenêtre où pour le champ Périphérique :, il faudra écrire le nom du
périphérique audio USB, soit snd/1
, puis valider et écouter du son…
Il existe une manière alternative pour que le serveur sndiod reconnaisse
automatiquement le périphérique USB en tant que périphérique par défaut,
lorsqu’il est connecté physiquement, puis de rebasculer sur le périphérique
snd/0
dès que ce n’est plus le cas.
Pour ce contexte, il faut redéfinir les drapeaux du serveur sndiod puis le relancer :
# rcctl set sndiod flags -f rsnd/0 -F rsnd/1
# rcctl restart sndiod
Le serveur n’est pas capable de se relancer automatiquement si vous connectez
le périphérique USB après le (re)démarrage du serveur. Une fois, le périphérique
connecté, rechargez tout simplement le serveur :
# rcctl reload sndiod
forcera le serveur a détecter à nouveau le périphérique.
Un autre outil disponible est l’utilisation de la commande usbhidaction
…
Je vous renvoie au manpage relatif — cf la section Documentations .
Microphone USB
⇒ Après avoir connecté physiquement votre microphone USB, vérifiez la reconnaissance :
$ dmesg | grep audio
uaudio0 at uhub4 port 2 configuration 1 interface 1 "BIRD UM1 BIRD UM1" rev 1.10/1.00 addr 2
uaudio0: class v1, full-speed, sync, channels: 0 play, 1 rec, 2 ctls
audio1 at uaudio0
(dans mon cas, le microphone est bien le BIRD UM1.)
Si vous avez une sortie similaire, alors votre microphone USB est bien reconnu et sera utilisable ; si non, dommage.
Là encore du fait d’être un périphérique USB, le serveur sndiod capture
l’enregistrement micro en tant que périphérique snd/1
principalement.
⇒ Pour utiliser le microphone USB sous OpenBSD :
- Dans un premier temps, veillez à activer l’enregistrement audio .
- Puis, il faut paramètrer le serveur sndiod, tel que :
# rcctl set sndiod flags -s default -m play,mon -s mon
- puis le (re)démarrer…
- Optionnellement, vous pouvez vous assurer des paramètres d’entrée par le contrôleur sndioctl, tel que :
$ sndioctl input.mute=0
$ sndioctl input.level=1
Un petit test de fonctionnement, en parlant près du microphone :
$ aucat -f snd/1 -o output.wav
Et pour l’écoute :
$ aucat -i output.wav
Sortie SPDIF
Pour utiliser une sortie SPDIF, il faut modifier le mode de sortie ; en effet, par défaut le mode de sortie correspond à l’analogique.
Avec l’outil mixerctl
, modifiez ce mode, tel que :
outputs.mode=digital
Ensuite, il faut modifier le serveur de son sndiod(8) pour qu’il gère
les canaux audio correspondants, car par défaut, il ne gère que les deux
premiers canaux, à savoir 0:1
; ce qui permet d’avoir quand même un son
stéréo.
Avant de le modifier, vérifions dans un premier temps, la sortie SPDIF,
tel que :
# mixerctl outputs.SPDIF_source
Dans le contexte de la carte-mère que j’utilise :
$ doas mixerctl outputs.SPDIF_source
outputs.SPDIF_source=dig-dac-2:3
Ainsi, la sortie SPDIF se fait sur les canaux 2 et 3.
Modifions le serveur sndiod pour ajouter la gestion des canaux 2 et 3, au démarrage de celui-ci :
# rcctl set sndiod flags -c 0:3
# rcctl restart sndiod
Il est possible de lui signifier de n’utiliser que les canaux 2 et 3.
De plus, votre matériel peut certainement utiliser encore plus de canaux. À vous de modifier en conséquence…
Lire le manpage sndiod(8) qui montre dans les exemples son utilisation en espace utilisateur.
Vidéo
Enregistrement vidéo
Par défaut, depuis OpenBSD 6.9, pour des raisons de confidentialité, l’enregistrement vidéo est désactivé !
Pour le réactiver :
# sysctl kern.video.record=1
Pensez à modifier le fichier /etc/sysctl.conf
!
Cela sera utile dans le contexte d’utilisation d’une webcam ayant un micro, etc… ce qui permettra d’utiliser correctement tout logiciel tel fswebcam… ainsi que lors de l’utilisation du protocole WebRTC avec les navigateurs web, que sont Firefox et Chromium.
Dépannage
mixerctl: AUDIO_MIXER_WRITE: Device busy
Lorsque vous essayez de changer le mode de sortie de l’analogique vers le digital et réciproquement, le système vous répond avec ce message interdisant la modification.
- arrêtez d’abord le serveur sndiod ; vérifiez qu’il est correctement éteint.
- refaites la modification désirée, avec l’outil
mixerctl
- redémarrez le serveur sndiod
vérifier le fonctionnement du serveur sndiod
Pour vérifier le fonctionnement du serveur sndiod(8), hormis de vérifier
le status de son démon, utilisez la commande suivante :
$ pgrep -lf sndiod
Par exemple
$ pgrep -lf sndiod
44982 /usr/bin/sndiod -c0:3
16091 sndiod: helper
qui montre le fonctionnement du serveur…
Documentations
manpage
Enjoy-ID! Enjoy-IT!