Skip to content

Releases: ghostpsalm/DreamConnect

DreamConnect v1.4.1

Choose a tag to compare

@ghostpsalm ghostpsalm released this 28 Jul 22:44

Hardening: DREAMCONNECT_HOST_ACCOUNT pointed at an existing account is now
fully reversible (H6) — a crash-safe one-host-account-per-box invariant,
root/user/local reserved everywhere without breaking classic-mode
autologin, and home-directory validation covering the account's own
hand-deleted-account scenario.

The account path itself still needs a full on-device reboot verification
(unchanged from v1.4).

See #21.

DreamConnect v1.4

Choose a tag to compare

@ghostpsalm ghostpsalm released this 28 Jul 13:28

Keyboard fidelity, multi-monitor capture, and a second reboot-survival path.

  • Layout-independent keyboard (H1) — character keys inject as a base X11
    keysym via Mutter's NotifyKeyboardKeysym, resolved on the guest's layout,
    so the right character lands on US, QWERTZ, AZERTY, etc. Modifiers and
    functional keys stay evdev (position-based, correct on every layout).
    Empirically verified with a focused key-logger on German and US layouts.

  • Multi-monitor capture (H2) — the daemon now captures the whole logical
    desktop via RecordArea over the bounding box of all logical monitors,
    auto-enabled when more than one is present (or forced with
    --all-monitors), falling back to the proven single-monitor RecordMonitor
    otherwise. Verified on a single-monitor box with no regression; true
    multi-monitor spanning is architecturally in place but not yet confirmed
    end to end on multi-monitor hardware.

  • Dedicated display-host account (H6) — a second way to survive an
    unattended reboot alongside autologin: DREAMCONNECT_HOST_ACCOUNT=<name>
    creates a hidden, sudo-less, password-disabled account and runs the daemon
    there instead, so no human's session is ever exposed. This release also
    fixes a startup race found in on-device testing: loginctl enable-linger
    starts the account's systemd user manager asynchronously, and the installer
    could try to configure its user service before the manager's bus was up,
    aborting a first-time install. The account path is code-complete and unit
    tested but still needs a full on-device reboot verification
    — treat it as
    best-effort until that's done.

  • Fixed the GDM-autologin WaylandEnable=false warning to only fire when the
    session actually isn't Wayland, instead of on every autologin install
    regardless of whether the setting could bite.

Install

curl -fsSL https://github.com/ghostpsalm/DreamConnect/releases/latest/download/dreamconnect-install.sh | sudo bash

Add DREAMCONNECT_AUTOLOGIN=1 before bash for unattended/reboot survival, or
DREAMCONNECT_HOST_ACCOUNT=<name> for the dedicated-account path above.

DreamConnect v1.3

Choose a tag to compare

@ghostpsalm ghostpsalm released this 19 Jul 11:16

Hardening release.

  • Distro-agnostic install (H5) — the installer detects your package manager (apt/dnf/zypper/pacman) and installs the full runtime dependency set (X11 probe tools, python3 + GObject, GStreamer PipeWire + base plugins, wl-clipboard), plus a JDK fallback for the source build. Best-effort with a manual package list on failure; DREAMCONNECT_SKIP_DEPS=1 opts out. Only Fedora is tested end to end — see per-distro packages.
  • Reboot survival / autologin (H6) — opt into GDM autologin so the bridge comes back unattended after a reboot: curl -fsSL .../dreamconnect-install.sh | sudo DREAMCONNECT_AUTOLOGIN=1 bash. A section-aware, idempotent, backed-up edit of /etc/gdm{,3}/custom.conf, reverted on --uninstall. Security trade-off (no login prompt at boot), so it is strictly opt-in.
  • Reconnect & resilience (H4) — fixed a session-restart D-Bus subscription leak that could cascade into duplicate restarts, plus a restart guard. Verified: a daemon bounce recovers (capture resumes, clients reconnect to live frames), the shm inode is stable so the agent’s mmap survives, and the unit restarts on crash.

Install

curl -fsSL https://github.com/ghostpsalm/DreamConnect/releases/latest/download/dreamconnect-install.sh | sudo bash

Add DREAMCONNECT_AUTOLOGIN=1 before bash for unattended/reboot survival.

DreamConnect v1.2

Choose a tag to compare

@ghostpsalm ghostpsalm released this 15 Jul 04:03

Operator-command release. On top of the v1.0 core (headless Wayland capture + input, no consent dialog) and v1.1 packaging, v1.2 adds the ScreenConnect operator commands that previously no-oped under Wayland:

  • Insert clipboard text — types the operator clipboard on the remote, including non-US/Unicode text (via a clipboard-paste fallback).
  • Wake lock — the AcquireWakeLock command inhibits idle-blank/auto-lock for the session.
  • Blank guest monitor — darkens the physical panel for local privacy while the operator keeps seeing the desktop (via CRTC gamma, so it holds through input).
  • Logon-session rename — the session picker shows the logged-in user name instead of :0.
  • Verified working as-is — block guest input, screenshots, Open URL, reboot, run tool, file transfer.

Also closed as not-applicable on Linux: a Backstage terminal (SC has none on the Linux client; use the Commands tab for a root shell) and Send Ctrl+Alt+Del (a GNOME no-op).

See docs/screenconnect-commands.md for full command coverage and ROADMAP.md.

Install

curl -fsSL https://github.com/ghostpsalm/DreamConnect/releases/latest/download/dreamconnect-install.sh | sudo bash

DreamConnect v1.1

Choose a tag to compare

@ghostpsalm ghostpsalm released this 13 Jul 00:50

Hardening + fixes release. Recommended for all users.

Install / upgrade

curl -fsSL https://github.com/ghostpsalm/DreamConnect/releases/latest/download/dreamconnect-install.sh | sudo bash

Changes since v1.0

Security

  • Shared-memory framebuffer and control socket are now 0600 (were world-readable /
    world-writable) — no local screen scraping or input injection. Root reads them via DAC.
  • Agent only instruments the ScreenConnect client, not inherited child JVMs.
  • Deploys root-owned; documented the trust model; inspect-first install guidance.

Performance (capture hot path)

  • No per-call stat syscalls; bulk IntBuffer row copies; skip copies mid-write and when idle.

Fixes

  • Fixed a periodic black-frame flash (a seqlock race introduced during hardening).
  • Bounded daemon reply reads; systemd retry hardening; autologin (reboot-survival) warning.

Quality

  • Added an automated test suite (./run-tests.sh) covering keymap, frame reader
    (incl. the black-flash regression), and the command parser.

See CODE_REVIEW and ROADMAP for details.

DreamConnect v1.0

Choose a tag to compare

@ghostpsalm ghostpsalm released this 12 Jul 21:22

First working release. Makes the unmodified ConnectWise ScreenConnect Linux
client work under Wayland GNOME by transparently rerouting its java.awt.Robot
capture/input onto Wayland's PipeWire ScreenCast + Mutter RemoteDesktop APIs —
headless, with no consent dialog.

Install

curl -fsSL https://github.com/ghostpsalm/DreamConnect/releases/latest/download/dreamconnect-install.sh | sudo bash

Features

  • Live screen capture (no more black screen), responsive mouse + keyboard, correct
    scroll, low-latency input.
  • No "Allow" consent dialog — drives org.gnome.Mutter.{RemoteDesktop,ScreenCast}
    directly; fully unattended.
  • ScreenConnect binaries untouched (agent via JAVA_TOOL_OPTIONS); survives updates.
  • One-command install with auto-detection; systemd-managed.

Known limitations

  • "Insert clipboard text" not yet supported (use clipboard sharing + manual paste).
  • US-ish keymap; single-monitor. See ROADMAP.md.