If you don't have the BrainPack, you can skip this section.
Screen Animation Service
To enable the screen animation service, install unclutter first to hide the mouse cursor:
sudoaptinstallunclutter
Then, add the script to /usr/local/bin/start-kiosk.sh and make it executable:
#!/bin/bashunclutter-display:0-idle0.1-root&HOST=localhostPORT=4173# Wait for Docker service to listenwhile!nc-z$HOST$PORT;doecho"Waiting for $HOST:$PORT..."sleep0.1done# Launch with autoplay permissionsexecchromium\--kioskhttp://$HOST:$PORT\--start-fullscreen\--disable-infobars\--noerrdialogs\--autoplay-policy=no-user-gesture-required\--disable-features=PreloadMediaEngagementData,MediaEngagementBypassAutoplayPolicies\--no-first-run\--disable-session-crashed-bubble\--disable-translate\--window-position=0,0
Make it executable:
Add the script to /etc/systemd/system/kiosk.service to launch the kiosk mode automatically on boot.
Note: To stop the kiosk service, use sudo systemctl stop kiosk.service.
AEC Service
To enable the Acoustic Echo Cancellation (AEC) service, uninstall PipWire if it's installed and install PulseAudio
Then install PulseAudio:
Next, stop the PipWire daemon and start the PulseAudio daemon if it's not already running:
Next, add the script to prevent PulseAudio from going into auto-exit mode.
Now, you can restart the system to ensure PulseAudio is running properly.
[!Note] After reboot, if the audio devices are not automatically detected, you may need to manually start PulseAudio with the command:
Now, you can add the script to /usr/local/bin/set-audio-defaults.sh and make it executable:
Use the following command to get the list of audio sources and sinks:
Note:
Replace alsa_output.platform-88090b0000.had.hdmi-stereo with your speaker source and alsa_input.usb-R__DE_R__DE_VideoMic_GO_II_FEB0C614-00.mono-fallback with mic source
Make it executable:
Create a systemd user service to run the script on login:
Add the following content:
Once you're done with above steps, you can proceed with OTA setup here
#!/bin/bash
set -e
sleep 5
# First, set the master source volume to 200%
pactl set-source-volume "alsa_input.usb-R__DE_R__DE_VideoMic_GO_II_FEB0C614-00.mono-fallback" 131072
pactl set-source-mute "alsa_input.usb-R__DE_R__DE_VideoMic_GO_II_FEB0C614-00.mono-fallback" 0
# Unload then load AEC module
pactl unload-module module-echo-cancel || true
pactl load-module module-echo-cancel \
use_master_format=1 \
aec_method=webrtc \
source_master="alsa_input.usb-R__DE_R__DE_VideoMic_GO_II_FEB0C614-00.mono-fallback" \
sink_master="alsa_output.platform-88090b0000.had.hdmi-stereo" \
source_name="default_mic_aec" \
sink_name="default_output_aec" \
source_properties="device.description=Microphone_with_AEC" \
sink_properties="device.description=Speaker_with_AEC"
# Wait a moment for the module to fully initialize
sleep 2
# Set defaults
pactl set-default-source default_mic_aec
pactl set-default-sink default_output_aec
# Retry volume setting until device appears and volume is set correctly
for i in {1..15}; do
if pactl list short sources | grep -q default_mic_aec; then
# Set volume to 200% (131072)
pactl set-source-volume default_mic_aec 131072
pactl set-source-mute default_mic_aec 0
# Verify the volume was set
CURRENT_VOL=$(pactl list sources | grep -A 7 "Name: default_mic_aec" | grep "Volume:" | awk '{print $3}')
if [ "$CURRENT_VOL" = "131072" ]; then
echo "Microphone volume successfully set to 200%"
break
else
echo "Volume is $CURRENT_VOL, retrying... ($i/15)"
fi
else
echo "Waiting for AEC source to appear... ($i/15)"
fi
sleep 1
done
# Final verification
pactl list sources | grep -A 7 "Name: default_mic_aec" | grep -E "Name:|Volume:"