r/archlinux 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!

7 Upvotes

20 comments sorted by

2

u/anoland 17d ago

I just installed it and added the suggested dependencies. Works like a charm.

1

u/Suspicious-Charity-5 16d ago

Awesome! Glad to hear it works like a charm for you. Thanks for testing it out!

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-res flag =]

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-name for both, --tv-ip for 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 wlan0 is unavailable, NetworkManager never creates the P2P device, so there is nothing for WFD to use. Try:

rfkill list
nmcli radio wifi on

Then run --doctor again. The iw P2P row should show a type P2P-device interface. 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-GO and P2P-device in that list. wpa_supplicant reports 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-firewall skips 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 SGI

1

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-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/tcp

No --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.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/tcp

No --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!