6e5d2f8963
Checking the keyboard layout has been a long set of hurdles so far, with several attempts. Originally, the checking was introduced by @lheckemann in #23709. The initial implementation just was trying to check whether the symbols/ directory contained the layout name. Unfortunately, that wasn't enough and keyboard variants weren't recognized, so if you set layout to eg. "dvorak" it will fail with an error (#25526). So my improvement on that was to use sed to filter rules/base.lst and match the layout against that. I fucked up twice with this, first because layout can be a comma-separated list which I didn't account for and second because I ran into a Nix issue (NixOS/nix#1426). After fixing this, it still wasn't enough (and this is btw. what localectl also does), because we were *only* matching rules but not symbols, so using "eu" as a layout won't work either. I decided now it's the time to actually use libxkbcommon to try compiling the keyboard options and see whether it succeeds. This comes in the form of a helper tool called xkbvalidate. IMHO this approach is a lot less error-prone and we can be sure that we don't forget about anything because that's what the X server itself uses to compile the keymap. Another advantage of this is that we now validate the full set of XKB options rather than just the layout. Tested this against a variety of wrong and correct keyboard configurations and against the "keymap" NixOS VM tests. Signed-off-by: aszlig <aszlig@redmoonstudios.org> Cc: @lheckemann, @peti, @7c6f434c, @tohl, @vcunat, @lluchs Fixes: #27597 |
||
---|---|---|
.. | ||
arandr | ||
autocutsel | ||
bgs | ||
bumblebee | ||
ckbcomp | ||
dex | ||
dispad | ||
dragon-drop | ||
ffcast | ||
go-sct | ||
hsetroot | ||
keynav | ||
ksuperkey | ||
nitrogen | ||
numlockx | ||
obconf | ||
oblogout | ||
primus | ||
ratmen | ||
runningx | ||
screen-message | ||
sct | ||
setroot | ||
skippy-xd | ||
sselp | ||
vdpauinfo | ||
virtualgl | ||
wayv | ||
winswitch | ||
wmctrl | ||
wmutils-core | ||
wmutils-opt | ||
x2vnc | ||
x2x | ||
x11vnc | ||
xannotate | ||
xautomation | ||
xbanish | ||
xbindkeys | ||
xbindkeys-config | ||
xbrightness | ||
xcalib | ||
xcape | ||
xchainkeys | ||
xcwd | ||
xdg-user-dirs | ||
xdg-utils | ||
xdotool | ||
xgeometry-select | ||
xinput_calibrator | ||
xkb-switch | ||
xkbset | ||
xkbvalidate | ||
xmacro | ||
xmagnify | ||
xnee | ||
xpra | ||
xprintidle-ng | ||
xrectsel | ||
xrestop | ||
xsettingsd | ||
xtrace | ||
xvkbd | ||
xwinmosaic |