毎回毎回やるのでさすがにスクリプトにした。
前提条件
- Raspberry Pi 3/4/5
- HiFiBerry DACまたはPCM5102Aボードを直結
- 3.3V -> VIN、GND -> GNDとSCK、GPIO18 -> BCK、GPIO21 -> DOUT、GPIO19 -> LCK
- MIDI I/OはGPIO14 (TXD) と GPIO15 (RXD) を使用
- アプリは起動時に全画面で起動(Kioskモード)
使い方
SDカード焼いてRaspberry Piに挿して起動したら、このスクリプトを実機に置いて実行属性つけて実行。いくつかアプリ名とかデバイス名などの変更は必要。
setup.sh
#!/bin/bash
# Raspberry Pi Audio Setup Script
# 対応機種: Raspberry Pi 3/4/5
# 前提条件: Raspberry Pi Imagerで焼かれたSDカードから起動済み
set -e
echo "=== Raspberry Pi Audio Setup Script ==="
echo "対応機種: Raspberry Pi 3/4/5"
echo "現在のユーザー: $USER"
echo ""
# 基本システムアップデート
echo "1. システムアップデート中..."
sudo apt update
sudo apt upgrade -y
# SWAP無効化
echo "2. SWAP無効化中..."
sudo swapoff -a
sudo dphys-swapfile swapoff
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
# SWAP設定ファイルの更新
echo "3. SWAP設定ファイル更新中..."
sudo sed -i 's/^CONF_SWAPSIZE=.*/CONF_SWAPSIZE=0/' /etc/dphys-swapfile
# CPU設定とconfig.txt更新
echo "4. CPU設定とconfig.txt更新中..."
# /boot/firmware/config.txtを指定内容で完全に置き換え
sudo tee /boot/firmware/config.txt > /dev/null << 'EOF'
# For more options and information see
# http://rptl.io/configtxt
# Some settings may impact device functionality. See link above for details
# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
dtparam=i2s=on
dtparam=spi=on
# Disable audio (loads snd_bcm2835)
dtparam=audio=off
# Additional overlays and parameters are documented
# /boot/firmware/overlays/README
# Automatically load overlays for detected cameras
#camera_auto_detect=1
# Automatically load overlays for detected DSI displays
display_auto_detect=1
# Automatically load initramfs files, if found
auto_initramfs=1
# Enable DRM VC4 V3D driver with audio disabled
dtoverlay=vc4-kms-v3d,noaudio
max_framebuffers=2
# Don't have the firmware create an initial video= setting in cmdline.txt.
# Use the kernel's default instead.
disable_fw_kms_setup=1
# Run in 64-bit mode
arm_64bit=1
# Disable compensation for displays with overscan
disable_overscan=1
# Run as fast as firmware / board allows
arm_boost=1
# CPU設定
governor=performance
arm_freq_min=1000
[cm4]
# Enable host mode on the 2711 built-in XHCI USB controller.
# This line should be removed if the legacy DWC2 controller is required
# (e.g. for USB device mode) or if USB support is not required.
otg_mode=1
[cm5]
dtoverlay=dwc2,dr_mode=host
[all]
dtoverlay=hifiberry-dac
dtoverlay=dwc2
dtoverlay=midi-uart0
EOF
# cmdline.txt更新(USB MIDI Gadget用)
echo "5. cmdline.txt更新中..."
sudo sed -i 's/$/ modules-load=dwc2,g_midi/' /boot/firmware/cmdline.txt
# USB MIDI Gadget設定
echo "6. USB MIDI Gadget設定中..."
sudo mkdir -p /etc/modprobe.d
sudo tee /etc/modprobe.d/g_midi.conf > /dev/null << 'EOF'
options g_midi iManufacturer="Your Manufacturer Name" iProduct="Your Product Name" iSerialNumber="123456789"
EOF
# ALSA設定
echo "7. ALSA設定中..."
cat > ~/.asoundrc << 'EOF'
pcm.!default {
type hw
card 0
device 0
}
ctl.!default {
type hw
card 0
}
EOF
# limits.conf設定
echo "8. リアルタイム優先度設定中..."
cat << EOF | sudo tee -a /etc/security/limits.conf
$USER - rtprio 99
$USER - memlock unlimited
@audio - rtprio 99
@audio - memlock unlimited
EOF
# audioグループに現在のユーザーを追加
sudo usermod -a -G audio $USER
# labwcを既定のセッションに設定(raspi-configと同等の処理)
echo "9. labwc を既定セッションに設定中..."
# raspi-config の do_boot_behaviour に相当するコマンドライン処理
sudo raspi-config nonint do_boot_behaviour B4 # Desktop Autologin
sudo raspi-config nonint do_wayland W1 # labwc
# デスクトップ自動ログイン設定
echo "10. デスクトップ自動ログインを設定中..."
sudo raspi-config nonint do_boot_behaviour B4 # Desktop Autologin
# オーディオ関連の追加パッケージインストール
echo "11. オーディオ関連パッケージインストール中..."
sudo apt install -y alsa-utils pulseaudio-utils jackd2
# unclutter-xfixesインストール(カーソル非表示用)
echo "12. unclutter-xfixes インストール中..."
sudo apt-get install -y unclutter-xfixes
# labwc設定ファイル作成
echo "13. labwc設定ファイル作成中..."
mkdir -p ~/.config/labwc
cat > ~/.config/labwc/rc.xml << 'EOF'
<?xml version="1.0"?>
<labwc_config>
<windowRules>
<!-- identifier は Wayland ネイティブなら app_id、 XWayland なら WM_CLASS のトリミング後の文字列 -->
<!-- (自分のアプリ名に合わせて書き換える) -->
<windowRule identifier="YOURAPPNAME" event="onMap">
<!-- フルスクリーン化 -->
<action name="ToggleFullscreen"/>
<!-- タイトルバーなど装飾を完全にオフ -->
<action name="ToggleDecorations" decorations="none"/>
</windowRule>
</windowRules>
</labwc_config>
EOF
# labwc autostart設定
echo "14. labwc autostart設定中..."
cat > ~/.config/labwc/autostart << 'EOF'
#!/bin/sh
# Labwc 起動後に実行するアプリ
# 必要に応じて数秒ほど待ってから起動すると安定する。早すぎるとフルスクリーンにならない様子。
sleep 5
unclutter-xfixes --hide-on-touch &
~/YOURAPPNAME &
EOF
chmod +x ~/.config/labwc/autostart
# 設定完了メッセージ
echo ""
echo "=== セットアップ完了 ==="
echo "以下の設定が適用されました:"
echo "✓ システムアップデート完了"
echo "✓ SWAP無効化"
echo "✓ CPU設定とconfig.txt更新 (HiFiBerry DAC + USB MIDI Gadget対応)"
echo "✓ cmdline.txt更新 (USB MIDI Gadget用)"
echo "✓ USB MIDI Gadget設定"
echo "✓ ALSA設定 (~/.asoundrc)"
echo "✓ リアルタイム優先度設定"
echo "✓ labwc を既定セッションに設定"
echo "✓ オーディオ関連パッケージインストール"
echo "✓ unclutter-xfixes インストール (カーソル非表示)"
echo "✓ labwc設定ファイル作成 (~/.config/labwc/rc.xml)"
echo "✓ labwc autostart設定 (~/.config/labwc/autostart)"
echo ""
echo "注意事項:"
echo "- 再起動後に設定が完全に有効になります"
echo "- audioグループへの追加は再ログイン後に有効になります"
echo "- labwcはWaylandベースのコンポジターです"
echo ""
echo "再起動しますか? (推奨)"
read -p "再起動する場合は 'y' を入力してください: " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "再起動中..."
sudo reboot
else
echo "設定を有効にするため、後で再起動してください。"
fi