Sıklıkla birden fazla klavyenin yüklü olduğu eşleştirme istasyonlarında çalışıyorum. Ben kullanabilirsiniz setxkbmap
ile -device <ID>
(bir kullanarak belirli klavye için düzenini ayarlamak için kimliğini danxinput
), ancak çoğu zaman ben de değilim hangi klavye belli değil. Her iki klavyeyi de denemekten kaçınmak daha iyi olurdu, bu yüzden bu bilgiyi almak için hızlı bir araç yazmak istiyorum setxkbmap
. Aşağıdaki gibi tipik bir kullanım durumu beklenir:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
Hangi arayüz Linux'ta bu bilgileri sağlar? İdeal olarak X olmadan çalışması gerekir, ancak bu bir gereklilik değildir (bunu X olmadan destekleyen birçok araç yoktur).
Şimdiye kadar olan bulgular:
- Linux , aynı anda birden çok klavye için farklı düzenleri desteklemek için hangi klavyeyi yazdığımı bilmelidir.
xinput
→ list.c →list_xi2
→XIQueryDevice
, tarafından kullanılabilen cihaz kimlikleri sağlarsetxkbmap
.showkey
vexev
klavye kimlikleri baskı yoktur.xinput list-props $ID
klavye olaylarının nereye gönderileceğini gösterir . Ancak, başka bir cevabın kodunu kullanarak bu cihazın klavyeyi tanımlamak için hiçbir şey yazdırmıyor gibi görünüyor.Neredeyse olası bir çözüm,
xinput --test <ID> &
her klavye kimliği için çalıştırmak ve hangisinin önce bir şey döndürdüğünü görmek. Sorun, hangi "klavyelerin" aslında klavyeler olduğunu bulmaktır :$ 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
ve ilgili klavyede bir tuşa basarsanız, "çöp" ifadesinin göründüğünü görmelisiniz, böylece tuş basışlarınız gerçekten diğerlerine değil, bir dev dosyasına yönlendirilir.