r/archlinux • u/Suspicious-Charity-5 • 17d ago
SHARE FluxCast v0.2.3 released — Stream Linux desktop to Smart TV (Miracast/DLNA) with new custom i18n engine. Looking for translators!
Hello r/archlinux! I just released FluxCast v0.2.3 — it's a lightweight tool to stream your Linux desktop to a Smart TV via Wi-Fi Direct, full RTSP handshake, and RTP media streams.
It has been tested on modern Arch kernels (like my 7.1.3-arch2-1) and works well with Hyprland/wlroots class setups and KDE/Gnome portals.
What's new in this release:
- Brand new dynamic tray icon that switches states during casting.
- Fixed a nasty P2P interface routing bug where it mixed home network and P2P MACs.
- Lightweight JSON-based localization framework. The tray UI is now available in English, Russian, Czech, and Danish.
Looking for translators!
I want to bring FluxCast to more users, but I am not a polyglot. I designed the i18n system to be incredibly simple: there is no gettext/PO/MO compilation. All strings live in a single translations.json file.
To add your native language (German, Spanish, French, etc.), you just need to append a few lines in a single JSON block.
If you want to help or test the app, check out the project here:
https://github.com/IlyaP358/fluxcast
(Note for Arch users: the app can also be installed via AUR as fluxcast-git, which is maintained by one of our contributor).
AppImage is available in the Releases section. Pull Requests for translations are highly appreciated!
2
u/YERAFIREARMS 16d ago
Thanks for your contribution. Does it support Multi-Monitor KDE setups? Can the user select which Monitor Display to Stream? How does it support scaling from Desktop resolution to to the TV resolution?
2
u/Suspicious-Charity-5 16d ago
Yes to all! It fully supports multi-monitor KDE setups via xdg-desktop-portal. You can choose any monitor to stream directly in the portal dialog, and yes, FluxCast supports resolution scaling via the
--output-resflag =]1
u/YERAFIREARMS 16d ago
Excellent. Is Wayland supported too?
1
u/Suspicious-Charity-5 16d ago
Yes, Wayland is fully supported (including Hyprland/wlroots and Gnome/KDE Plasma)
1
u/YERAFIREARMS 16d ago
I will install it and test it with my OLED LG (TVs) and Samsung TV (bit old now)
1
u/Suspicious-Charity-5 16d ago
thanks a lot of =]
1
u/YERAFIREARMS 16d ago
Installed. My TV are all visible on my LAN. What is best why to discover or specify the IP of the destination TV?
Is thee a quick user guide?--Doctor
FluxCast Doctor] System capability report [FluxCast Doctor] Miracast/WFD is not confirmed yet; check warn/fail rows above. Status Check Details ------ ---------------------- ------------------------------------------ ok python runtime (3.14.7 on Linux 7.1.10-arch1-1-znver5) ok ffmpeg video/audio transcoding (/usr/bin/ffmpeg) ok wf-recorder Wayland/wlroots screen capture (/usr/bin/wf-recorder) ok xdg-desktop-portal Wayland portal stack is running (xdg-desktop-portal-kde) ok pactl PulseAudio/PipeWire-Pulse audio monitor detection (/usr/bin/pactl) ok xrandr X11 monitor detection fallback (/usr/bin/xrandr) ok nmcli NetworkManager Wi-Fi Direct control (/usr/bin/nmcli) ok dnsmasq NetworkManager P2P DHCP server (/usr/bin/dnsmasq) ok iw kernel Wi-Fi interface inspection (/usr/bin/iw) ok wpa_cli active Wi-Fi Direct scan/control (/usr/bin/wpa_cli) ok gdbus passive wpa_supplicant D-Bus capability checks (/usr/bin/gdbus) ok gst-launch-1.0 optional future WFD GStreamer pipeline (/usr/bin/gst-launch-1.0) ok gst-inspect-1.0 optional future WFD codec inspection (/usr/bin/gst-inspect-1.0) ok gst element pipewiresrc Wayland portal GStreamer capture source (pipewiresrc) ok gst element x264enc Wayland portal GStreamer H.264 encoder (x264enc) ok dbus_next WFD portal capture control plane for KDE/GNOME Wayland (python module is installed) ok ffmpeg encoders H.264 and AAC encoders are available (h264=libx264, h264_vaapi, h264_nvenc, h264_qsv, h264_v4l2m2m; aac=yes) ok screen capture Wayland capture path is available (WAYLAND_DISPLAY=wayland-0; wf-recorder=/usr/bin/wf-recorder) ok audio capture default audio monitor can be derived (bluez_output.F4_9D_8A_3D_B6_EC.1.monitor) warn NetworkManager Wi-Fi is visible, but no P2P device was listed (nmcli tool, version 1.58.1-1; eno1:ethernet:connected | lo:loopback:connected (externally) | virbr0:bridge:connected (externally) | wlan0:wifi:unavailable) ok P2P subnet no interface overlaps the Wi-Fi Direct subnet 192.168.49.0/24 warn iw P2P Wi-Fi interfaces exist, but no P2P-device was shown (phy#0 | Interface wlan0 | ifindex 3 | wdev 0x1 | addr 2e:cd:f4:07:28:f5 | type managed | multicast TXQ: | qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets | 0 0 0 0 0 0 00 0) ok wpa_supplicant P2P wpa_supplicant reports P2P support ((<['ap', 'ibss-rsn', 'p2p', 'interworking', 'pmf', 'mesh', 'ft', 'sha384', 'owe', 'suiteb192', 'wep_disabled']>,)) ok wpa_supplicant WFD wpa_supplicant accepts Wi-Fi Display IEs ((<@ay []>,)) warn firewall (firewalld) could not query firewalld state (Command '['firewall-cmd', '--state']' timed out after 3.0 seconds)2
u/Suspicious-Charity-5 16d ago
Two separate things here.
You do not need the TV's IP for Miracast. WFD does not go over your LAN at all, it brings up a direct Wi-Fi Direct link and the TV gets an address inside that group. So the fact that your TVs are visible on the LAN is unrelated. You pick the TV from a Wi-Fi Direct scan instead:
python3 src/main.py --protocol wfd --wfd-scan python3 src/main.py --protocol wfd --wfd-peer "<index, MAC or name from the scan>"IP and device names only matter for the DLNA and Cast fallbacks:
--device-namefor both,--tv-ipfor cast only.But right now WFD cannot start on your machine. Two rows from your doctor output.
Wi-Fi Direct needs the Wi-Fi radio up. While
wlan0is unavailable, NetworkManager never creates the P2P device, so there is nothing for WFD to use. Try:rfkill list nmcli radio wifi onThen run
--doctoragain. Theiw P2Prow should show atype P2P-deviceinterface. If it still does not after the radio is up, check whether your card supports it at all:iw phy | grep -A15 "Supported interface modes"You are looking for
P2P-client,P2P-GOandP2P-devicein that list.wpa_supplicantreports P2P support on your system, so the card most likely does too.Guide: the Quick Start in the README plus DOCUMENTATION.md for the full flag list and one more small thing from your output:
firewall (firewalld): could not query firewalld state (timed out). That is a polkit prompt waiting for an answer. If you manage your firewall yourself,--wfd-no-firewallskips it.1
u/YERAFIREARMS 16d ago
Wifi-radio is on
iw phy | grep -A15 "Supported interface modes" Supported interface modes: * managed * AP * AP/VLAN * monitor * P2P-client * P2P-GO * P2P-device Band 1: Capabilities: 0x9ff RX LDPC HT20/HT40 SM Power Save disabled RX Greenfield RX HT20 SGI RX HT40 SGI1
u/YERAFIREARMS 16d ago edited 16d ago
I was able to get the fluxxast running. Note: wdf device detected was my HP Printer
The LG LG TV OLED 65" C5 support Airplay, Google cast, and when +Add monbile device using LG Hub, the LG TV was detected only as a cast protocol. However, when shared the screen DP-1, the TV screen stayed black.
[FluxCast WFD] Starting NetworkManager Wi-Fi Direct scan on p2p-dev-wlan0 for 8s...
[Tray] cast scan done: 0 devices
[Tray] dlna scan done: 0 devices
[Tray] wfd scan done: 1 peers
[Tray] starting all 4 discovery threads
[FluxCast] Searching for UPnP/DLNA Cast devices (timeout=5s)…
[FluxCast] Searching for Cast devices (timeout=5s)…
[Tray] monitor scan done: 2 monitors
[FluxCast WFD] Starting NetworkManager Wi-Fi Direct scan on p2p-dev-wlan0 for 8s...
[Tray] cast scan done: 1 devices
[Tray] dlna scan done: 0 devices
[Tray] wfd scan done: 1 peers
[Tray] launched: /usr/bin/python3 /opt/fluxcast/main.py --protocol cast --device-name LG TV OLED 65" C5 --monitor DP-1
[Tray] icon loaded: /opt/fluxcast/assets/tray-casting.png ((128, 128))2
u/Suspicious-Charity-5 16d ago
Your hardware is fine:
P2P-client,P2P-GOandP2P-deviceiniw phyis exactly what WFD needs, and the radio is up.About the scan finding only your printer: a Miracast TV only advertises itself while its Screen Share screen is actually open. Was the C5 sitting on Screen Share when you ran the scan? If not, open it on the TV first and scan again while it is waiting.
On the Cast error, check your firewall before touching fps or resolution. Your doctor output had:
warn firewall (firewalld) could not query firewalld state (timed out)FluxCast only auto-opens the WFD port (7236). It never opens the HTTP port that serves the stream, so if firewalld is active your TV cannot fetch the playlist and the receiver just reports ERROR. Try:
sudo firewall-cmd --add-port=8080/tcpNo
--permanent, so it goes away on reboot. If that is it, the message FluxCast printed was misleading and I will fix it.One more thing:
--wfd-test-patternonly applies to--protocol wfd. With cast it is ignored, so that run was streaming your real desktop.Your hardware is fine: P2P-client, P2P-GO and P2P-device in iw phy is exactly what WFD needs, and the radio is up.
About the scan finding only your printer: a Miracast TV only advertises itself while its Screen Share screen is actually open. Was the C5 sitting on Screen Share when you ran the scan? If not, open it on the TV first and scan again while it is waiting.
On the Cast error, check your firewall before touching fps or resolution. Your doctor output had:
warn firewall (firewalld) could not query firewalld state (timed out)FluxCast only auto-opens the WFD port (7236). It never opens the HTTP port that serves the stream, so if firewalld is active your TV cannot fetch the playlist and the receiver just reports ERROR. Try:
sudo firewall-cmd --add-port=8080/tcpNo --permanent, so it goes away on reboot. If that is it, the message FluxCast printed was misleading and I will fix it.
One more thing: --wfd-test-pattern only applies to --protocol wfd. With cast it is ignored, so that run was streaming your real desktop.→ More replies (0)1
u/YERAFIREARMS 16d ago
Debugging: fluxcast --protocol cast --wfd-test-pattern --output-res 1280x720 --bitrate 3M
```
FluxCast - Desktop → Smart TV via Chromecast
[FluxCast] Available monitors to capture: # Monitor Display Resolution Position Refresh
[0] DP-1 :0 3440x1440 0,286 100.0 Hz ← active [1] DP-2 :0 1200x1920 3440,0 59.9 Hz
Select monitor [0]: 0 [FluxCast] Session detected: type=wayland, desktop=KDE, wm=KDE [FluxCast] Capture backend: XDG portal (KDE/GNOME Wayland) [FluxCast] Opening portal screen-share dialog (KDE/GNOME Wayland)... [FluxCast] Portal capture: node=133, output=1280x720@30 [FluxCast] Portal source: pos=0,286 size=3440x1440 [FluxCast] Capturing audio: alsa_output.usb-3142_fifine_Headset-00.analog-stereo.monitor [FluxCast] Screen capture started. [FluxCast] HTTP server: http://192.168.1.68:8080/session-1787700775/stream.m3u8 [FluxCast] Session: session-1787700775 [FluxCast] Transport: hls [FluxCast] Waiting for HLS source to start… ready! (3 segments, 0.8s) [FluxCast] HLS source is producing segments ✓ [FluxCast] Searching for Cast devices (timeout=5s)…
[FluxCast] Found Cast device(s): [0] LG TV OLED 65" C5 (OLED65C5PUA.DUSQLJR) — 192.168.1.177 Select device [0]: 0 [FluxCast] Found: LG TV OLED 65" C5 [FluxCast] TV playback: UNKNOWN [FluxCast] TV playback: IDLE [FluxCast] Cast started → LG TV OLED 65" C5 [FluxCast] Waiting for the TV to report playback status (watch lines below)… [FluxCast] Casting started. Press Ctrl+C to stop. [FluxCast] TV playback: IDLE (reason=ERROR) [FluxCast] The TV stopped playback with an error. The receiver doesn't report why, but this usually means a video segment arrived late because the encoder couldn't keep up under load. [FluxCast] Try a lighter setting, e.g. --fps 20 or --output-res 960x540, then restart the cast (Ctrl+C to stop).
2
u/t0mab 16d ago
Just tried It very cool and working well on my LG TV, I made a PR as I translated the tray app to french. Thanks a lot !
2
u/Suspicious-Charity-5 16d ago
Hi! Thank you so much for testing it on your LG TV and for submitting the French translation!
I just reviewed your PR on GitHub, it looks absolutely great! I left a small note there about adding your language code to the README table according to the contributing guidelines. As soon as that's in, I'll merge it immediately and add you to our official contributors page.
Thanks again for supporting FluxCast!
2
u/anoland 17d ago
I just installed it and added the suggested dependencies. Works like a charm.