spiegel-keyman/linux/keyman-system-service
Eberhard Beilharz f23dd7563f
refactor(linux): Implement ordered output sentinel in keyman-system-service
This change allows to press F24 as ordered output sentinel from
keyman-system-service.

This is part of implementing serialized output with keyman-system-service
instead of requiring a patched ibus.

The problem both approaches try to solve is that with non-compliant apps
it is not possible to directly delete characters from the context. Instead
we have to emit a backspace key before we can commit the new
characters. However, the backspace key press goes through a different
code path in ibus and so it can happen that the commit gets processed
before the backspace which then deletes from the characters we just
added instead of from the old content.

The previous implementation solved this by forwarding a F24 ordered output
sentinel key to ibus and relying on the patched ibus to send that back to
us. When we received the F24 key we committed the characters that we
queued when we forwarded the F24 key (implemented in #7079).

The new approach implemented in this change instead sends the F24 ordered
output sentinel key through keyman-system-service and so follows the
regular key processing without requiring a patched ibus to send the key
back to us. The rest of the algorithm stays mostly the same: when we receive
the F24 key we commit the characters previously queued. The difference to
the previous implementation is that we now also queue the backspace keys
that we generate.

Part-of: #10799
2025-02-05 11:42:04 +01:00
..
man chore(linux): Fix lintian warnings 2023-06-05 17:18:55 +02:00
resources chore(linux): improve compatibility with Gentoo Linux 🍒 2025-01-29 09:18:22 +01:00
src refactor(linux): Implement ordered output sentinel in keyman-system-service 2025-02-05 11:42:04 +01:00
tests refactor(linux): Implement ordered output sentinel in keyman-system-service 2025-02-05 11:42:04 +01:00
.gitignore chore(linux): use shared meson config 2024-06-24 19:08:12 +02:00
build.sh chore(linux): use shared meson config 2024-06-24 19:08:12 +02:00
meson.build chore(linux): improve compatibility with Gentoo Linux 🍒 2025-01-29 09:18:22 +01:00
README.md docs(core): Document how to build Core on Linux 2023-07-24 19:54:17 +02:00

keyman-system-service

A DBus system service that allows to access /dev/input/* devices to toggle capslock and perform other keyboard related actions. This is required when running under Wayland, but also used with X11.

See https://0pointer.net/blog/the-new-sd-bus-api-of-systemd.html, https://stackoverflow.com/a/44281937, https://github.com/chiehmin/gdbus_test/blob/master/server.c, https://aleksander.es/data/GNOMEASIA2014%20-%20Introduction%20to%20DBus.pdf.

Notes

  • If we need to limit access to the interface to only Keyman, we can use polkit which allows to add a rule with an action that checks for the program.

  • to see the log file

    journalctl -f -u systemd-keyman
    
  • to monitor method calls

    sudo busctl monitor com.keyman.SystemService1