스크립트용 udev를 통해 /dev/hidraw# 가져오기

스크립트용 udev를 통해 /dev/hidraw# 가져오기

Logitech G710 G 키를 기본값인 1-6에서 F13-18로 다시 매핑하는 작은 Python 스크립트릿이 있습니다. 이는 수동으로 호출할 때 잘 작동합니다. 예를 들면 다음과 같습니다.

./script.py /dev/hidraw3

내가 겪고 있는 문제는 장치 플러그인에서 스크립트를 자동 실행하는 것입니다. 현재 나는udev이론적으로는 작동해야 하지만 작동하지 않는 규칙입니다.

SUBSYSTEM=="hidraw", KERNEL=="hidraw*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c24d", ATTRS{bInterfaceNumber}=="01", ACTION=="add", RUN+="/usr/local/bin/g710.py %k"

전체 스크립트:

#!/usr/bin/python3
import sys
import hid

def bindkeys(node):
    board = hid.device()
    board.open_path(sys.argv[1].encode())
    board.send_feature_report([9, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0, 0, 0, 0, 0, 0])
    print("script fired")
    print(board.get_manufacturer_string())
    board.close()

def main(args):
    bindkeys(args)

if __name__ == '__main__':
    main(sys.argv[1].encode())

뭐가 문제 야?

답변1

글쎄, 은 에서 사용하기에는 SUBSYSTEM=="hidraw"너무 멀리 떨어져 있는 것 같아서 적절한 hidraw 노드 자체를 찾고 적절한 장치가 삽입될 때만 실행되도록 스크립트를 다시 도구화했습니다.SUBSYSTEM=="usb"ATTRS{bInterfaceNumber}

#!/usr/bin/python3
import hid

def bindkeys(node):
    board = hid.device()
    board.open_path(node)
    board.send_feature_report([9, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0, 0, 0, 0, 0, 0])
    board.close()

def find_g710():
    for device in hid.enumerate():
        if device['vendor_id'] == 0x046d and device['product_id'] == 0xc24d and device['interface_number'] == 1:
            return device['path']

def main():
    g710 = find_g710()
    bindkeys(g710)

if __name__ == '__main__':
    main()

다음 udev 규칙을 사용합니다.

SUBSYSTEM=="hidraw", ACTION=="add", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c24d", RUN+="/usr/local/bin/g710.py"

관련 정보