vicinae-hotkey-v1 is a wayland protocol that lets a client choose and freely reconfigure its own global hotkeys: it requests a specific key combination and the compositor accepts it or denies it with a reason. The compositor stays the arbiter (it can deny, revoke at any time, apply any policy it wants), but within that the application manages its own bindings at runtime, with no out-of-band user configuration and no persisted compositor state.
I authored this protocol in response to the shortcomings of the desktop shortcut portal, which resulted in major applications such as OBS still not having proper global shortcut support on Wayland, after years of discussions.
I recently opened a wayland-protocols proposal discussing the exact issues the current portal approach has, and why applications are steering clear of it.
There have been a lot of discussions about this and major applications still can’t implement global shortcuts properly, so I’m suggesting this alternative approach. The API proposed by this protocol makes it trivial for existing cross platform clients to add a new global shortcut backend to support Wayland specifically.
While doing research in the context of KDE specifically, I found that KDE has had KGlobalAccel::setGlobalShortcut for a while, which is almost the same API surface. So from an implementation standpoint, I don’t think it would feel too foreign on KWin.
Although I submitted an official proposal that I’m sure will be discussed for a very long time, the reason I made this post is that I would like to know whether KDE would be interested in implementing the vendored version of this protocol like it did for some wlr protocols in the past. We would of course transition to the upstream wayland-protocols version in the event that it gets merged.
At this time time the protocol already has a few implementers:
There is also an open PR for OBS Studio and Niri. a KDE implementation would certainly strengthen the case for an OBS implementation.
If there is interest in this, I am willing to work on a KWin implementation myself.
Thank you for reading!