Skip to content

Releases: truebest/lgnome

lgnome 0.5.5

Choose a tag to compare

@truebest truebest released this 11 Sep 17:43
3882ae4

lgnome 0.5.5 fixes two RDP connection issues:

  • Restore automatic retries during GNOME daemon handoffs, avoiding an unnecessary manual reconnect.
  • Show a specific access-denied status when a server accepts credentials but refuses remote access.

Install the IPK over the existing lgnome application. Same-ID updates retain saved lgnome profiles.

lgnome 0.5.4

Choose a tag to compare

@truebest truebest released this 10 Sep 19:44
e1410f0

lgnome 0.5.4 adds Windows RDP support alongside Ubuntu/Fedora GNOME desktops, with hardware H.264 streaming verified on NVIDIA and Intel hosts.

  • Per-profile desktop resolution, improved Windows audio buffering, and updated IronRDP graphics handling.
  • Reliable modifier combinations with mouse clicks and wheel input, plus cursor recovery after remote-only connection and TV overlays.
  • Clear HUB statuses for server restart/shutdown, sign-out, replaced sessions, network interruptions, and protocol failures. Escape closes an editor or returns from the HUB to the active desktop.
  • Simpler logging and deployment; ordinary same-ID updates launch saved profiles without configuration overrides.

Upgrade note: the app is now named lgnome and uses com.truebest.lgnome.native. GnomeCast 0.5.3 used com.truebest.gnomecast.native, so webOS treats lgnome as a separate application. Existing GnomeCast profiles are not automatically imported; retain the old app until the new profiles are configured. Updates between lgnome builds retain lgnome's saved profiles.

gnomecast 0.5.3

Choose a tag to compare

@truebest truebest released this 22 Aug 17:07

Compared with 0.5.2, this release adds and hardens the following user-visible paths.

USB camera and microphone redirection

Profiles can opt into RDPECAM and RDPEAI independently. A TV-connected V4L2 camera supplies native Annex-B H.264 directly — nothing in this client transcodes, so the camera itself must emit H.264 — while ALSA microphone input is gain-adjusted, resampled and packetized for gnome-remote-desktop. Device, camera mode and microphone gain are selected in the HUB, which lists the sizes and frame rates the chosen camera actually reports for non-emulated, single-plane V4L2_PIX_FMT_H264 rather than a fixed menu.

Camera consumers can close and reopen the redirected device without permanently losing it from PipeWire or reconnecting RDP: the RDPECAM stop is idempotent and completes accepted sample requests before acknowledging. Corrupt, malformed or oversized buffers, queue overflow, handoff and submission failure discard the reference chain and reopen capture until a self-contained SPS+PPS+IDR decoder seed is available.

Dropped buffers are deliberately not treated that way. A jump in the V4L2 sequence counter re-gates the decoder seed but keeps the device, the queued access units and the cached parameter sets, because reopening would additionally restart mid-GOP and lose more video than the gap itself. A bounded wait answers an accepted sample credit with SampleError without reopening, so a camera that starts inside a long GOP, or loses buffers mid-stream, continues to its next decoder seed.

Capture privacy across sessions

Outgoing camera and microphone payload is sent only to the session currently on screen. A switch closes and drains the previous session's payload gate before publishing the new owner and purges queued microphone data. The background session's camera is removed from RDPECAM/PipeWire and advertised again with a fresh device channel when it returns.

Broader H.264 host compatibility

The hardware-video path is verified with both NVIDIA/NVENC and Intel GPU/VA-API gnome-remote-desktop hosts. Decoder restart, session handoff and snapshot recovery use one parser for both AVC length-prefixed and Annex-B access units, including the AUD-first framing from the tested Intel encoder.

Stable Intel streaming additionally needs the VA-API frame_num wrap fix from gnome-remote-desktop MR !412, which was reported from this testing. Current upstream main includes it.

Diagnostics and fixes

  • With GNOMECAST_LOG='media.ndl=debug', every 300 accepted video access units report the NDL render-buffer value plus synchronous NDL_DirectVideoPlay timing and errors. These are diagnostic only, not automatic pacing inputs.
  • Extra mouse buttons open the HUB and mixer, Display Control channel recreation is more robust, capture-device fallback is improved, and the native/Rust lifecycle received further concurrency hardening.
  • backend_ndl updated to 0.5.0.

Package

Native webOS arm package for LG TVs.

com.truebest.gnomecast.native_0.5.3_arm.ipk
SHA-256 e774a254173f242dc792f06a485b4d896af71e06c312186f9c573e0ba6cb7bdf

gnomecast 0.5.2

Choose a tag to compare

@truebest truebest released this 28 Jul 20:04

Changes

  • Release the NDL DirectMedia pipeline on fatal signals and unexpected exits so a crashed session can no longer leave the TV media stack claimed.
  • Ship a self-contained webOS DirectMedia ABI header; the production build no longer requires an installed NDK.
  • Update backend_ndl to 0.4.0 with claim-based close and lifecycle cleanup.
  • Fix RemoteFX progressive decoding: clip edge tiles on desktops whose dimensions are not multiples of 64, scope codec contexts per surface, and fail fast on updates for unknown surfaces.

Package

Native webOS arm package for LG TVs.

gnomecast 0.5.1

Choose a tag to compare

@truebest truebest released this 15 Jul 06:38

Changes

  • Recover the server-driven cursor when the webOS cursor plane unexpectedly loses visibility.
  • Keep RDP cursor recovery out of TV menus and local mixer overlays.
  • Improve mixed-audio stability while background RemoteFX sessions consume CPU.
  • Serialize NDL media timestamps with audio/video feeds across pipeline reloads.

Package

Native webOS arm package for LG TVs.

gnomecast 0.5.0

Choose a tag to compare

@truebest truebest released this 12 Jul 17:24

Multi-RDP / HUB redesign

  • Four simultaneous RDP session slots (red/green/yellow/blue), with a HUB card browser for switching, connecting, and editing profiles.
  • KVM-style input switching: one slot owns the video plane and keyboard/mouse at a time; backgrounded slots stay connected and keep feeding the audio mix.
  • Deferred switching and IDR-snapshot backgrounding avoid a black-screen reload when flipping between sessions against servers that only emit one keyframe per connection.
  • Volume mixer overlay: per-slot dBFS faders with live L/R meters, mute/duck/solo, and a MASTER fader mirroring the webOS system volume.

NDL backend migration

  • Replaced the ss4s-mediated hardware decode path with an in-house, standalone MIT-licensed backend_ndl DirectMedia library (dlopen of libNDL_directmedia.so.1), plus thin gnomecast adapters. The ss4s/commons submodules are gone.

Native logging

  • Unified all native logging (C and the Rust/IronRDP bridge) through a single file-scoped category logger (clog/category_log.c), replacing ad hoc stderr/prefix logging.

IronRDP fork

  • Rebased the vendored IronRDP fork onto current upstream (Devolutions/IronRDP), picking up 48 upstream commits including an independently-landed version of the network-autodetect work this fork had added. Re-applied the fork's remaining delta (optional CredSSP feature, fuller connect-time bandwidth-measure handling, a DISPLAYCONTROL_CAPS_PDU decode fix now also submitted upstream).

Download

gnomecast 0.4.1

Choose a tag to compare

@truebest truebest released this 10 Jul 14:15

Audio pipeline

  • Replaced the custom audio mixer with a pinned headless miniaudio 0.11.25 node graph.
  • Mixes audio from all four RDP sessions simultaneously in F32 at 48 kHz stereo, while retaining NDL/ss4s as the production TV audio sink.
  • Each session has its own converter, so Opus/PCM and 44.1/48 kHz sources can play together without resetting the global output format.
  • Opus remains preferred and is decoded through libopus; stereo S16 PCM remains the fallback.

Adaptive playback

  • Added an always-on per-session adaptive buffer: 60 ms initial target with a 40-150 ms operating range.
  • Tracks TCP/DVC burst and head-of-line jitter over a rolling window and adjusts each source independently.
  • Corrects producer/output clock drift with smooth dynamic resampling up to +/-0.5%.
  • Isolates source underruns, re-buffers only the affected session, and uses short fades around emergency trims to avoid clicks.
  • Drops stale pre-gap PCM at talkspurt boundaries and preserves atomic format changes without replaying frames through the wrong converter.

Mixer and settings

  • Preserves per-session gain, live source/master meters, clipping behavior, and queue/target latency reporting.
  • Removed the manual audio-buffer slider: adaptive buffering is always enabled.
  • The legacy audioPrebufferMs setting and CLI option are accepted for compatibility, ignored with one warning, and no longer persisted.
  • Audio remains best-effort: any audio failure degrades to silent video instead of terminating an RDP session.

Dependency packaging in 0.4.1

  • miniaudio is now tracked as an official upstream Git submodule pinned to commit 9634bedb5b5a2ca38c1ee7108a9358a4e233f14d.
  • The selected miniaudio source files and runtime behavior are unchanged from 0.4.0.

Download

gnomecast 0.3.0

Choose a tag to compare

@truebest truebest released this 08 Jul 15:59

Multi-RDP release: up to four simultaneous sessions on the TV remote's color buttons.

Added

  • Up to four RDP sessions to different servers, mapped to the remote's color buttons (red/green/yellow/blue). A color button opens that slot's live stream when connected, its configurator otherwise; keyboard and mouse follow the selected session (KVM-style).
  • Audio is mixed from ALL connected sessions: per-session in-process Opus decode (~96kbps per session), N-source PCM mixer with per-source jitter prebuffer and stale-burst promotion.
  • Volume-mixer overlay on the active slot's color button: dBFS faders (-60..+6, 3dB steps) with live L/R post-fader meters; driven by the remote or the system pointer (click-jump, drag, wheel).
  • audioCodec setting (auto|pcm): lossless PCM streaming on demand, per launch parameter, settings file or the pre-connect UI dropdown.
  • Per-slot persisted configuration (v2 sessions schema; legacy flat config maps to the green slot).

Changed

  • Session switching keeps the old picture until the new stream's keyframe is in hand (single pipeline reload, splash instead of black; same-resolution streams hand over in-band). Servers that never answer refresh requests are learned and reconnected immediately.
  • Audio latency cut from up to ~1.5s to ~0.1s: standing ring backlog is trimmed at pump start, on feed stalls and by a ring-floor watchdog; idle silence can no longer queue in front of real audio in the hardware pipeline; audioPrebufferMs defaults to the measured 60ms jitter knee. Ring depth statistics are logged every 3s for permanent observability.

Fixed

  • Settings now survive TV power cycles: the package ships a writable in-app settings directory (the dev-mode jail exposes no conventional writable persistent path), with a persistent /media/developer/temp candidate and transparent migration from the old tmpfs location. Rejected save locations are logged with the reason.
  • A blanked slot address saves as a cleared slot instead of resurrecting the removed server.
  • Numerous review-found races fixed: mixer format re-pin lifecycle (app-level serialization), concurrent pump stops, cross-slot log redaction, per-slot switch-watchdog frame counters, overlay vs focus/grab rules, reconnect-start failure routing.

Packaging

  • libopus is built from source and shipped with the package; HELLOLG_WITH_OPUS defaults ON only for webOS cross-builds so host smoke builds stay offline.

Validated by Bitbucket pipeline #135 and extensive on-TV verification (audio latency telemetry, switch stress, reboot/reinstall persistence).

gnomecast 0.2.2

Choose a tag to compare

@truebest truebest released this 06 Jul 05:33

Stability release for the native libevdev input path.

Changed

  • Unified USB mouse and keyboard handling on libevdev with immediate eventfd wakeups into the SDL/main loop.
  • Keep SDL pointer fallback for compositor/Magic Remote input when no grabbed USB mouse is active.

Fixed

  • Avoid dropping queued final input events when evdev devices are removed or report errors.
  • Remove dead evdev fds after unplug/hangup instead of spinning on them.
  • Keep persisted settings load/save candidate selection consistent.
  • Preserve full backend password length support in the pre-connect UI.

Packaging

  • Package libevdev license/provenance for static webOS builds.

Validated by Bitbucket pipeline #90 and TV smoke test.

gnomecast 0.2.1

Choose a tag to compare

@truebest truebest released this 05 Jul 05:57

Input subsystem release on top of 0.2.0. Mouse and keyboard now come straight from the kernel evdev layer instead of the webOS SDL/Wayland path.

Changed

  • Raw evdev input: the USB mouse and keyboard are read directly from /dev/input (EVIOCGRAB), below the compositor, so none of the webOS input munging applies — no synthesized Back on right-click, no pointer recenter, no F-key/keypad/NumLock quirks, no IME/TEXTINPUT double-input. Keys reach the RDP server as raw AT set-1 scancodes.

Added

  • SDL pointer fallback: when no USB mouse is grabbed, the compositor pointer (Magic Remote) still drives the session via SDL.
  • Missing-keyboard signalling: a pre-connect probe warns when no USB keyboard is attached (there is no SDL keyboard fallback), plus a loud runtime log.
  • Focus-aware grab lifecycle: a remote-invoked webOS overlay (TV menu) that steals focus without backgrounding now releases the global evdev grab so the overlay is usable, and re-grabs on return.

Fixed

  • Held mouse buttons / keys are released to the server before the grab is dropped on focus loss, so a focus change mid-press no longer leaves a stuck drag or an auto-repeating key.
  • The RDP cursor reliably reappears after dismissing an overlay, including when it was closed with Esc.

Removed

  • The SDL-mouse workaround class (jump filter, warp-echo, right-click Back suppression, typing hide/recover) and the dead relative-mouse / "Magic Remote mode" toggle — all of which only existed to fight the webOS munging that evdev now bypasses.