There is a quiet, awkward gap in most rigs. You want a real computer inside the cabin for catching up on email or pulling up a campsite map. You also want something to play music through the cabin speakers in the morning and a movie on rainy afternoons. Most setups solve those with two devices, two power draws, and zero awareness of the rest of the rig. Playbill is one box that does both, runs on small power, and knows it lives inside a TrailCurrent system.
What Playbill is, and what it is not
Playbill is a full Linux desktop. Ubuntu Noble running GNOME on Wayland, branded TrailCurrent throughout. Boot splash, login screen, wallpaper, GTK theme, dock icons. During the day you use it like any other computer. Files, web, terminal, code editor, whatever you need.
Playbill is also one application installed on that desktop. When work is done, you click the Playbill icon in the dock and the app opens fullscreen. The screen transforms from computer to TV. Quit it, minimize it, alt-tab away. It is a normal application, not a kiosk lockdown. The rig is yours and the computer is yours.
That dual identity is the whole point. A locked-down media appliance is dead weight when you need a real machine. A general-purpose laptop has nothing to say about your rig and nothing useful to do at night with the lights off.
Tight space is the other half of the case. Vans and smaller RVs do not have room for a desktop tower next to a media box next to a streaming stick next to a separate cabinet of remotes. One screen, one small board mounted behind it, and the same machine that ran CAD this afternoon plays the movie tonight. Powerful enough for the real work. Quiet enough to not kill the soundtrack.
Day mode: a low-power desktop
The hardware target is the Radxa Dragon Q6A, a Qualcomm QCS6490 SBC with NVMe, gigabit Ethernet, WiFi 6, HDMI, and a 3.5 mm audio jack. It draws a few watts at idle and tops out around fifteen under load. That sits comfortably on the same battery and solar setup the rest of the rig already runs on, with margin to spare for a screen.
The desktop is intentionally not a kiosk. Browse, write, edit photos, work on CAD, push code from the campsite. Standard Ubuntu desktop behavior with TrailCurrent's color palette and wallpapers wired in at the system level so it always feels like part of the rig.
Night mode: the Playbill app
The Playbill app is an Electron shell that runs fullscreen, designed for arrow keys and a remote rather than a mouse. Stage 1 is the empty TV grid, the navigation primitives, and the wiring to launch from the dock. The first build is on the bench now and boots cleanly through to its placeholder rows.
The roadmap from there has three deliberate stages.
- Stage 2: local content first. Music, audiobooks, podcasts, and video stored on Playbill itself. Headwaters runs a smaller NVMe sized for the map tile server and the Docker stack, so the media hub job lives here on the bigger drive. Everything plays without an internet connection because that is the most common case in the woods. The library is yours, on your hardware, in your cabin.
- Stage 3: streaming when you have signal. Add the streaming clients people actually use, so when you do have cellular or campground WiFi you are not switching devices to watch something. Same shell, same remote, same speakers.
- Stage 4: the rig as the remote. The longest reach and the most interesting one. Milepost on the wall and Overlook on your phone get controls for what is playing, where it is playing, and what mood the cabin is in. Switch the audio output from interior speakers to the patio speakers without standing up. Pick the next track from the bunkroom. Pause the movie when the propane alarm fires.
Why this stitches into the rest of the platform
Most "smart RV TVs" are a tablet glued to a wall. They do not know that the propane alarm is going off, that the inverter is at 12% load, or that a tank just crossed a threshold. Playbill does. It joins the same MQTT bus everything else on the rig speaks, gets the same telemetry the dashboards do, and renders that information when it makes sense to.
Picture the practical version. A movie is playing. Borealis sees a CO spike. Playbill dims the picture, raises the cabin lights through Headwaters, and shows the alert across the bottom of the screen. No phones to check. No tab to switch to. The same network that carries your tank levels and your battery state of charge carries the pause command, because there is no separate "entertainment network." It is one rig.
That same fabric is what makes cross-device control work. When Milepost can pick the next song and Overlook can route audio from the cabin speakers to the campfire speakers, it is because they are all reading and writing to the same place. The work to get those pieces talking has already been done for telemetry. Playbill is just another participant.
What we have learned about the Q6A
The Radxa Dragon Q6A is a Qualcomm secure-boot board, which makes it a different animal from a Raspberry Pi or a generic Rockchip SBC. Almost every layer has a quirk, and most of the work in Stage 1 has been documenting them so the next person, including future us, does not relearn the same things from scratch.
A short list of the larger ones:
- The Radxa logo at power-on is permanent. The earliest stage of boot is rendered from Qualcomm-signed firmware in SPI NOR. Replacing it would invalidate the secure-boot chain and the board refuses to boot. Once the kernel hands off to userspace, our Plymouth splash takes over and the rest of boot is TrailCurrent.
- The default bootloader has a phantom-input bug. The debug UART pin floats, EMI from a nearby HAT couples in noise, the bootloader interprets the noise as a keystroke, and the board sits at the boot menu instead of booting. We carry a small embloader patch that short-circuits the menu when the timeout is zero. It is not optional.
- The WiFi chip is not what the firmware tree implies. A freshly flashed image ships every Qualcomm WiFi blob on disk, including the ath11k tree. The actual radio is a Quectel module wrapping AICSemi's AIC8800D80, on USB through a hub. Wrong driver, no WiFi. Right driver, the DKMS package needs to be locked to the kernel package or a stray
apt upgradetakes WiFi out at the next boot. - Audio routes through a Qualcomm Q6 fabric, not directly to ALSA. The WCD9385 codec only exposes a usable card if the q6asm/q6adm/q6afe/q6core/q6routing/audioreach modules are all loaded. Headwaters, our headless gateway, blacklists those to save power. Playbill must not. Copy that blacklist by accident and the desktop boots silent.
- Ubuntu's own first-boot behavior fights the brand. GNOME's initial setup overlays system-level dconf with its own defaults at first login, and Ubuntu's
firefoxpackage is a snap shim that does not work on this image. We lock the brand-identity dconf keys and replace Firefox with Firefox ESR pinned out of the snap path.
None of these are unsolvable. Each one is an hour of work the first time and a one-line note in our build pipeline forever after. Stage 1 is mostly that pipeline: a reproducible image build that boots, looks like TrailCurrent end to end, runs the Playbill app, and does not break itself the first time someone runs an update.
Pinning the OS, not freezing it
The mistake most "stable Linux for SBC" projects make is to either freeze everything and rot, or to inherit upstream and break with every kernel roll. We are pinning the four packages that have to move together as one bundle: kernel, kernel headers, AIC8800 WiFi DKMS, and the AIC8800 firmware. Either all four advance or none of them do. Mesa and the linux-firmware blob travel with that bundle. Everything else, the desktop, the browser, the apps, updates normally.
Practically, that means you can use the rig computer for years, take normal security updates, and not wake up one morning to a board with no graphics and no WiFi. It also means when we do roll the kernel forward, we test the four packages together and ship them together.
The bigger story: a unified experience across the rig
Every TrailCurrent module so far has done one thing well. Bearing knows where you are. Solstice knows what your solar is doing. Reservoir knows your tank levels. Borealis knows the air. Milepost shows you all of it on a wall. Overlook shows you all of it on a phone.
Playbill is the first piece that closes the loop in the other direction. Until now, your rig informed you. With Playbill in place, your rig also entertains you, with the same controls, the same visual language, and the same offline-first instinct. RVs, travel trailers, and campervans all get the same answer: one platform, one remote, one rig.
Where to find it
Playbill is early. The image build pipeline works. The Stage 1 app boots. The library, the streaming clients, and the cross-device control are still ahead of us. The repository is TrailCurrentPlaybill on GitHub, and like every other repo in the platform it is MIT licensed and built in the open. If you have a Radxa Dragon Q6A on your bench, the operator guide is in docs/SETUP.md and the reproducible image is one build.sh away.
The next post on Playbill will be the moment local media plays through the cabin speakers from Playbill's own NVMe, with no internet, no log-in screen, and no phone in hand. That is the day the rig genuinely starts to feel finished.