Skip to content

Instantly share code, notes, and snippets.

@joshuaaguilar20
Created July 23, 2020 20:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joshuaaguilar20/e99194b314f6d4f403ada59aa7678244 to your computer and use it in GitHub Desktop.
Save joshuaaguilar20/e99194b314f6d4f403ada59aa7678244 to your computer and use it in GitHub Desktop.
logitech for linux

Logitech documents

I have learned a bit from the kernel source code hid-logitech-dj, but the "official" Logitech specification (HID++ 1.0) was much more useful. These documents can be found on https://lekensteyn.nl/files/logitech/.

Debuggers usbmon.awk - initial debugging tool used for tapping usbmon from debugfs hidraw.c - successor of usbmon.awk that can parse packets of usb payload. read-dev-usbmon.c - Reads data from /dev/usbmonX and show interpreted data in a more human-readable way.

Note: as a quick-n-dirty hack, I included hidraw.c at some point into the read-dev-usbmon program. Otherwise, I had no way to show the difference between a send or receive packet without adding to the same stdout stream. If I included it in the stderr pipe, then it would be interleaved with stdout in an unpredictable manner. This means that hidraw.c is currently unusable, it does not process data correctly.

Usage of USB debugger:

lsusb -d 046d:c52b
j@localhost: Bus 001 .."  
  1. Use lsusb -d 046d:c52b to determine the bus number. If the output is "Bus 001 ..", your usb monitor device is at /dev/usbmon1.

    Usage of USB debugger:

2. sudo chgrp $USER /dev/usbmon1
3. sudo chmod g+r /dev/usbmon1
4. ./read-dev-usbmon /dev/usbmon

Pairing tool (ltunify) ltunify allows you to pair new devices, unpair existing devices or view information for those devices. In order to build the ltunify binary and install it to $HOME/bin/ltunify:

    make ltunify
    make install-home

If you intend to package ltunify or otherwise install it system-wide with a udevrule, you can use:

    make ltunify
    make install DESTDIR=$pkgdir bindir=/usr/bin udevrulesdir=/lib/udev/rules.d
    ```

Once installed, run `ltunify --help` for available options.

Usage of the pairing tool is pretty straight-forward. Example session:

    $ ./ltunify list
    /dev/hidraw0: Permission denied
    Logitech Unifying Receiver device is not accessible.
    Try running this program as root or enable read/write permissions
    for /dev/hidraw0
    $ sudo chgrp $USER /dev/hidraw0 && sudo chmod g+rw /dev/hidraw0 
    $ ./ltunify list
    Devices count: 1
    Connected devices:
    idx=1   Mouse   M525
    $ ./ltunify info 1
    Device index 1
    Mouse
    Name: M525
    Wireless Product ID: 4013
    Serial number: DAFA335E
    Device was unavailable, version information not available.
    $ ./ltunify unpair 1
    Device 0x01 Mouse successfully unpaired
    $ ./ltunify list
    Devices count: 0
    Connected devices:
    $ ./ltunify pair
    Please turn your wireless device off and on to start pairing.
    Found new device, id=0x01 Mouse
    $ ./ltunify list
    Devices count: 1
    Connected devices:
    idx=1   Mouse   M525

TODO
- organize code in multiple files
- simplify code
- HID++ 2.0 debugging (transparent if possible)

~ Peter Wu <lekensteyn@gmail.com>
z
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment