Bagaimana cara mengubah keymap satu perangkat (Logitech presenter)?

20

Presenter Logitech R400 saya mengirimkan kode kunci berikut:

keycode 112 (keysym 0xff55,  Prior) [page up]
keycode 117 (keysym 0xff56,   Next) [page down]
keycode  60 (keysym   0x2e, period)
keycode  71 (keysym 0xffc2,     F5)
keycode   9 (keysym 0xff1b, Escape)

Pada dasarnya, saya ingin menggunakan presenter ini untuk mengontrol Banshee dari jarak jauh, jadi saya ingin memetakan kembali Priorke B, Nextuntuk N, dan seterusnya.

Bagaimana saya bisa mengubah peta tombol untuk perangkat ini saja (karena saya tentu tidak ingin memetakan kembali kode-kode kunci secara global)?

htorque
sumber
AFAIU "slave pointer" berarti itu adalah mouse, bukan keyboard. Anda tidak dapat memuat keymap ke mouse. Apakah mereka benar-benar satu-satunya perangkat yang ada dalam daftar xinput?
Marius Gedminas
@MariusGedminas saya harus melalui perangkat / dev / input / eventX dan event5 adalah presenter, jadi sepertinya "keyboard".
htorque

Jawaban:

15

Saya tidak pernah melakukan itu tetapi saya pikir Anda perlu membuat file keymap /lib/udev/keymaps/dan menambahkan aturan untuk perangkat Anda/lib/udev/rules.d/95-keymap.rules


Detail:

  • Udev keymap memetakan kode memindai kode kunci, jadi Anda perlu menemukan keduanya untuk membuat file keymap. Untuk menemukan kode pindai, jalankan yang berikut ini dan tekan tombol pada perangkat:

    sudo /lib/udev/keymap -i input/event5
    

    Anda mungkin perlu mencoba nomor yang berbeda untuk acara * . Outputnya akan terlihat seperti ini:

    scan code: 0x70037   key code: dot
    scan code: 0x70029   key code: esc
    scan code: 0x7003E   key code: f5
    scan code: 0x7004B   key code: pageup
    scan code: 0x7004E   key code: pagedown
    

    Daftar kode kunci dapat ditemukan di sini .

    Sekarang buat file keymap (Saya menyimpannya sebagai / lib / udev / keymaps / logitech-r400 ):

    0x70037 brightnessdown
    0x70029 brightnessup
    0x7003E brightnessdown
    0x7004B brightnessup
    0x7004E brightnessdown
    

    Tidak melakukan apa pun yang bermanfaat - hanya sebuah tes untuk dengan mudah melihat apakah itu berhasil.

  • Untuk menguji keymap baru sementara, jalankan:

    sudo /lib/udev/keymap input/event5 /lib/udev/keymaps/logitech-r400
    

    yang akan menghasilkan output seperti ini:

    Remapped scancode 0x70037 to 0xe0 (prior: 0x34)
    Remapped scancode 0x70029 to 0xe1 (prior: 0x01)
    Remapped scancode 0x7003e to 0xe0 (prior: 0x3f)
    Remapped scancode 0x7004b to 0xe1 (prior: 0x68)
    Remapped scancode 0x7004e to 0xe0 (prior: 0x6d)
    

    Tombol sekarang harus mengubah kecerahan.

  • Jika Anda ingin membuat perubahan itu permanen, Anda perlu menambahkan aturan udev untuk /lib/udev/rules.d/95-keymap.rulesyang menerapkan file keymap ke perangkat.

    1. Buka file: gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. Di bagian bawah file, tetapi sebelum LABEL="keyboard_end"baris, tambahkan:

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. Simpan, tutup, dan setelah reboot tombol harus mengubah kecerahan.

Florian Diesch
sumber
Oh, bagaimana saya bisa melupakannya (/ lib / udev / keymaps / zepto-znote dikontribusikan oleh saya: D). Saya nanti akan menambahkan lebih banyak tentang bagaimana saya membuatnya bekerja untuk jawaban Anda.
htorque
Hanya ingin menambahkan ke jawaban ini bahwa Anda dapat membidik apa "eventX" keyboard Anda mungkin dengan menjalankan /lib/udev/findkeyboards. Itu akan mencantumkan semua keyboard yang terpasang saat ini sehingga Anda tidak perlu mencoba banyak. Logitech r400 muncul sebagai "keyboard USB: input / event11" untuk saya.
jat255
Jawaban yang bagus, tetapi bagaimana cara menemukan ID_VENDOR dan idProduct untuk digunakan? Saya mencoba /sys/class/dmi/id/sys_vendordan /sys/class/dmi/id/product_nametetapi tidak berhasil.
PutzKipa
2
/lib/udev/keymapdan /lib/udev/findkeyboardstidak ada lagi di 13.10. forum.ubuntu-fr.org/viewtopic.php?id=1395051 mengatakan untuk menggunakan evtest sebagai gantinya.
Stéphane Gourichon
6
Halo @tortor, bisakah Anda memperbarui jawaban dengan cara baru? Di Ubuntu Trusty, semua file ini tidak ada lagi. Anda adalah satu-satunya yang saya lihat di internet memiliki masalah yang sama.
londumas
4

Saya di Ubuntu 16.04. Saya membuat panduan di sini

Mendeteksi dengan evtest

sudo evtest

Lihatlah daftar perangkat:

/dev/input/event0:  Lid Switch
/dev/input/event1:  Power Button
/dev/input/event2:  Sleep Button
/dev/input/event3:  Power Button
/dev/input/event4:  AT Translated Set 2 keyboard
/dev/input/event5:  Video Bus
/dev/input/event6:  USB Optical Mouse
/dev/input/event7:  AlpsPS/2 ALPS DualPoint Stick
/dev/input/event8:  AlpsPS/2 ALPS DualPoint TouchPad
/dev/input/event9:  Logitech USB Receiver
/dev/input/event10: Logitech USB Receiver
/dev/input/event11: HDA Intel PCH Dock Mic
/dev/input/event12: HDA Intel PCH Headset Mic
/dev/input/event13: HDA Intel PCH Dock Line Out
/dev/input/event14: HDA Intel PCH Headphone
/dev/input/event15: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event16: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event18: Integrated Webcam
/dev/input/event19: Dell WMI hotkeys
Select the device event number [0-19]: 9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc52d version 0x111
Input device name: "Logitech USB Receiver"

Mengambil yang pertama "Penerima USB Logitech", di sini ia memiliki acara id 9.

Testing ... (interrupt to exit)

OK sekarang evtest ingin input, cukup klik pada tombol remote Logitech, saya mendapatkan ini (disederhanakan):

[>] value 7003e (KEY_PRESENTATION)
[>] value 70029 (KEY_PRESENTATION)
[ ] value 70037 (KEY_DISPLAYTOGGLE)
 <  value 7004b (KEY_PAGEUP)
 >  value 7004e (KEY_PAGEDOWN)

Catatan: Saya menemukan setelah mengklik beberapa kali pada [>] memberikan 7003e, kemudian 70029, lalu 7003e, dll. Saya tidak tahu mengapa.

Mengubah konfigurasi udev

Sekarang kita memiliki kode input, mari kita lihat udev conf:

sudo gedit /lib/udev/hwdb.d/60-keyboard.hwdb

Cari "R400" dan ganti presentasi & displaytoggle dengan apa yang Anda inginkan, playpause & stopcd panah tombol:

# Logitech Presenter R400
evdev:input:b0003v046DpC52D*
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"   
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"  
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

Seperti disebutkan sebelumnya, karena 07003e & 070.029 adalah tombol yang sama, saya memberi mereka output yang sama up kunci. 7004b & 7004e tidak muncul di sini secara default, mungkin karena mereka adalah input PAGEUP & PAGEDOWN asli dan tidak terkait dengan "Logitech Presenter R400". Mari kita tambahkan mereka:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >  

Ini conf terakhir saya:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

Muat ulang aturan (baru)

sudo udevadm hwdb --update

Kemudian dengan menggunakan id acara yang sama yang kami pilih sebelumnya, di sini event id 9:

sudo udevadm trigger /dev/input/event9

Anda dapat memeriksa pemetaan baru ini di browser web, misalnya:

$('body').on('keydown', function(e){ console.log(e.key) })

Itu memberi saya:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight
Ssh-uunen
sumber
Saya telah membuat beberapa perbaikan kecil dalam panduan logitech-r400-remap.md asli Anda dari GitHub. Jangan ragu untuk mengubahnya atau mengeditnya ke dalam halaman web GitHub Anda jika Anda mau (tidak diperlukan atribusi kepada saya). Jawaban Anda dibatalkan karena jawaban itu hanya tautan menurut saya, jadi saya juga membatalkan unduhannya.
karel
Downotes telah dihapus, jadi sekarang jawaban Anda memiliki kesempatan untuk dipertimbangkan berdasarkan kemampuannya sendiri seperti jawaban lain di sini.
karel
1
Digunakan panduan Anda. Bekerja seperti pesona:)
Costa