This is version 2 of my multi-screen Raspberry Pi infotainment project. The first version (DIY In-Car Infotainment) required a separate pocket router for DHCP, DNS, and DLNA. This version eliminates that dependency — one prebuilt SD card image works for all terminals, and the system configures itself automatically at boot.
Last updated: February 7, 2026
What's New in v2
- No external router needed — The GL-MT300N-V2 pocket router is eliminated. One Pi automatically becomes the network master.
- Automatic master election — Whichever Pi has USB media attached becomes the master. No manual configuration.
- Self-hosted services — Master provides DHCP, DNS, NTP, and DLNA — all built into the same image.
- Simpler deployment — One image, flash to all SD cards, connect, power on.
- Time synchronization — All terminals sync their clocks from the master via NTP.
System Overview
System diagram: One master Pi (with USB media) provides DHCP, DNS, NTP, and DLNA to all client terminals via a PoE switch.
A typical deployment uses:
- 1 master Pi4 terminal (with USB media attached)
- 3 client Pi4 terminals
- 1 PoE switch (5-port or larger)
The topology is a pure star connection: every terminal connects directly to the PoE switch via a single Ethernet cable that provides both power and network. No AV matrix or special head-end hardware required.
How It Works
- PoE switch powers on
- All Pi4 terminals boot from identical SD cards
- Each terminal checks for USB storage
- The terminal with USB media becomes the master automatically
- Master starts DHCP (192.168.8.100-200), DNS, NTP, and DLNA services
- Client terminals get their IP address, time sync, and media access from master
- All terminals launch Kodi and connect to the DLNA source
- Users choose Personal Mode or Sync Mode
Two Operating Modes
Personal Mode
Each user gets their own screen and audio path:
- Analog headset via 3.5mm jack, or
- Bluetooth headset
This feels similar to in-flight seatback entertainment. Each passenger independently browses the DLNA media library in Kodi and plays whatever they want.
Sync Mode
When shared viewing is needed, the master terminal can synchronize all clients:
- A mini 3-key USB keyboard connects to the master
- Press KEY_1: master checks current playback state
- Master sends JSON-RPC commands to all clients
- Clients open the same stream and align to master's timestamp
- All screens play the same content in sync
Master audio can feed a central sound system (vehicle speakers, room PA, etc.) for group viewing.
Hardware List
For a 4-terminal setup:
| Component | Qty | Notes |
| Raspberry Pi 4 (4GB) | 4 | 2GB works but 4GB recommended |
| PoE HAT | 4 | Official or compatible 802.3af HAT |
| MicroSD card (32GB+) | 4 | Class 10 or faster |
| Full HD touch display | 4 | 7" to 10" HDMI displays work well |
| PoE switch | 1 | 5-port minimum, 802.3af/at |
| Ethernet cables | 4 | Up to 50m runs supported |
| USB storage | 1 | NTFS, FAT32, or ext4 formatted |
| 3-key USB keyboard | 1 | For sync mode control |
Compared to v1, you no longer need the GL-MT300N-V2 pocket router — the master Pi handles all network services.
Real-World Use Cases
In-Car / Fleet Passenger Infotainment
Ideal for vehicles with multiple passengers:
- Each passenger watches independent content with personal audio
- One key press switches everyone to synchronized shared playback
- Master audio routes to vehicle speakers for group viewing
Gives both freedom (personal playback) and coordination (sync playback) in one system.
Multi-Room Shared Viewing
For venues where people are spread across rooms:
- House of worship overflow rooms
- Community halls
- Training centers
- Small campuses
A single PoE star network keeps wiring simple and operations predictable.
Quick Start
Option 1: Pre-built Image (Recommended)
- Download the pre-built SD card image (~1.2GB)
- Flash the image to all SD cards using Raspberry Pi Imager or balenaEtcher
- Insert SD cards into Pi4 terminals
- Connect all terminals to PoE switch
- Insert USB media (NTFS, FAT32, or ext4) into one terminal
- Power on the PoE switch
- Wait for all terminals to boot into Kodi
Option 2: Manual Installation
On an existing Raspberry Pi OS Lite installation:
git clone https://github.com/hackboxguy/media-mux.git cd media-mux sudo ./setup-selfhosted.sh
Troubleshooting
DLNA source shows "Couldn't connect to network server"
- Check if master terminal has USB media attached
- Verify minidlna is running:
pgrep -f minidlnad - Check master log:
cat /var/log/media-mux-selfhosted.log - Ensure USB is mounted:
mount | grep /media/usb
Client terminal not getting IP address
- Verify master booted first and has USB attached
- Check dnsmasq is running on master:
systemctl status dnsmasq - Try rebooting the client terminal
Time is wrong on client terminals
- Wait a few minutes after boot for NTP sync
- Check chrony status:
chronyc sources - Verify master chrony is running:
pgrep -f chronyd
Sync playback not working
- Ensure 3-key keyboard is connected to master terminal
- Check kodisync log on master:
cat /var/log/kodisync.log - Verify all clients are on the same network (192.168.8.x)
USB media not detected
- Supported formats: NTFS, FAT32, ext4
- Check dmesg for USB detection:
dmesg | grep -i usb - Try a different USB port or cable
Current Limitations
The system works reliably for practical deployments, but there are areas for future improvement:
- No automatic master failover if master is disconnected
- No web dashboard for status monitoring
- Role is determined by USB presence (no manual pinning)
SOURCE CODE
github.com/hackboxguy/media-mux — pre-built images and release notes in Releases section