Wayland global hotkeys (shortcut) is mostly useless
Wayland (desktop portal) supports global shortcuts, which might make you think that applications can bind keys to actions and have the option to list hotkeys and allow changing them. If that is what you were hoping from the global shortcuts desktop portal then you will be disappointed. It’s up to the Wayland compositor how this works and which data to report to the application.
KDE plasma⌗
On KDE plasma this works as expected.
The application gives the desktop portal the list of actions and a preferred hotkey to bind to these actions and KDE plasma will open a GUI menu where you can accept the keys or change the keys:
When you restart the application the application will then also be able to list the hotkeys used to show which hotkeys are bound to which actions.
Hyprland⌗
Hyprland behaves differently from the KDE plasma implementation of global shortcuts. On Hyprland when you register hotkeys Hyprland will ignore the default provided default hotkeys for an action and it will also not show
a GUI menu with hotkeys registered, so no hotkeys will actually be registered. The user is expected to run hyprctl globalshortcuts
to list actions that you can bind a key to, and this only lists actions to bind keys to after
you visit the page in the application that registers hotkeys and this list of hotkeys will only be available while the Hyprland desktop portal is running, meaning if you restart your computer the list with actions will be gone.
This list does also not show which application the action is bound to [1], so if you have multiple applications open it’s possible that you won’t know which keys correspond to which application.
This is an example of what hyprctl globalshortcuts
can return when one key has been bound:
$ hyprctl globalshortcuts
:Record -> Start recording
Those actions are expected to be bound manually by the user by adding a bind
command to ~/.config/hypr/hyprland.conf
, for example:
bind = SUPERSHIFT, R, global, :Record
This has to be done manually for every key to bind and the user has to manually lookup the name of the keys (as Hyprland expects them to be called) as opposed to just pressing the key to use for an action, or letting the application decide a good default.
Hyprland also doesn’t tell the applications which key is bound to which action, so the application can’t display which keys to press for an action.
You also can’t change hotkeys inside applications, this can only be done from the ~/.config/hypr/hyprland.conf
file.
This makes Hyprlands implementation of global shortcuts more of an IPC (Inter Process Communication
), which you can implement without global shortcuts by binding a command to a key in ~/.config/hypr/hyprland.conf
, for example:
bind = SUPERSHIFT, R, exec, screen-recorder start-recording
,
so it ends up being a mostly useless feature.
Gnome and Wlroots⌗
Neither Gnome nor Wlroots currently supports the global shortcuts desktop portal interface. Hopefully when Gnome adds support for it they will make it usable like the KDE plasma implementation, however wlroots will probably make it work like Hyprland rendering it useless for most applications.
[1]: hyprctl globalshortcuts
doesn’t show the name of the application that registered a shortcut when using the global shortcut desktop portal interface,
however it does that when using the Hyprland specific wayland protocol hyprland_global_shortcuts_v1
.