https://bugs.kde.org/show_bug.cgi?id=502509
Bug ID: 502509
Summary: Infinite key repeat caused by out of order processing
of NotifyKeyboardKeycode
Classification: Plasma
Product: xdg-desktop-portal-kde
Version: 6.2.5
Platform: NixOS
OS: Linux
Status: REPORTED
Severity: normal
Priority: NOR
Component: general
Assignee: plasma-b...@kde.org
Reporter: xe...@ccs.neu.edu
CC: aleix...@kde.org
Target Milestone: ---
SUMMARY
xdg-desktop-portal-kde will randomly process sequential key press and key
release events out of order, which causes infinite key repetition until the
next key press / key release command (if that one is processed in-order). This
affects key press/release combos emitted by e.g. KDE Connect, but I believe
it's a more general issue with the implementation of the
org.freedesktop.portal.RemoteDesktop interface in the XDG portal.
STEPS TO REPRODUCE
1. Emit in quick succession two NotifyKeyboardKeycode DBus calls with state=0
and then state=1 without waiting for the response in between (this can be done
using KDE connect)
2. Repeat this several times until the bug is triggered
OBSERVED RESULT
In the buggy state, the key is held down indefinitely rather than a quick press
and release. When running a DBus capture (reference command: sudo busctl --user
-M you@.host capture | wireshark -i - -k) it is visible that
xdg-desktop-portal-kde replies to the state=0 command before the state=1
command, even though this was not the original ordering
EXPECTED RESULT
The key should not be held down indefinitely
SOFTWARE/OS VERSIONS
Operating System: NixOS 24.11
KDE Plasma Version: 6.2.5
KDE Frameworks Version: 6.8.0
Qt Version: 6.8.2
Kernel Version: 6.6.64 (64-bit)
Graphics Platform: Wayland
Processors: 16 × AMD Ryzen 7 7840HS w/ Radeon 780M Graphics
Memory: 60.6 GiB of RAM
Graphics Processor: AMD Radeon 780M
ADDITIONAL INFORMATION
I would provide the PCAP with the buggy DBus calls but apparently wireshark
interaction with XDG portal is also broken (!) and I can't save the file (!!)
It seems like this bug is ultimately triggered by something inside Qt which is
asynchronously processing DBus events. I'm not familiar with that code, but I
assume it's using multiple threads, operating under the assumption that DBus
calls don't need to be serialized relative to each other, while in this case
they actually do.
Based on my reading of the code, I believe this is an xdg-desktop-portal-kde
bug and that the implementation should ensure that DBus calls are serialized
appropriately, but it could also be argued that this is a client (eg KDE
Connect) problem, where clients should wait for the reply to a
NotifyKeyboardKeycode call before sending another one. One issue with that
approach that I could see is that if the system is under load, there might be
more time in between the press and release call than the user expected, which
could still result in unwanted key repetition. Ultimately I think the design of
NotifyKeyboardKeycode (and NotifyKeyboardKeysym) is flawed, and there should be
an option to send a "press and release" event as one single DBus call. KDE
could consider implementing something like this internally.
--
You are receiving this mail because:
You are watching all bug changes.