MIDI 기기나 FluidSynth 포트 번호는 매번 연결 때마다 달라진다. 따라서 번호 대신 이름으로 찾아서 자동 연결을 시도하는 것이 바람직하다.
fluidsynth ... &
# fluidsynth 뜰 때까지 대기
until aconnect -l | grep -q "FLUID"; do sleep 0.5; done
# 키보드 연결
aconnect \
$(aconnect -l | grep -A1 "USB" | tail -n1 | awk '{print $1}') \
$(aconnect -l | grep -A1 "FLUID" | tail -n1 | awk '{print $1}')
다음을 start_fluid.sh라는 이름으로 저장해 두고 실행한다.
#!/bin/bash
SF2=~/sf2/GeneralUser-GS.sf2
AUDIO_DEV=plughw:2,0
echo "[INFO] Starting FluidSynth..."
fluidsynth -a alsa -m alsa_seq -i -s \
-o audio.alsa.device=$AUDIO_DEV \
"$SF2" > /dev/null 2>&1 &
# fluidsynth 포트 생성 대기
echo "[INFO] Waiting for FluidSynth..."
until aconnect -l | grep -q "FLUID"; do sleep 0.5; done
echo "[INFO] FluidSynth ready"
# 키보드 연결 함수
connect_midi() {
SRC=$(aconnect -l | grep -A1 "USB" | tail -n1 | awk '{print $1}')
DST=$(aconnect -l | grep -A1 "FLUID" | tail -n1 | awk '{print $1}')
if [ -n "$SRC" ] && [ -n "$DST" ]; then
aconnect $SRC $DST 2>/dev/null
echo "[INFO] Connected $SRC → $DST"
fi
}
# 최초 연결
connect_midi
# 🎯 지속 감시 (핫플러그 대응)
echo "[INFO] Monitoring MIDI devices..."
while true; do
sleep 2
connect_midi
done
/etc/systemd/system/fluid.service
[Unit] Description=FluidSynth Auto MIDI After=sound.target [Service] ExecStart=/home/pi/start_fluid.sh Restart=always User=pi [Install] WantedBy=multi-user.target
활성화
sudo systemctl daemon-reexec sudo systemctl enable fluid sudo systemctl start fluid