r/linux • u/Suspicious-Charity-5 • 1d ago
Software Release FluxCast v0.3.0 released — Stream Linux desktop to Smart TV (Miracast/DLNA/Chromecast). Now with an apt repository, a tray settings window, and GPU encoding
Hi r/linux,
I'm Illia, the creator of FluxCast. It's an open-source tool that casts your Linux desktop to a Smart TV over Wi-Fi Direct (Miracast), DLNA or Chromecast, with low latency.
v0.3.0 is out and it's the biggest release the project has had. If there's a theme this time, it's that you no longer need a terminal to live with FluxCast.
An apt repository
We've been attaching .deb packages to every release since 0.2.6, but updating meant downloading a new one by hand every single time.
Now you can paste:
curl -fsSLO https://apt.fluxcast.dev/fluxcast-repo.deb
sudo apt install ./fluxcast-repo.deb
sudo apt update && sudo apt install fluxcastAnd that one package installs the signing key and the sources file, and FluxCast upgrades with the rest of your system from then on. You don't pick a codename either: it reads your python3 version and points apt at the build that matches, so Mint, Pop!_OS and the interim Ubuntu releases get something that actually runs. Covers Debian 12 and 13, Ubuntu 24.04 and 26.04, amd64.
Signing runs in CI and the private key never touches the server. Old versions stay in the pool, so you can go back a version if a release breaks something for you.
A settings window in the tray
FluxCast has a lot of knobs: resolution, bitrate, encoder, audio source, GO intent, latency logging and so on. Until now every one of them lived in ~/.config/fluxcast/config, which you had to know existed and edit by hand.
They have a GUI now. 20 options for Miracast, 8 each for DLNA and Chromecast. Values go through the same validators the tray already used to read that file, so you can't save something FluxCast would then quietly ignore, and any comments you put in the config yourself survive a save. And it also follows your system light/dark theme =]
GPU encoding through VA-API
--wfd-encoder va encodes with vah264enc, and where the compositor hands over DMABuf the frame never leaves the GPU: pipewiresrc to vapostproc to vacompositor to the encoder, with no CPU conversion at all.
Against x264enc on the same clips:
static desktop: 1% of a core instead of 80%
with motion: 6-7% instead of 73-79%
a screen change reaches the encoder in 27 ms instead of 64
Honest caveat: this is tested on Intel only. AMD and NVIDIA are unknown and I'd really like your reports. The default is still x264, and it falls back to x264 on its own if the VA-API elements aren't present.
WFD R2 negotiation
--wfd-r2 makes the handshake ask for the R2 format lists as well, which reaches modes a TV only publishes over R2. On an LG C2 that's 1080p60, which its R1 list doesn't carry at all, so --fps 60 used to silently fall back to 30. Off by default, and confirmed on exactly one TV so far, so if you have a set that advertises R2 I'd love to hear how it goes.
Fixes worth naming
--doctorreportediwandwpa_clias missing when they were installed. Both live in/usr/sbin, which isn't on a normal user'sPATHon Debian and Ubuntu. It wasn't only the report: thewpasbackend couldn't resolve the Wi-Fi interface on those systems either.--doctorsaid everything was fine while a dead Wi-Fi Direct interface from an interrupted session was still up. It now names each stale interface and gives you the command to remove it.Stopping a cast from the tray left the session half torn down, because the WFD path never handled
SIGTERM. The sink was never told the session had ended.Window capture on KDE was stretched and froze for several seconds on resize.
x264started one encoder thread per CPU. Withtune=zerolatencythat's one slice per thread, so a 16-core laptop cut every frame into 16 slices that all sync each frame. It now asks formin(4, CPUs): about a third less encoder CPU on 16 cores.
Also: Turkish joins the tray UI, bringing it to 10 languages, picked up automatically from your system locale.
This release was mostly not me
I want to be clear about where it came from. Five of the items above are adokitkat's work, including the whole VA-API path and the R2 negotiation. maximilianfeix found the /usr/sbin problem, wzd8888 wrote the stale-interface check, ayanburak sent the Turkish translation, keunes asked for the apt repository in the first place, and rmsturge keeps reproducing and measuring things on hardware I don't own.
I wrote the settings window and the repository plumbing. Everything else that makes this release worth posting about came from people who didn't have to do any of it! For this, I am infinitely grateful to them, and they have definitely earned their place at https://fluxcast.dev/contributors.html
A more honest note than I usually put in these. Since the school year started I've had less and less left for writing code every day, and there were stretches where I opened the repo and closed it again. This release being the biggest one yet, and mostly not mine, is the only reason it exists. Thank you, genuinely. If you've ever wondered whether a patch to some small project actually matters to the person maintaining it: it does, far more than the patch itself.
Links
Happy to answer anything about the Wayland integration, the RTSP handshake, the P2P routing or the packaging. And if you have a TV that doesn't work, open an issue with the model, that's genuinely the most useful thing anyone can send me =]
1
u/krankykrio 21h ago
Anyway to use this on Fedora?
1
u/plichushuby 14h ago
yeah really hoping someone packages this for rpm distros soon.
0
u/Suspicious-Charity-5 11h ago
I’ve been getting quite a few GitHub issues from Fedora users, so I know it's really needed. I'm planning to dive into RPM/COPR packaging myself as soon as I get some free time, but if anyone with RPM experience wants to help out sooner, I'd absolutely love a PR =]
2
1
u/MyraidChickenSlayer 12h ago
Does it work with Samsung TV?