Get sound, the screen and emoji working on musicdolphin's Pi 5

- HiFiBerry: the plain hifiberry-dacplus overlay makes the Pi the I2S clock consumer,
  which the Pi 5's controller refuses (snd_soc_dai_set_fmt -22). The card never probed,
  so every softvol_* device was dead: squeezelite crash-looped and the backend and
  shairport played into nothing. hifiberry-dacplus-std has the Pi drive the clocks.
  pi_hifiberry_amp now matches any dtoverlay=hifiberry-* line, so changing the overlay
  replaces the old one instead of adding a second.
- X: with two DRM devices (v3d, vc4) Xorg gave up with "Cannot run in framebuffer
  mode", and the kiosk looped on a blank screen. 99-vc4.conf points it at vc4, the
  display controller; rendering still goes to V3D (glxinfo: V3D 7.1, accelerated).
- The front-end's icons are emoji in the markup. The Lite image has no emoji font, so
  they rendered as empty boxes: install fonts-noto-color-emoji.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 21:21:47 +02:00
parent 874a81f664
commit 6b9b50ef2e
3 changed files with 37 additions and 2 deletions

View File

@@ -4,7 +4,10 @@ pi_shairport_name: _Oben_Wohnzimmer
alsa_card_name: sndrpihifiberry alsa_card_name: sndrpihifiberry
sensor_room_name_ascii: wohnzimmeroben sensor_room_name_ascii: wohnzimmeroben
sensor_room_name: WohnzimmerOben sensor_room_name: WohnzimmerOben
hifiberry_overlay: hifiberry-dacplus # -std: the Pi drives the I2S clocks. The plain dacplus overlay makes the Pi the clock
# consumer, which the Pi 5's I2S controller rejects (snd_soc_dai_set_fmt -22), so the
# card never probes and every softvol_* device is dead.
hifiberry_overlay: hifiberry-dacplus-std
main_user: root main_user: root
mediapi_has_hifiberry_amp: true mediapi_has_hifiberry_amp: true

View File

@@ -8,7 +8,9 @@
- name: Activate Hifiberry - name: Activate Hifiberry
ansible.builtin.lineinfile: ansible.builtin.lineinfile:
path: /boot/firmware/config.txt path: /boot/firmware/config.txt
regexp: "^#?dtoverlay=hifiberry-amp" # Any hifiberry overlay, not just the one this used to set: otherwise changing
# hifiberry_overlay appends a second dtoverlay line and leaves the old one active.
regexp: "^#?dtoverlay=hifiberry-"
line: "dtoverlay={{ hifiberry_overlay }}" line: "dtoverlay={{ hifiberry_overlay }}"
notify: Reboot after HiFiBerry boot config change notify: Reboot after HiFiBerry boot config change
- name: Lift the Pi 5's USB current cap when the HiFiBerry board powers it - name: Lift the Pi 5's USB current cap when the HiFiBerry board powers it

View File

@@ -10,7 +10,37 @@
# size in the corner of the screen. Openbox answers it, and nothing else. # size in the corner of the screen. Openbox answers it, and nothing else.
- openbox - openbox
- unclutter - unclutter
# The MusicMouse front-end's icons are emoji characters in the markup, not an icon
# font. Lite images ship no emoji font at all, so without this every icon renders
# as an empty box.
- fonts-noto-color-emoji
cache_valid_time: 7200 cache_valid_time: 7200
notify: Reload systemd and restart getty
- name: Ensure the Xorg config directory exists
ansible.builtin.file:
path: /etc/X11/xorg.conf.d
state: directory
mode: "0755"
- name: Point X at the display controller
# The Pi 4 and 5 have two DRM devices: v3d (the 3D GPU, no outputs) and vc4 (the
# HDMI display controller). Left to itself Xorg cannot tell which to drive and dies
# with "Cannot run in framebuffer mode. Please specify busIDs for all framebuffer
# devices", so the kiosk loops on a blank screen. Display goes through vc4; rendering
# still lands on v3d, because glamor's GL context is routed there by Mesa (kmsro).
# Raspberry Pi's desktop image ships this same file; the Lite image does not.
ansible.builtin.copy:
dest: /etc/X11/xorg.conf.d/99-vc4.conf
content: |
Section "OutputClass"
Identifier "vc4"
MatchDriver "vc4"
Driver "modesetting"
Option "PrimaryGPU" "true"
EndSection
mode: "0644"
notify: Reload systemd and restart getty
- name: Browser - name: Browser
# Chromium comes from archive.raspberrypi.com, not Debian: that build carries the # Chromium comes from archive.raspberrypi.com, not Debian: that build carries the