Tôi thường xuyên làm việc trên các trạm ghép nối có cài đặt nhiều bàn phím. Tôi có thể sử dụng setxkbmap
với -device <ID>
thiết lập bố trí cho một bàn phím cụ thể (sử dụng một ID từxinput
), nhưng thường thì không rõ ràng mà bàn phím tôi đang ở. Sẽ tốt hơn để tránh qua lại khi thử cả hai bàn phím, vì vậy tôi muốn viết một công cụ nhanh để có được thông tin này setxkbmap
. Tôi mong đợi một trường hợp sử dụng điển hình như sau:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
Giao diện nào cung cấp thông tin này trên Linux? Lý tưởng nhất là nó hoạt động mà không có X, nhưng đó không phải là một yêu cầu (dường như không có nhiều công cụ hỗ trợ việc này mà không có X).
Những phát hiện cho đến nay:
- Linux phải biết bàn phím nào tôi đang gõ để hỗ trợ các bố cục khác nhau cho nhiều bàn phím cùng một lúc.
xinput
→ list.c →list_xi2
→XIQueryDevice
cung cấp ID thiết bị có thể sử dụng bởisetxkbmap
.showkey
vàxev
không in ID bàn phím.xinput list-props $ID
hiển thị nơi các sự kiện bàn phím được gửi . Tuy nhiên, sử dụng mã từ một câu trả lời khác , có vẻ như thiết bị này không in bất cứ thứ gì để nhận dạng bàn phím.Một giải pháp gần như có thể là chạy
xinput --test <ID> &
cho mỗi ID bàn phím và xem cái nào trả về cái gì trước. Vấn đề với đó là tìm ra "bàn phím" nào thực sự là bàn phím:$ 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)]
less -f /dev/input/eventX
và nhấn một phím trên bàn phím tương ứng, bạn sẽ thấy "rác" hiển thị, do đó, phím nhấn của bạn thực sự được hướng vào một tệp dev chứ không phải các tệp khác.