ฉันมักจะทำงานกับสถานีจับคู่ที่มีการติดตั้งคีย์บอร์ดหลายตัว ฉันสามารถใช้setxkbmap
กับ-device <ID>
การตั้งค่ารูปแบบสำหรับแป้นพิมพ์ที่เฉพาะเจาะจง (ใช้รหัสจากxinput
) แต่มักจะเป็นไม่ชัดเจนซึ่งแป้นพิมพ์ฉันที่ มันจะเป็นการดีกว่าถ้าคุณหลีกเลี่ยงการไปมาระหว่างคีย์บอร์ดทั้งสองแป้นดังนั้นฉันอยากจะเขียนเครื่องมือด่วนเพื่อรับข้อมูลsetxkbmap
นี้ ฉันคาดว่ากรณีการใช้งานทั่วไปดังต่อไปนี้:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
อินเทอร์เฟซใดให้ข้อมูลนี้บน Linux เป็นการดีที่มันควรจะทำงานโดยไม่มี X แต่นั่นไม่ใช่ข้อกำหนด (ดูเหมือนจะไม่มีเครื่องมือมากมายที่สนับสนุนสิ่งนี้หากไม่มี X)
การค้นพบจนถึง:
- Linux ต้องรู้ว่าฉันใช้แป้นพิมพ์ตัวใดเพื่อรองรับรูปแบบที่แตกต่างกันสำหรับแป้นพิมพ์หลายตัวพร้อมกัน
xinput
→ list.c →list_xi2
→ ให้รหัสอุปกรณ์ใช้งานได้โดยXIQueryDevice
setxkbmap
showkey
และxev
ไม่พิมพ์รหัสคีย์บอร์ดxinput list-props $ID
แสดงให้เห็นว่าเหตุการณ์ที่แป้นพิมพ์จะถูกส่ง อย่างไรก็ตามการใช้รหัสจากคำตอบอื่นดูเหมือนว่าอุปกรณ์นี้ไม่ได้พิมพ์อะไรเพื่อระบุแป้นพิมพ์วิธีแก้ปัญหาหนึ่งที่เกือบจะเป็นไปได้ก็คือการเรียกใช้
xinput --test <ID> &
สำหรับแป้นพิมพ์แต่ละรหัสและดูว่าจะส่งคืนสิ่งใดก่อน ปัญหาที่จะหาที่ "คีย์บอร์ด" มีจริงคีย์บอร์ด:$ 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
และกดปุ่มบนแป้นพิมพ์ที่สอดคล้องกันคุณควรเห็น "ขยะ" ปรากฏขึ้นดังนั้นการกดแป้นพิมพ์ของคุณจะถูกนำไปสู่ไฟล์ dev หนึ่งไฟล์ไม่ใช่ไฟล์อื่น ๆ