TLDR: Go to patching
Plasma 6
I recently updated to Kde Plasma 6, and it's great except for one minor annoyance: the overview effect is triggered on the touchpad with a 4-finger swipe, and I'd prefer to trigger it with a 3-finger swipe instead.
Problem is, the value is hardcoded in the C++ code
There is an issue about making it configurable but without someone assigned to it. If you want to help implement it, you can get involved
Today, I want an easy win, and it seems easy enough to patch the binary, so let's try.
Analysis
Using objdump -D /usr/bin/kwin_wayland | grep -i touchpad
we can find that the method addTouchpadSwipeGesture
is indeed in the kwin_wayland
binary with the mangled name _ZN4KWin22EffectTogglableGesture23addTouchpadSwipeGestureENS_14SwipeDirectionEj
.
We find exactly 3 calls to it, corresponding to the source code.
We want to keep the hex representation of the instructions that make up the call, specifically the hex of the 3 mov
instructions before the call
.
With:
d7b58: 48 89 ef mov %rbp,%rdi
d7b5b: ba 04 00 00 00 mov $0x4,%edx
d7b60: be 03 00 00 00 mov $0x3,%esi
d7b65: e8 06 dd f7 ff call 55870 <_ZN4KWin22EffectTogglableGesture23addTouchpadSwipeGestureENS_14SwipeDirectionEj@plt>
we want 4889efba04000000be03000000e8
There are 2 fingerprints for the 3 calls
4889efba04000000be03000000e8
and
4889efba04000000be01000000e8
To enable a 3-finger gesture, we'll replace the second parameter 4
with 3
in the hex:
4889efba
03
000000be03000000e8
4889efba
03
000000be01000000e8
For peace of mind, we can check that it doesn't match anything else
| |
We got 3 entries corresponding to the 3 calls so we're good!
Patching
Now that we have our fingerprints, we can patch the binary. To have a 3-finger gesture instead of 4, we can replace mov $0x4,%edx
with mov $0x3,%edx
using sed and xxd. Here's the process:
# backup original
# patch ba04 to ba03
| | |
# replace binary
&& &&
Edit Ubuntu 24.04:
# backup original
# patch ba04 to ba03
| | |
# replace binary
&& &&
Reboot and enjoy!