Özel çekirdek tarama kodlarını bırakarak Linux çekirdeği


16

Modern bir bilgisayarda kullanmak için uyarladığım eski bir IBM 122 anahtar model M klavyem var. Kodlama yapmak ve şeylerin USB tarafını işlemek için bir Teensy 2.0 kullanıyorum. Firmware'i Humble Hacker klavye projesinden ödünç aldım ( https://github.com/humblehacker/keyboard ) ve ekstra yapılandırmayı yapı yapılandırmasına ekledim. Çok uzak çok iyi.

Tüm "normal" tuşlar çalışır, ancak çekirdek fazladan tuşları ( F13- F24vb.) Düşürüyor gibi görünür .

Çalıştırıldığında /lib/udev/keymap -i input/event0tüm normal tuşların tarama kodları gösterilir, ancak fazladan tuşlar için hiçbir şey gösterilmez.

Koşu wiresharkpaketine o USB bağlantı noktası gösteren yakalamak klavye gönderme IS tarama kodlarını, ancak çekirdek sadece ilkesine onları düşüyorsa gibi görünüyor.

Bu çekirdek sürücüleri sadece beklemiyor tarama kodları teslim değil bir şey gibi hissediyorum.

Bir .hyerde çekirdek kaynağındaki bazı dosyalarda bir tür "ana" anahtar haritası olacağını düşünürdüm , ama şimdiye kadar onu bulma çabalarımda başarılı olamadım.

X'teki ekstra anahtarları eşlemekten sormuyorum, benden daha önce olduğu gibi. Bu düşük seviyeli, görünüşte çekirdekle ilgili bir problem. Şimdilik X'i hiç kullanmayacağım. İhtiyacım olan, tarama kodlarının çalıştığımda görünmesi /lib/udev/keymap -iiçin gerisini oradan yapabilirim.


Bunun işe yaramadığını biliyorum ama: Neden Teensy kullanıyorsunuz? Bu klavye düz bir PS2 / USB adaptörüyle çalışmalıdır.
goldilocks

Klavye eski bir IBM terminalinden geldi, PS / 2 uyumlu bir protokol kullanmıyor.
user2543941

Vay. Gerçekten sürücü üzerinde olay (son bölümünde de bakabilirsiniz geçmediğine da olabilir burada ). Bunun evtestyerine deneyebilirsin /lib/udev/keymap -i, eğer bu farklı gelirse dunno.
goldilocks

1
evtest ayrıca ekstra anahtarlar kullanıldığında hiçbir şey göstermez.
user2543941

1
Belki bu anahtarları kullanmak istiyorsanız, projeniz biraz daha büyüdü, lol. Bir klavye sürücüsü yazmakla ilgili en zor şey API'yi öğrenmek olacak, aksi takdirde çok karmaşık görünmüyorlar. Bir süredir çekirdek şeyler yapmadım, ama bu: LDD3 hala 3.x için geçerli, sanırım.
goldilocks

Yanıtlar:


1

Çekirdek tuhaf tarama kodlarını görür ve bırakır. Bu tarama kodları değerlerini alıp donanım veritabanı dizinini güncelleştirmeye çalışırdım. Kısacası plan şu:

  • kodları dmesg çıktısından al - bilinmeyen tuş koduna basıldığında dmesg böyle bir şey çıkarmalıdır:

    Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0)
    

a0 kod değeri.

  • özel anahtar kodu eşleme dosyası yarat. Örnekler ve yardım varsayılan dosyadadır
    ( /usr/lib/udev/hwdb.d/60-keyboard.hwdbArch için diğer dağıtımlarda farklı olabilir).

  • komutları çalıştırarak donanım veritabanını güncelleyin ve tetikleyin:

    > udevadm hwdb --update
    > udevadm trigger /dev/input/eventXX
    

burada eventXXklavyenize karşılık gelir (çalıştırarak alabilirsiniz evtest). Ayrıca tetiklemek yerine yeniden başlatabilirsiniz.

Bakılacak Arch wiki ve daha detaylı bilgi için varsayılan anahtar kodu eşleme dosyasının (veya dağıtım belgelerinde değil Arch ise).

Bu, güvenilir ve basit bir yöntemdir, çekirdek düzeyinde eşleme yapar, böylece görüntüleme sunucusu, DE vb.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.