Mapping Laser Pointer Ugreen 80136 di Linux

Katanya, gunakan tunjangan sertifikasi untuk menunjang peningkatan kinerja diri. Jadilah akhirnya saya membeli laser pointer untuk membantu proses pembelajaran di kelas. Sebenarnya tidaklah mendesak untuk memiliki benda ini, but, why not?.

Sejujurnya jarang menampilkan presentasi, dan ketika perlu maka selama ini sudah tercukupi menggunakan KDEConnect.
Namun menggunakan KDEConnect dirasa merepotkan, pertama karena saya menggunakan GTK based desktop sementara ia aplikasi untuk desktop KDE yang akhirnya akan menarik banyak berkas KDE/Qt yang dibutuhkan. Kedua, KDEConnect menggunakan telepon genggam sebagai kendali presentasi. Jika sial tergelincir dari tangan, kemungkinan besar jadinya akan meratapi hape yang hancur.
Dan tentunya laser pointer yang tidak dimiliki hape.

Pilihan jatuh ke Ugreen 80136. Selain suka dengan desainnya, sejauh ini belum pernah dikecewakan oleh merek UGreen.
Alasan lainnya adalah karena di deskripsi toko dijelaskan bahwa menggunakan baterai AA. I hate integrated battery. Karena jika daya baterai habis maka kemungkinan besar perangkat tidak bisa dipakai akibat kesulitan mengganti baterainya. Sulit membuka perangkat karena tidak dirancang memakai baterai replaceable, juga sulit mencari suku cadang baterai.
But you know what? Ketika barang diterima, ternyata ia menggunakan baterai yang menyatu alias tidak bisa diganti. Damn.

Overall, lumayan puas dengan laser pointer ini. Plug and Play di Linux. Hanya memang tombol paling atas sekilas tidak berfungsi. Tidak kaget, karena di spesifikasi dijelaskan hanya bisa untuk Microsoft Office.

Namun ada masalah, ternyata pointer ini menggunakan UP dan DOWN untuk kendali. Mungkin tidak masalah untuk aplikasi presentasi, namun saya lebih sering menampilkan aplikasi yang navigasinya mayoritas LEFT dan RIGHT.
Dan karena aplikasi presentasi juga menerima LEFT serta RIGHT sebagai navigasi, mengapa tidak memetakan tombol pointer saja?

So, here we go…

  • Pertama, cari bustype, productid dan vendorid.

    Daftar perangkat USB yang terhubung ke komputer

    ~$ lsusb
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 004: ID 8087:0032 Intel Corp. AX210 Bluetooth
    Bus 001 Device 003: ID 046d:c534 Logitech, Inc. Unifying Receiver
    Bus 001 Device 002: ID 046d:c548 Logitech, Inc. Logi Bolt Receiver
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    
  • Colokkan receiver pointer ke komputer kemudian ulangi perintah tadi.

    ~$ lsusb
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 011: ID 1ea7:0066 SHARKOON Technologies GmbH [Mediatrack Edge Mini Keyboard]
    Bus 001 Device 004: ID 8087:0032 Intel Corp. AX210 Bluetooth
    Bus 001 Device 003: ID 046d:c534 Logitech, Inc. Unifying Receiver
    Bus 001 Device 002: ID 046d:c548 Logitech, Inc. Logi Bolt Receiver
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    

    Tampak bahwa perangkat pointer adalah:

    Bus 003 Device 004: ID 1ea7:0066 SHARKOON Technologies GmbH [Mediatrack Edge Mini Keyboard]
    

    Patut diingat bahwa bus USB mungkin berbeda antar port bergantung rancangan motherboard dari komputer. Misal pada ThinkPad x230 yang saya miliki terdapat dua buah bus untuk tiap USB port-nya, yaitu 001 dan 003.

  • Cari event dari pointer.

    Daftar event yang ada di /dev/input

    ls /dev/input/event* > /tmp/event
    

    Colok USB receiver pointer, ulangi perintah tadi dan tambahkan output ke berkas yang sama.

    ls /dev/input/event* >> /tmp/event
    

    Urutkan kemudian cari event yang beda. Itulah laser pointer kita.

    ~$ sort /tmp/event | uniq -u
    /dev/input/event23
    /dev/input/event24
    /dev/input/event25
    /dev/input/event26
    /dev/input/event27
    
  • Cari keymap untuk tiap tombol pointer.

    sudo apt install evtest
    

    Gunakan salah satu event tersebut pada langkah sebelumnya.
    Misal /dev/input/event23 tidak bereaksi, gunakan event berikutnya.

    sudo evtest /dev/input/event23
    

    Tekan semua tombol pada pointer (kecuali tombol laser).

    Event: time 1702368736.459692, type 17 (EV_LED), code 0 (LED_NUML), value 0
    Event: time 1702368736.459692, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70052
    Event: time 1702368736.459692, type 1 (EV_KEY), code 103 (KEY_UP), value 1
    Event: time 1702368736.459692, -------------- SYN_REPORT ------------
    ^[[AEvent: time 1702368736.515552, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70052
    Event: time 1702368736.515552, type 1 (EV_KEY), code 103 (KEY_UP), value 0
    Event: time 1702368736.515552, -------------- SYN_REPORT ------------
    Event: time 1702368737.851668, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70051
    Event: time 1702368737.851668, type 1 (EV_KEY), code 108 (KEY_DOWN), value 1
    Event: time 1702368737.851668, -------------- SYN_REPORT ------------
    ^[[BEvent: time 1702368737.907618, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70051
    Event: time 1702368737.907618, type 1 (EV_KEY), code 108 (KEY_DOWN), value 0
    Event: time 1702368737.907618, -------------- SYN_REPORT ------------
    Event: time 1702368740.131433, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7002b
    Event: time 1702368740.131433, type 1 (EV_KEY), code 15 (KEY_TAB), value 1
    Event: time 1702368740.131433, -------------- SYN_REPORT ------------
          Event: time 1702368740.187533, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7002b
    Event: time 1702368740.187533, type 1 (EV_KEY), code 15 (KEY_TAB), value 0
    Event: time 1702368740.187533, -------------- SYN_REPORT ------------
    

    Tampak bahwa scancode untuk pointer adalah:
    Tombol KEY_UP : 70052
    Tombol KEY_DOWN : 70051
    Tombol KEY_TAB : 7002b

  • Buat hardware database config.

    sudo nano /etc/udev/hwdb.d/99-ugreen-80136.hwdb
    

    Isi berdasarkan data yang diperoleh:
    b adalah bustype, yaitu 001 dan 003
    v adalah vendor id, yaitu 1ea7 (harus ditulis kapital, 1EA7)
    p adalah product id, yaitu 0066

    Isikan pula key mapping:

    • scancode 70052 yang tadinya UP kita jadikan RIGHT
    • scancode 70051 yang tadinya DOWN kita jadikan LEFT
    • scancode 7002b yang tadinya TAB kita jadikan F5
    evdev:input:b001v1EA7p0066
    evdev:input:b003v1EA7p0066
      KEYBOARD_KEY_70052=right
      KEYBOARD_KEY_70051=left
      KEYBOARD_KEY_7002b=f5
    
  • Buat udev rules.

    sudo nano /etc/udev/rules.d/99-ugreen-80136.rules
    

    Dan isikan data berikut:

    SUBSYSTEMS=="usb", ATTRS{idVendor}=="1ea7", ATTRS{idProduct}=="0066", IMPORT{builtin}="hwdb 'evdev:input:b001v1EA7p0066'", RUN{builtin}+="keyboard"
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="1ea7", ATTRS{idProduct}=="0066", IMPORT{builtin}="hwdb 'evdev:input:b003v1EA7p0066'", RUN{builtin}+="keyboard"
    
  • Muat rules anyar tersebut:

    sudo systemd-hwdb update
    sudo udevadm trigger /dev/input/event*
    

Nice. Kini laser pointer selain sebagai pengendali berkas presentasi, juga bisa untuk menavigasi aplikasi yang dikendalikan tombol kiri dan kanan. Nilai plus, tombol yang katanya hanya bisa untuk Microsoft Office kini juga bisa dimanfaatkan.