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

            Bug ID: 478476
           Summary: Output removal ("remove screen") does not work
                    (Wayland, Plasma 6)
    Classification: Plasma
           Product: kwin
           Version: git master
          Platform: Other
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: platform-drm
          Assignee: kwin-bugs-n...@kde.org
          Reporter: stefan.hoffmeis...@econos.de
  Target Milestone: ---

SUMMARY

When removing a previously added (virtual) screen from the system, the udev
change event is received, but is not processed correctly. The result is that
kwin retains the removed output, operates on it, which causes all sorts of (not
very) funny behaviour.

I cannot tell whether this is specific to VMware Workstation in legacy mode
(i.e. not atomic mode-setting); right now, and from the code, it seems as if
this may be generally applicable. I do not have a setup which allows me to
conveniently test that, though.

STEPS TO REPRODUCE
0. have hardware with at least two physical screens attached
1. install Fedora Rawhide (40) + KDE Plasma 6 git master into VMware
Workstation
2. switch VMware Workstation into fullscreen mode (that will _later_ allow
adding additional screens)
3. boot
4. log into (fullscreen) Plasma 6 Wayland session
// cool
5. in VMware Workstation "Cycle multiple monitors" - this adds a new virtual
monitor, new output, new window on host
// cool - this works fine
6. in VMware Workstation "Cycle multiple monitors" - this _removes_ the
previously added virtual monitor/output

OBSERVED RESULT

* kscreen-doctor and vmwgfx agree that only one monitor/output remains
connected
* host window for _second_ monitor/output remains on host screen
* journalctl shows logs with errors (note that this is from a local build with
richer logging)
```
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Received udev
event
KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?|QSocketNotifier::activated|QSocketNotifier::event|QApplicationPrivate::notify_helper
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: udev event:
"change" "/dev/dri/card0"
KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?|QSocketNotifier::activated|QSocketNotifier::event|QApplicationPrivate::notify_helper
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Received change
event for monitored drm device "/dev/dri/card0"
KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?|QSocketNotifier::activated|QSocketNotifier::event|QApplicationPrivate::notify_helper
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Adding outputs
?libkwin.so.6?|KWin::DrmBackend::updateOutputs|KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?|QSocketNotifier::activated
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Could not find
edid for connector DrmConnector(id=38, gpu=KWin::DrmGpu(0x6fd1a0),
name="Virtual-1-unknown", connection="Connected", countMode=25)
?libkwin.so.6?|?libkwin.so.6?|KWin::DrmBackend::updateOutputs|KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Connection on
"Virtual-1-unknown" is in state 1
?libkwin.so.6?|?libkwin.so.6?|KWin::DrmBackend::updateOutputs|KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: updateProperties:
modes equal is true
?libkwin.so.6?|?libkwin.so.6?|KWin::DrmBackend::updateOutputs|KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Connection on
"Virtual-2-unknown" is in state 2
?libkwin.so.6?|?libkwin.so.6?|KWin::DrmBackend::updateOutputs|KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: updateProperties:
mode change detected on "Virtual-2-unknown" for mode index 0 towards 1280 800
?libkwin.so.6?|?libkwin.so.6?|KWin::DrmBackend::updateOutputs|KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: updateProperties:
modes equal is false
?libkwin.so.6?|?libkwin.so.6?|KWin::DrmBackend::updateOutputs|KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm:
DrmPipeline::legacyModeset
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm:
DrmLegacyCommit::doModeset on "/dev/dri/card0" "Virtual-1" connected true
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Setting legacy
dpms failed! Invalid argument
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm:
DrmPipeline::legacyModeset
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm:
DrmLegacyCommit::doModeset on "/dev/dri/card0" "Virtual-1" connected true
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm:
DrmPipeline::legacyModeset
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm:
DrmLegacyCommit::doModeset on "/dev/dri/card0" "Virtual-2" connected false
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: drmModeSetCrtc
failed: Invalid argument
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Modeset failed!
Invalid argument
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Failed to revert
pipeline: (2)
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Failed to commit
pipelines: (2)
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Setting changed
mode failed!
?libkwin.so.6?|?libkwin.so.6?|?libkwin.so.6?|KWin::DrmBackend::updateOutputs|KWin::DrmBackend::handleUdevEvent
Dec 13 15:12:30 fedora kwin_wayland[8451]: kwin_wayland_drm: Connection on
"Virtual-3-unknown" is in state 2
?libkwin.so.6?|?libkwin.so.6?|KWin::DrmBackend::updateOutputs|KWin::DrmBackend::handleUdevEvent|?libQt6Core.so.6?
```

EXPECTED RESULT

* kscreen-doctor and vmwgfx agree that only one monitor/output remains
connected
* host window for _second_ monitor/output disappears from host screen
* no warnings in journalctl output

ADDITIONAL INFORMATION

In the logs, note the warnings from trying to modeset on the disappeared
output. I have also logging around which should trigger on proper removal of
the output inside kwin, but those logs don't appear - so the removed
(disconnected) output is still retained by kwin.

Try cycling through multiple monitors often enough and additional funny effects
appear: the mouse cursor gets fenced in very strange ways, but drawing remains
stable.

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

Reply via email to