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

            Bug ID: 527401
           Summary: EDID-less virtual outputs all match the same saved
                    output entry; a stale "disabled" setup makes every new
                    virtual output fail to configure
    Classification: Plasma
           Product: kwin
      Version First unspecified
       Reported In:
          Platform: Arch Linux
                OS: Linux
            Status: REPORTED
          Severity: minor
          Priority: NOR
         Component: multi-screen
          Assignee: [email protected]
          Reporter: [email protected]
  Target Milestone: ---

DESCRIPTION
A virtual output created via zkde_screencast stream_virtual_output (e.g.
krfb-virtualmonitor) never gets configured, and the client receives no frames,
if kwinoutputconfig.json contains an older virtual output that was saved as
disabled in a setup.

Every attempt logs:
  kwin_wayland: Applying output configuration failed: Attempted to disable an
output that doesn't have the capability

Root cause (from reading src/outputconfigurationstore.cpp, Plasma/6.8):
OutputConfigurationStore::findOutputIndex() matches on EDID identifier first,
then EDID hash, and only falls back to connectorName as the last step. Virtual
outputs have an empty EDID identifier and hash. A saved entry for an old
virtual output also has no EDID fields. So for any new virtual output:
  1. filter by edidIdentifier == "" -> exactly one match (the stale virtual
entry)
  2. edidHashUniqueAmongOutputs is true (the other output is a real monitor
with an EDID), so narrow by hash -> still one match -> return it
The connector name is never compared, so a virtual output with a different name
(e.g. "Virtual-LaptopVNC") is still treated as the old "Virtual-Laptop".
findSetup() then picks the saved setup where that output has "enabled": false.
Workspace::applyOutputConfiguration() rejects it because virtual outputs lack
Capability::Disable, so the output is never set up.

In my case this made krfb-virtualmonitor segfault in libvncserver on the first
frame (NULL framebuffer), across every attempt over several months.

STEPS TO REPRODUCE
1. Have kwinoutputconfig.json contain a virtual output (e.g. "Virtual-Laptop")
with a setup where it is "enabled": false next to a physical monitor. (I don't
know exactly how mine got saved as disabled; it is from an earlier session.)
2. Run: krfb-virtualmonitor --resolution 1920x1080 --name AnythingElse --port
5900
3. Check the journal for the "Attempted to disable an output..." message; no
virtual output appears in kscreen-doctor -o.

OBSERVED RESULT
Any virtual output, regardless of name, inherits the stale disabled state and
fails to configure.

EXPECTED RESULT
EDID-less outputs should be matched by connector name (or at least not to an
entry with a different name), and/or a setup that disables an output lacking
Capability::Disable should be ignored or fixed up instead of failing the whole
apply.

SOFTWARE/OS VERSIONS
Operating System: CachyOS Linux
KDE Plasma Version: 6.8.0
KDE Frameworks Version: 6.31.0
Qt Version: 6.12.0

ADDITIONAL INFORMATION
I got around the issue by removing the stale Virtual-* entry and setups that
referenced it from ~/.config/kwinoutputconfig.json, then logging out and back
in (the store is only loaded at startup).

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

Reply via email to