rustdesk/rustdesk · error

wayland socket probe answered a malformed list: {err}

Error message

wayland socket probe answered a malformed list: {err}

What it means

The probe ran to success but its JSON output line could not be deserialized into Vec<WaylandDisplayInfo>, meaning the child's answer was corrupted or produced by an incompatible probe version — the parent refuses to accept a list it cannot parse.

Source

Thrown at libs/base/src/platform/linux/wayland_probe.rs:258

    let mut lines = stdout.lines();
    if lines.next() != Some(WAYLAND_PROBE_MAGIC) {
        // Not a probe: the binary ran its normal startup. Latch, or this path would spawn one
        // full consumer process per enumeration cycle.
        PROBE_UNSUPPORTED.store(true, Ordering::Release);
        bail!("this binary does not dispatch {WAYLAND_DISPLAY_PROBE_ARG}; probe disabled");
    }
    if !status.success() {
        let detail = stderr.trim();
        if detail.is_empty() {
            // panic=abort or a signal leaves stderr empty; the status is then the only cause.
            bail!("wayland socket probe failed: {status}");
        }
        bail!("wayland socket probe failed ({status}): {detail}");
    }
    let displays: Vec<WaylandDisplayInfo> =
        match serde_json::from_str(lines.next().unwrap_or_default()) {
            Ok(displays) => displays,
            Err(err) => bail!("wayland socket probe answered a malformed list: {err}"),
        };
    // The child already refuses an empty list; refuse it here too, so a truncated pipe cannot
    // become a cached-for-life empty enumeration.
    if displays.is_empty() {
        bail!("wayland socket probe returned no outputs");
    }
    log::debug!(
        "wayland: {} output(s) via the probe subprocess",
        displays.len()
    );
    Ok(displays)
}

/// Everything already buffered in the pipe, read strictly non-blocking and capped: a descendant
/// that escaped the probe's process group can hold a write end open, so a blocking read (even
/// after the child exits) could hang the enumeration forever. `None` means the pipe could not be
/// INSPECTED (missing handle or fcntl failure) and must not be read as evidence of anything;
/// `Some` is whatever bytes were buffered, whether or not EOF arrived.

View on GitHub (pinned to 91c9fccbb0)

Solutions

  1. Check for a version mismatch between the parent binary and the probe serialization format
  2. Retry the probe; a corrupted pipe read may be transient
  3. Inspect the raw stdout line that failed parsing
  4. Rebuild/reinstall so the child and parent share the same WaylandDisplayInfo schema
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at libs/base/src/platform/linux/wayland_probe.rs:258 when the library encounters an invalid state.

Common situations: See trigger scenarios.

Understand the failure class


AI-assisted analysis of rustdesk/rustdesk@91c9fccbb0 (2026-09-10). Data as JSON: /api/errors/32e07dbd82a1098d. Report an issue: GitHub.