OpenRiot v8.0.12: Phantom of the Cable
“The theatre had a cable and no signal. The bar had an icon for the cable. The recorder had a microphone and no monitor. Three performers, one empty stage, and a programme that promised all of them were working. We sent the cable home, taught the recorder to work without the microphone, and stopped printing tickets for the phantom.” – The OpenRiot Crew, v8.0.12
Release Overview
Two small lies leave the building.
The Ethernet icon no longer appears when the interface has no
carrier. The phantom em0 on a ThinkPad with no physical port
stops taking up space in the bar.
Screen recording works again. It writes the real ffmpeg PID, falls back to video-only when the sndio monitor refuses to open, logs the failure instead of swallowing it, and stops on the second key press. The bar icon is gone; Super+Shift+N is the door.
Total changes: one invisible cable, one recording that starts and stops, and one icon removed from the marquee.
The Invisible Cable
GetEth() used to return a disconnected cable glyph whenever
an Ethernet interface existed, carrier or not. On a laptop
whose em0 is soldered to the board with no connector, that
meant a permanent icon for a cable that could never be
plugged in.
It now returns nothing unless status: active is present, and
[module/network-eth] has label-empty =. The icon appears
when the cable is real and disappears when it is a rumour.
This is the phantom limb problem from v5.4, wearing a new coat. The interface exists. The hardware does not. The bar should believe the carrier, not the inventory.
Video Killed the Radio Star
Screen recording failed in the least useful way possible. It
launched ffmpeg through a shell, waited 200 milliseconds,
asked pgrep whether ffmpeg existed, and wrote a PID file only
if the answer was yes. When the answer was no, isRecording()
returned false forever. Every click said “Recording is
starting” because every click was the first click.
The recorder now starts ffmpeg directly, writes
cmd.Process.Pid immediately, and checks whether the process
is still alive after 700 milliseconds. If the audio path dies,
it restores the sndio flags, drops the microphone, and starts a
video-only recording. That fallback is the difference between
a recorder and a notification generator.
ffmpeg now logs to ~/.cache/openriot/screenrec.log. The next
time it fails, the reason is on disk instead of inside a
discarded pipe.
The second press works because the PID file now contains a PID that exists. SIGINT finalizes the MP4. The test recording came out at 601 KB, which is not a lot of cinema but is a complete file with a beginning and an end.
The Empty Microphone
The sndio monitor path is not guaranteed. enableAudioMonitor
can succeed and ffmpeg can still fail to open snd/0.mon.
That is what happened here.
The recorder treats audio as an optional track. If ffmpeg exits during the startup check, it tries again without audio and tells you “No audio monitor available, screen only.” The video keeps rolling. The notification is honest. The file is playable.
A recording with no audio is still a recording. A recording with no file is a press release.
One Door for the Recorder
The screen recording icon is gone from the right bar.
Super+Shift+N still toggles recording. The polybar module definition remains in the template, unused, for the day the icon earns its place back. Until then the bar does not advertise a button that spent months saying “starting” and never starting.
The Pinball Wizard had flippers. The bar has a keybinding. That is enough.
🧾 Files Changed
| File | Change |
|---|---|
source/screenrec/screenrec.go |
Real PID capture, liveness |
| check, audio fallback, ffmpeg log | |
source/network/network.go |
Ethernet icon only on carrier |
config/polybar/config.ini.tmpl |
label-empty for Ethernet, |
| screenrec icon removed | |
install/openriot |
Rebuilt with the changes |
🗣️ Final Words
“The phantom cable took its bow and left. The recorder found its own PID, lost its microphone, kept the picture, and stopped when asked. The bar is quieter. The files are real. Curtain.” – The OpenRiot Crew, v8.0.12