GitHub GitHub Hover Bluesky Bluesky Hover Medium Medium Hover CodePen CodePen Hover YouTube YouTube Hover

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

BIG 2862
BIG 2862
Er ist keine Firewall, kein Switch, kein “Router fürs Wohnzimmer”. Er ist eher ein Grenzstein. Hier endet das Provider-Netz, hier beginnt...
Alles, was du über Local Area Networks (LAN) wissen musst
Alles, was du über Local Area Networks (LAN) wissen musst
Überall um uns herum finden wir heutzutage Netzwerke, die unser Leben prägen. Ob zu Hause, im Büro oder in Schulen – sie bilden das Rückg...