Open Cloudef opened 9 years ago
The general idea is that hacks like detecting a plugged in keyboard and setting keyboard options for the currently plugged one with a script are very brittle and hard to pull off correctly.
Xorg offers you to set XKB options both generally and for matching devices, with that functionality one can have keyboard-specific options that just work. It appears as if all keyboard input is matched against the device information and specified options.
For now I exposed libinput devices in wlc.h, this probably makes most sense. But I keep this issue open if there are problems.
I also exposed xkb_keymap and xkb_state, however no multiple keyboards yet nor layout configuration ...
I've handed in an enhancement request for libinput: https://bugs.freedesktop.org/show_bug.cgi?id=98194
Yep, I'm considering moving to Sway from AwesomeWM on Xorg, but I use dvorak - software on my laptop's internal keyboard, and hardware on my ErgoDox EZ. It took some fighting with xorg.conf, but it was doable. I see no real way of doing this in any wayland compositor I've looked into so far, short of using an XKB toggle key (maybe the AppMenu key? That annoying thing bound to Fn+RCtrl on my laptop internal board?)
All of those Xkb*
options are exposed via environment variables which xkbcommon uses, e.g. XKB_DEFAULT_LAYOUT
, XKB_DEFAULT_OPTIONS
, XKB_DEFAULT_VARIANT
, etc.
They all accept the same format and arguments as the xorg.conf
.
@iv597 I finally solved this in a global manner by writing my own hwdb rules that match per device, that way I only need to enable a compose key rule in Xorg (with setxkbmap
or a config option) and Wayland (with XKB_DEFAULT_OPTIONS
). In other words, I'm inclined to close this issue, but won't as there's a linked one that cannot be solved this way.
Relevant commit: https://github.com/wasamasa/dotfiles/commit/ca0825125ba0f026cafa3f4351a84eeaea25b410
Multiple keyboards with different layouts and rules is useful. So may be other device specific configuration (like disabling touchpad and so on).