1
0
Fork 0

UCW vs. XKB: We know everything :-)

blog
LEdoian 10 months ago
parent ce07b83635
commit 28c82097dc

@ -229,43 +229,50 @@ Understanding Wayland
This part is supposed to also be simple: the core Wayland protocol will send us This part is supposed to also be simple: the core Wayland protocol will send us
`wl_keyboard::keymap <TODO>`__, `wl_keyboard::key <TODO>`__ and `wl_keyboard::keymap <TODO>`__, `wl_keyboard::key <TODO>`__ and
`wl_keyboard::modifiers <TODO>`__ events containing the required data. `wl_keyboard::modifiers <TODO>`__ events containing the required data. To prove
our hypotheses we can use ``wev`` which does very little post-processing as
with ``xev``.
The client does not seem to have a say in what kind of keymap it will get, it The client does not seem to have a say in what kind of keymap it will get, it
is up to the compositor. This means that even XWayland cannot say it wants raw is up to the compositor. This means that even XWayland cannot say it wants raw
data, but ``xkb_v1``-style keycodes are probably close. data, but ``xkb_v1``-style keycodes are probably close (they are off by 8,
which is kind of expected).
While exploring what happens I found a bug in ``wev`` (as of version 1.0.0-13
in Arch): for wl_keyboard::modifiers the group is reported as the serial While exploring what happens I found out there is a bug in the stable version
number:: 1.0.0 of ``wev``, where it forgets to include the serial number for
wl_keyboard::modifiers. It has already `been patched
[14: wl_keyboard] key: serial: 238464; time: 554528472; key: 66; state: 1 (pressed) <https://git.sr.ht/~sircmpwn/wev/commit/83de8e931ab04ce3322a58b359d8effa7901b21c>`__
sym: Mode_switch (65406), utf8: '' 15 months ago, but the patch is not included in a release yet.
[14: wl_keyboard] modifiers: serial: 1; group: 0
depressed: 00000000
latched: 00000000
locked: 00000000
Apparently I am `fixing <TODO>`__ more than one project :-)
Note: Currently, SourceHut is down (TODO: remove this when sr.ht is up), so I
cannot link you to my patch, so here it is instead::
--- wev.c.orig 2024-01-13 22:38:03.739239211 +0100
+++ wev.c 2024-01-13 22:38:08.012465335 +0100
@@ -368,7 +368,7 @@
uint32_t mods_locked, uint32_t group) {
struct wev_state *state = data;
int n = proxy_log(state, (struct wl_proxy *)wl_keyboard, "modifiers",
- "serial: %d; group: %d\n", group);
+ "serial: %d; group: %d\n", serial, group);
if (n != 0) {
printf(SPACER "depressed: %08X", mods_depressed);
print_modifiers(state, mods_depressed);
But I am also interested in what is exchanged between the compositor and But I am also interested in what is exchanged between the compositor and
XWayland server. And there does not seem to be any kind of sniffer yet, so `I XWayland server. And there does not seem to be any kind of sniffer yet, so `I
started writing one <https://gitea.ledoian.cz/LEdoian/sopass/>`__ started writing one <https://gitea.ledoian.cz/LEdoian/sopass/>`__
[#wiresharkify]_. Only then I learned that I can set the environment variable
``WAYLAND_DEBUG=1`` to get dumps of all the calls that are happening. (To my
defense, this does not seem to be very documented. I only found a small note in
the `building guide <TODO>`__. Even the `debugging extras page <TODO>`__ does
not mention this.)
.. should fix the wl docs instead of ranting, though…
By running ``WAYLAND_DEBUG=1 Xwayland :15`` and ``DISPLAY=:15 xev``, we do
learn what we thought was happening:
- XWayland gets XKB v1 keymap (I trust sway to supply the same map as to
``wev`` earlier.)
- XWayland gets the correct (Wayland core) events from the compositor
- XWayland sends a wrong (X11 with XKB) events to ``xev``.
This confirms that XWayland is really the culprit here.
Digging into XWayland
=====================
At this point, we have all the tools, references to documentation and knowledge
we could possibly have, so now we get our hands dirty. A simple ``grep -r
wl_keyboard src/`` tells us that the keyboard handling occurs in the file
``hw/xwayland/xwayland-input.c`` in functions ``keyboard_handle_*``, which look
like the libwayland-client handlers we have seen in ``wev``.
.. TO-MENTION: .. TO-MENTION:
- nested compositor issues - nested compositor issues
@ -274,3 +281,10 @@ started writing one <https://gitea.ledoian.cz/LEdoian/sopass/>`__
- list of all the packages I had downloaded and compiled - list of all the packages I had downloaded and compiled
.. TODO: rename XWayland to Xwayland… .. TODO: rename XWayland to Xwayland…
---------
.. [#wiresharkify] It would be nice if we could analyse the traffic in a
general packet analysis program like Wireshark, though, so I might return to
sopass and write the dissectors and dumping from sopass to a pcap file in a
future. However, this gets put on hold now.

Loading…
Cancel
Save