https://bugs.kde.org/show_bug.cgi?id=524610

--- Comment #5 from Cameron <[email protected]> ---
Root cause identified — this is a one-line regression, and it can be fixed
without reverting either commit (which preserves the virtual-monitor feature).

MECHANISM
Commit 842c91e45d ("main-virtualmonitor: Make options optional and add
reasonable defaults", 2026-04-24) wrapped the ENTIRE listener setup in
RfbServer::start() behind `if (passwordSet())` — including rfbInitServer(), the
port assignment, and the socket notifiers. The only caller of
setPasswordSet(true) in the tree is main-virtualmonitor.cpp (the new
virtual-monitor binary). The GUI path (main.cpp ->
InvitationsRfbServer::init()) never sets it, so d->passwordSet stays false from
its constructor initialization.

Result: RfbServer::start() skips the whole block and returns true — the GUI
checkbox toggles, NO error dialog appears (start() "succeeded"), no socket is
ever created, and nothing is logged. That matches every reporter's symptom:
process alive, checkbox on, zero listeners, zero diagnostics.

Before this commit (verified against the tree at c434224d23, 2025-05-03) there
was no gate: rfbInitServer() ran unconditionally.

MINIMAL FIX — one line in krfb/invitationsrfbserver.cpp,
InvitationsRfbServer::init():

    instance->setListeningAddress("0.0.0.0");
    instance->setListeningPort(KrfbConfig::port());
    instance->setPasswordRequired(true);
    instance->setPasswordSet(true);   // <-- add this line

This is preferable to reverting 842c91e45d + c521740404: it keeps the
virtual-monitor feature working (its own binary still sets the flag explicitly)
while restoring the GUI path.

VERIFIED
Rebuilt as krfb 26.08.1-2 on CachyOS with only this line added. The listener
returns immediately on Wayland (KWin 6.7): RFB 003.008 handshake, security type
2 (VNC password), LISTEN 0.0.0.0:5900 + [::]:5900. Confirmed working headlessly
via OpenClaw's node-host desktop.stream probe (which requires an authenticated
loopback RFB server).

DIAGNOSTIC NOTE for anyone hitting this: the absence of an error dialog is
itself the tell. With the gate, start() returns true without touching the
network — ss -ltnp | grep 5900 empty, no journal output, no crash. strace -e
trace=socket,bind,listen -p $(pgrep krfb) shows zero socket syscalls even after
toggling the checkbox.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to