%global gnd_commit 41ad82af6f0a0e6096a32fe50a5abdaff77c6993 %global major_minor_version %%(cut -d "." -f 1,2 <<<%{version}) Name: gnome-network-displays Version: 1.0.0~dev Release: 72%{?dist} Summary: Screencasting for GNOME # The icon is licensed CC-BY-SA License: GPL-3.0-or-later AND CC-BY-SA-4.0 URL: https://gitlab.gnome.org/GNOME/gnome-network-displays Source0: https://gitlab.gnome.org/lorbus/gnome-network-displays/-/archive/%{gnd_commit}/%{name}-%{gnd_commit}.tar.gz BuildRequires: desktop-file-utils BuildRequires: firewalld-filesystem BuildRequires: gcc BuildRequires: gettext BuildRequires: gmp-devel BuildRequires: libappstream-glib BuildRequires: meson BuildRequires: systemd BuildRequires: systemd-devel BuildRequires: systemd-rpm-macros BuildRequires: pkgconfig(avahi-client) BuildRequires: pkgconfig(avahi-gobject) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(gstreamer-1.0) >= 1.18 BuildRequires: pkgconfig(gstreamer-app-1.0) >= 1.18 BuildRequires: pkgconfig(gstreamer-pbutils-1.0) >= 1.18 BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) BuildRequires: pkgconfig(gstreamer-rtsp-1.0) >= 1.18 BuildRequires: pkgconfig(gstreamer-rtsp-server-1.0) BuildRequires: pkgconfig(gstreamer-video-1.0) >= 1.18 BuildRequires: pkgconfig(gtk4) BuildRequires: pkgconfig(hogweed) >= 3.6 BuildRequires: pkgconfig(json-glib-1.0) BuildRequires: pkgconfig(libadwaita-1) >= 1.0.0 BuildRequires: pkgconfig(libnm) >= 1.16.0 BuildRequires: pkgconfig(libpipewire-0.3) >= 0.3.40 BuildRequires: pkgconfig(libplist-2.0) BuildRequires: pkgconfig(libportal-gtk4) >= 0.7 BuildRequires: pkgconfig(libprotobuf-c) BuildRequires: pkgconfig(libsecret-1) BuildRequires: pkgconfig(libsoup-3.0) BuildRequires: pkgconfig(nettle) >= 3.6 # Versioned library deps Requires: gnome-desktop3 Requires: gstreamer1-rtsp-server Requires: gtk4 Requires: hicolor-icon-theme Requires: NetworkManager-libnm > 1.16.0 Requires: systemd %if !0%{?flatpak} Requires: NetworkManager-wifi Requires: pipewire-gstreamer %endif Requires: gnome-network-displays-common = %{version}-%{release} Recommends: gnome-network-displays-extension = %{version}-%{release} Provides: network-displays = %{version}-%{release} Provides: network-displays%{?_isa} = %{version}-%{release} Provides: network-displays-daemon = %{version}-%{release} Provides: network-displays-client = %{version}-%{release} Provides: network-displays-stream = %{version}-%{release} %description GNOME Network Displays allows you to cast your desktop to a remote display. Supports the Miracast and Chromecast protocols. %package common Summary: GNOME Network Displays common files License: GPL-3.0-or-later AND CC-BY-SA-4.0 %description common Common GNOME Network Displays files. %package app Summary: GNOME Network Displays App License: GPL-3.0-or-later Requires: gnome-network-displays-common = %{version}-%{release} %description app GNOME Network Displays allows you to cast your desktop to a remote display. Supports the Miracast and Chromecast protocols. The app package contains the standalone, all-in-one GNOME Network Displays app. %package extension Summary: GNOME Network Displays Shell Extension License: GPL-3.0-or-later Requires: gnome-shell Requires: gnome-network-displays = %{version}-%{release} Provides: network-displays-extension = %{version}-%{release} Provides: network-displays-shell-extension = %{version}-%{release} Provides: gnome-network-displays-shell-extension = %{version}-%{release} Provides: gnome-shell-extension-network-displays = %{version}-%{release} %description extension GNOME Network Displays Shell Extension. %prep %autosetup -p1 -n %{name}-%{gnd_commit} %conf %meson %build %meson_build %install %meson_install desktop-file-validate %{buildroot}/%{_datadir}/applications/*.desktop appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/*.metainfo.xml %find_lang %{name} --all-name --with-gnome %post %systemd_user_post network-displays-daemon.service %firewalld_reload %postun %firewalld_reload %files -f %{name}.lang common %license COPYING %doc README.md %{_datadir}/icons/hicolor/scalable/apps/org.gnome.NetworkDisplays.svg %{_datadir}/icons/hicolor/symbolic/apps/org.gnome.NetworkDisplays-symbolic.svg %{_prefix}/lib/firewalld/zones/P2P-WiFi-Display.xml %files app %{_bindir}/gnome-network-displays %{_datadir}/applications/org.gnome.NetworkDisplays.desktop %{_metainfodir}/org.gnome.NetworkDisplays.metainfo.xml %files extension %{_datadir}/gnome-shell/extensions/gnome-network-displays@gnome.org/extension.js %{_datadir}/gnome-shell/extensions/gnome-network-displays@gnome.org/metadata.json %{_datadir}/gnome-shell/extensions/gnome-network-displays@gnome.org/stylesheet.css %files %{_bindir}/network-displays-client %{_bindir}/network-displays-daemon %{_libexecdir}/network-displays-stream %{_datadir}/applications/org.gnome.NetworkDisplays.Client.desktop %{_metainfodir}/org.gnome.NetworkDisplays.Client.metainfo.xml %{_userunitdir}/network-displays-daemon.service %changelog * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-64 - Update source to 6a0fede: give AirPlay a real two-way volume by borrowing the device's Cast channel when the same TV also speaks Cast, the way Miracast already does. AirPlay can set the receiver's volume but never hears one back — its event channel stays idle on the LG, and the modern MediaRemote volume path is reachable only from an audio now-playing session, which a screen mirror is not (established by firmware reverse-engineering and confirmed live: declaring a non-mirror session, sending RECORD and advertising the media control port all still yield nothing). A pure Apple TV with no Cast keeps the native send-only path; either way the slider still works via PipeWire gain until caps are known. Also records the volume-back and lip-sync findings in the AirPlay protocol notes and extends the mirror test tool used to prove them * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-63 - Update source to 2800dc4: decrypt the AirPlay event channel (Events-* keys, same ChaCha20-Poly1305 framing as the control channel) instead of logging it as ciphertext. This is the channel a receiver would use to announce a volume changed by its own remote (the notify half AirPlay's request path lacks); decrypted events are logged in full and a receiver's `volume:` report is turned into a slider move. Testing on real AirPlay hardware still pending * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-62 - Update source to 4cacd38: stop streaming when the receiver ends the session. A Chromecast that closed the session on its own left GND still "streaming" and pushing UDP at a receiver that had stopped listening, needing a manual cancel: the receiver's CLOSE was being swallowed by the path that deliberately survives a lost cast channel mid-mirror, and a RECEIVER_STATUS no longer listing our session was ignored outright. Both now end the stream cleanly * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-61 - Update source to d1df8bb: set the receiver's volume over AirPlay too (RTSP SET_PARAMETER, capability probed from the reply), and give Miracast a real device volume by borrowing the Cast channel of the same TV while the mirror goes over Miracast (Miracast has no volume anywhere in the WFD spec). Only Miracast-over-infrastructure borrows; a Wi-Fi Direct peer speaks nothing else, so it keeps the software gain. Every failure path falls back to software gain, so the slider always works * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-60 - Update source to 4ed02ed: sync the volume between GNOME and the receiver. Moving GNOME's slider now sets the TV's own volume (Chromecast SET_VOLUME), and using the TV's remote moves GNOME's slider (parsed out of RECEIVER_STATUS, which the receiver broadcasts unsolicited). When the receiver applies the volume itself, PipeWire's own gain is pinned at unity so it is not applied twice; receivers with no volume control (Miracast — WFD has none in the spec) keep the software gain, so their slider still works * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-59 - Update source to 333f981: capture desktop audio through a native PipeWire virtual Audio/Sink (libpipewire pw_stream) instead of a PulseAudio null-sink + pulsesrc. The sink still appears in GNOME's output list; switching the output away now stops the receiver by construction (the stream pauses and only silence flows), and no sink module survives a crash. Drop the libpulse-mainloop-glib BuildRequires; add libpipewire-0.3 * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-58 - Update source to ffd9dc9: reliably stop the mirror audio when the output is switched away from the display sink by muting the capture element (the sink- input move alone was undone by PipeWire's per-stream restore) * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-57 - Update source to c464673: instrument the receiver->sender backchannels and request Cast RTCP event logs (groundwork for per-session A/V-sync auto-negotiation); fix the AirPlay SYNC length word (7 -> 4) that made shairport-class receivers add 250 ms of audio latency * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-56 - Update source to de068a1: match the audio delay to receivers that render mirror video as fast as they can (LG measured): AirPlay budget default 300 ms, Cast OFFER targetDelay 300 ms with GND_CC_TARGET_DELAY_MS override * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-55 - Update source to e372f1d: forward GND_* tunables from the daemon to the stream units, and temporarily enable full debug logging in the daemon service for A/V-sync field calibration (revertable commit) * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-54 - Update source to 516db9c: fix the Cast mirror freezing when desktop audio starts (anchor both streams' RTP clocks to one shared session timeline) and survive cast-channel loss mid-mirror (answer receiver heartbeat PINGs, frame channel messages correctly, keep the UDP mirror when the channel drops); AirPlay skew allowance now defaults to 0 and accepts negative values * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-53 - Update source to cc6eda9: replace the per-device lip-sync delay with a shared A/V presentation-latency budget (WFD model: both streams stamped on one receiver-synced clock; the receiver aligns them) plus a small video decode allowance; GND_AIRPLAY_LATENCY_MS and GND_AIRPLAY_AV_SKEW_MS override * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-52 - Update source to fe0076e: fix a client crash when picking a per-display protocol override (a re-entrant combo rebuild during selection), and shorten the default AirPlay video latency to 190 ms with a runtime override (GND_AIRPLAY_VIDEO_LATENCY_MS) so audio no longer leads the picture * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-51 - Update source to 5f23580: remember the abilities of single-protocol displays too, so a Chromecast-only TV lists its protocol and can have it re-injected * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-50 - Update source to bd12025: recognise a saved display by its stable identity, so one that is discovered under another protocol's name is no longer listed twice (once live, once as an offline saved row) and keeps its saved settings; always mark offline rows as saved displays * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-49 - Update source to 951b838: fix silent mirror audio (only relocate streams on an actual switch away from the capture sink) and show the display's name instead of "(null)" for the capture device in client/daemon mode * Tue Jul 14 2026 Christian Glombek - 1.0.0~dev-48 - Update source to e94b5e0: fix A/V lip-sync for AirPlay and Cast mirroring (timestamp both streams from capture time on the shared clock, matching the Miracast model) and stop mirroring desktop audio when the GNOME output device is switched away from the virtual sink * Mon Jul 13 2026 Christian Glombek - 1.0.0~dev-47 - Update source to d7b703f: drop non-copyrightable "Copyright Christian Glombek" claims from branch-authored file headers (SPDX-only); authorship credits and inherited upstream copyrights are unchanged * Mon Jul 13 2026 Christian Glombek - 1.0.0~dev-46 - Update source to ee7ba50: About dialog — point Issues at /work_items and credit Benjamin Berg, Christian Glombek and the GNOME Network Displays Contributors * Mon Jul 13 2026 Christian Glombek - 1.0.0~dev-45 - Update source to 1436320: backport upstream MR !252 fixes — never autospawn PulseAudio (PA_CONTEXT_NOAUTOSPAWN, avoids a libpulse abort on PipeWire) and tear the Cast connection down promptly on a read error/EOF * Mon Jul 13 2026 Christian Glombek - 1.0.0~dev-44 - Update source to 21f849c: show the running stream in the client under a protocol order (the meta sink now selects the engaged live sink instead of an idle, higher-ordered discovery sibling) * Mon Jul 13 2026 Christian Glombek - 1.0.0~dev-43 - Update source to 246902b: don't include directly (rejected by the stricter GTK4 header guard on rawhide) * Mon Jul 13 2026 Christian Glombek - 1.0.0~dev-42 - Add BuildRequires: libsecret-1 (keyring-backed AirPlay pairing identity) * Mon Jul 13 2026 Christian Glombek - 1.0.0~dev-41 - Add BuildRequires for the AirPlay 2 crypto/plist stack: nettle, hogweed, gmp-devel, libplist-2.0 (and explicit gstreamer-app-1.0) * Fri Dec 12 2025 Christian Glombek - 1.0.0~dev-2 - Update to v1.0.0 * Wed Jul 23 2025 Fedora Release Engineering - 0.97.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild * Thu May 22 2025 Packit - 0.97.0-1 - Update to version 0.97.0 - Resolves: rhbz#2367943 * Mon Apr 07 2025 Packit - 0.96.0-1 - Update to version 0.96.0 - Resolves: rhbz#2354531 * Thu Jan 16 2025 Fedora Release Engineering - 0.94.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild * Wed Nov 13 2024 Packit - 0.94.0-1 - Update to version 0.94.0 - Resolves: rhbz#2303808 * Fri Aug 09 2024 Christian Glombek - 0.93.0-1 - Update to v0.93.0 - Fix License string * Thu Jul 18 2024 Fedora Release Engineering - 0.92.2-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild * Mon Jun 10 2024 Christian Glombek - 0.92.2-1 - Update to v0.92.2 - Resolve RHBZ#2279116 - Add downstream packit.dev configuration * Sun Jan 28 2024 Christian Glombek - 0.92.1-1 - Update to v0.92.1 * Wed Jan 24 2024 Fedora Release Engineering - 0.91.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild * Fri Jan 19 2024 Fedora Release Engineering - 0.91.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild * Thu Jan 18 2024 Christian Glombek - 0.91.0-1 - Sort dependencies alphabetically - Update to v0.91.0 * Wed Jul 19 2023 Fedora Release Engineering - 0.90.5-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild * Thu Jan 19 2023 Fedora Release Engineering - 0.90.5-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild * Thu Jul 21 2022 Fedora Release Engineering - 0.90.5-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild * Thu Jan 20 2022 Fedora Release Engineering - 0.90.5-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild * Thu Jul 22 2021 Fedora Release Engineering - 0.90.5-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild * Tue Apr 27 2021 Benjamin Berg - 0.90.5-1 - New upstream release 0.90.5 * Tue Jan 26 2021 Fedora Release Engineering - 0.90.4-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild * Sat Aug 01 2020 Fedora Release Engineering - 0.90.4-3 - Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild * Mon Jul 27 2020 Fedora Release Engineering - 0.90.4-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild * Mon Jun 22 2020 Benjamin Berg - 0.90.4-1 - New upstream release 0.90.4 - This adds firewalld integration * Wed Jun 17 2020 Jérôme Parmentier - 0.90.3-2 - Add missing dependency on pipewire-gstreamer * Wed Apr 29 2020 Benjamin Berg - 0.90.3-1 - New upstream release 0.90.3 * Tue Jan 28 2020 Fedora Release Engineering - 0.90.2-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild * Fri Dec 20 2019 Benjamin Berg - 0.90.2-2 - Add patch to prevent timeout with certain sinks https://github.com/benzea/gnome-network-displays/issues/20 * Mon Dec 16 2019 Benjamin Berg - 0.90.2-1 - New upstream release 0.90.2 with bugfixes * Thu Jul 25 2019 Fedora Release Engineering - 0.90.1-1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild * Wed Jul 10 2019 Benjamin Berg - 0.90.1-0 - Initial package (#1721157)