Raspberry Pi 5 als automatisch startendes Grand-Piano

Ziel
Nach dem Einschalten soll der Raspberry Pi 5 automatisch starten und sofort als Piano spielbereit sein:
MIDI-Eingang: Novation per USB
Audio-Ausgang: Focusrite Scarlett Solo
Piano-Sound: Salamander Grand Piano
Software: FluidSynth
Autostart: systemd-Dienst
ohne manuelles Starten nach dem Boot
Voraussetzungen
Hardware
Raspberry Pi 5
Raspberry Pi OS
Focusrite Scarlett Solo per USB
Novation Keyboard per USB
Lautsprecher oder Kopfhörer an der Scarlett
stabiles Netzteil für den Pi
Wichtiger Hinweis
Das Keyboard wurde im System als:
Novation SL MkIII
erkannt.
Auch wenn ein anderes Modell verwendet oder erwartet wurde, zählt für die Konfiguration der Name, den Linux wirklich anzeigt.
Pakete installieren
sudo apt update
sudo apt install -y fluidsynth alsa-utils wget xz-utils
SoundFont herunterladen und entpacken
mkdir -p /home/rubin/soundfonts
cd /home/rubin/soundfonts
wget -O SalamanderGrandPiano-SF2.tar.xz 'https://freepats.zenvoid.org/Piano/SalamanderGrandPiano/SalamanderGrandPiano-SF2-V3%2B20200602.tar.xz'
tar -xf SalamanderGrandPiano-SF2.tar.xz
find /home/rubin/soundfonts -type f -iname "*.sf2"
Die funktionierende Datei ist:
/home/rubin/soundfonts/SalamanderGrandPiano-SF2-V3+20200602/SalamanderGrandPiano-V3+20200602.sf2
PipeWire und WirePlumber deaktivieren
Das macht das System für den Piano-Zweck stabiler und verhindert, dass Desktop-Audio später dazwischenfunkt.
systemctl --user stop pipewire pipewire-pulse wireplumber 2>/dev/null || true
systemctl --user disable pipewire pipewire-pulse wireplumber 2>/dev/null || true
systemctl --user mask pipewire pipewire-pulse wireplumber 2>/dev/null || true
Startscript anlegen
Das Script komplett ersetzen:
sudo tee /usr/local/bin/grand-piano-start.sh >/dev/null <<'EOF'
#!/bin/bash
set -euo pipefail
SF2="/home/rubin/soundfonts/SalamanderGrandPiano-SF2-V3+20200602/SalamanderGrandPiano-V3+20200602.sf2"
AUDIO_DEV="plughw:2,0"
MIDI_NAME="Novation SL MkIII"
if [ ! -f "$SF2" ]; then
echo "SoundFont nicht gefunden: $SF2"
exit 1
fi
for i in (seq 1 30); do if aplay -l | grep -q "Scarlett Solo USB" && aconnect -i | grep -q "MIDI_NAME"; then
break
fi
sleep 1
done
if ! aplay -l | grep -q "Scarlett Solo USB"; then
echo "Scarlett Solo nicht gefunden."
aplay -l
exit 1
fi
if ! aconnect -i | grep -q "$MIDI_NAME"; then
echo "Novation nicht gefunden."
aconnect -i
exit 1
fi
exec /usr/bin/fluidsynth \
-is \
-a alsa \
-m alsa_seq \
-p GrandPiano \
-o audio.alsa.device="SF2"
EOF
Danach ausführbar machen:
sudo chmod +x /usr/local/bin/grand-piano-start.sh
systemd-Dienst anlegen
Den Service komplett ersetzen:
sudo tee /etc/systemd/system/grand-piano.service >/dev/null <<'EOF'
[Unit]
Description=Grand Piano Autostart
After=multi-user.target sound.target
Wants=sound.target
[Service]
Type=simple
User=rubin
WorkingDirectory=/home/rubin
Environment=HOME=/home/rubin
SupplementaryGroups=audio
ExecStartPre=-/usr/bin/pkill -x fluidsynth
ExecStartPre=/bin/sleep 8
ExecStart=/usr/local/bin/grand-piano-start.sh
ExecStop=-/usr/bin/pkill -x fluidsynth
Restart=always
RestartSec=3
TimeoutStartSec=20
[Install]
WantedBy=multi-user.target
EOF
Dienst aktivieren
sudo systemctl daemon-reload
sudo systemctl enable grand-piano.service
sudo systemctl restart grand-piano.service
sleep 5
systemctl status grand-piano.service --no-pager
Wenn alles korrekt läuft, sollte dort stehen:
Active: active (running)
Einmal neu starten
sudo reboot
Nach dem Neustart:
Novation einschalten
Scarlett angeschlossen lassen
ein paar Sekunden warten
spielen




Prüfen, ob alles erkannt wurde
Audio prüfen
aplay -l
Es sollte etwas in der Art zu sehen sein:
card 2: USB [Scarlett Solo USB], device 0: USB Audio [USB Audio]
MIDI prüfen
aconnect -i
Es sollte etwas in der Art zu sehen sein:
client XX: 'Novation SL MkIII'
Dienst prüfen
systemctl status grand-piano.service --no-pager
Wichtigste Diagnosebefehle
Wenn später nach dem Boot kein Ton kommt, sollten nur diese Befehle verwendet werden:
systemctl status grand-piano.service --no-pager
journalctl -u grand-piano.service -b --no-pager
ps -C fluidsynth -o pid,cmd
aconnect -l
sudo fuser -v /dev/snd/*
Hinweise
Wenn der Benutzername nicht rubin ist
Dann muss in der Anleitung überall /home/rubin auf den echten Benutzernamen geändert werden.
Wenn Linux das Keyboard anders erkennt
Prüfen mit:
aconnect -i
Dann im Script diese Zeile ändern:
MIDI_NAME="Novation SL MkIII"
auf den Namen, den Linux wirklich anzeigt.
Wenn doppelte Noten zu hören sind
Dann verbindet midi.autoconnect=1 mehrere Novation-Ports gleichzeitig. Das kann man später gezielt auf nur einen Port begrenzen. Solange es normal klingt, sollte man es einfach in Ruhe lassen. Funktionierende Systeme sollte man nicht aus Langeweile wieder in Einzelteile zerlegen.
Backup der fertigen Konfiguration
Wenn die Konfiguration später schnell wiederhergestellt werden soll, sollten diese zwei Dateien gesichert werden:
/usr/local/bin/grand-piano-start.sh
/etc/systemd/system/grand-piano.service
Zum Beispiel so:
mkdir -p /home/rubin/piano-backup
cp /usr/local/bin/grand-piano-start.sh /home/rubin/piano-backup/
cp /etc/systemd/system/grand-piano.service /home/rubin/piano-backup/
Kurzfassung
Neuinstallation in der richtigen Reihenfolge
Pakete installieren
SoundFont herunterladen und entpacken
PipeWire/WirePlumber deaktivieren
grand-piano-start.sh anlegen
grand-piano.service anlegen
Dienst aktivieren
reboot
spielen