スクリプト用にudev経由で/ dev / hidraw#を取得


0

だから、私はlogitech g710 gkeysをデフォルトの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())

私は何が悪いのかについて深刻な損失に直面しています。

回答:


0

さて、を使用するには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"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.