I frequently work on pairing stations where there are multiple keyboards installed. I can use
-device <ID> to set the layout for a specific keyboard (using an ID from
xinput), but often it's not obvious which keyboard I'm at. It would be better to avoid the back-and-forth of trying both keyboards, so I'd like to write a quick tool to get this information for
setxkbmap. I'd expect a typical use case like the following:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb Press Enter to detect keyboard ID
Which interface provides this information on Linux? Ideally it should work without X, but that's not a requirement (there doesn't seem to be many tools which support this without X).
Findings so far:
- Linux must know which keyboard I'm typing on to support different layouts for multiple keyboards simultaneously.
xinput→ list.c →
XIQueryDeviceprovides device IDs usable by
xevdon't print keyboard IDs.
xinput list-props $IDshows where keyboard events are sent. However, using code from another answer it seems this device doesn't print anything to identify the keyboard.
One almost possible solution is to run
xinput --test <ID> &for each keyboard ID and see which one returns something first. The problem with that is figuring out which "keyboards" are actually keyboards:
$ xinput | grep keyboard ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Power Button id=8 [slave keyboard (3)] ↳ Sleep Button id=9 [slave keyboard (3)] ↳ WebCam SC-13HDL10931N id=10 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]