~ »»» sudo micro /usr/lib/udev/rules.d/81-hid-bpf.rules
[sudo] password for deevad:
~ »»»
sudo udevadm control --reload
~ »»» udev-hid-bpf list-devices
devices:
- syspath: "/sys/bus/hid/devices/0003:28BD:096A.000B"
name: "XPPen Artist Pro 19(Gen2)"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x28BD, 0x096A)"
- syspath: "/sys/bus/hid/devices/0003:28BD:0947.0006"
name: "UGTABLET Deco 01 V3"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x28BD, 0x0947)"
- syspath: "/sys/bus/hid/devices/0003:046D:C52F.0003"
name: "Logitech USB Receiver"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x046D, 0xC52F)"
- syspath: "/sys/bus/hid/devices/0003:28BD:0947.0004"
name: "UGTABLET Deco 01 V3"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x28BD, 0x0947)"
- syspath: "/sys/bus/hid/devices/0003:413C:2113.0007"
name: "Dell KB216 Wired Keyboard"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x413C, 0x2113)"
- syspath: "/sys/bus/hid/devices/0003:28BD:096A.000C"
name: "XPPen Artist Pro 19(Gen2)"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x28BD, 0x096A)"
- syspath: "/sys/bus/hid/devices/0003:046D:4057.0009"
name: "Logitech B330/M330/M3"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE, 0x046D, 0x4057)"
- syspath: "/sys/bus/hid/devices/0003:28BD:096A.000A"
name: "XPPen Artist Pro 19(Gen2)"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x28BD, 0x096A)"
- syspath: "/sys/bus/hid/devices/0003:28BD:0947.0005"
name: "UGTABLET Deco 01 V3"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x28BD, 0x0947)"
- syspath: "/sys/bus/hid/devices/0003:046D:C52F.0002"
name: "Logitech USB Receiver"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x046D, 0xC52F)"
- syspath: "/sys/bus/hid/devices/0003:413C:2113.0008"
name: "Dell KB216 Wired Keyboard"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x413C, 0x2113)"
- syspath: "/sys/bus/hid/devices/0003:17A0:0310.0001"
name: "Samson Technologies Samson Meteor Mic"
device entry: "HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 0x17A0, 0x0310)"
~ »»» sudo udevadm test /sys/bus/hid/devices/0003:28BD:096A.000A
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
=== trie on-disk ===
tool version: 252
file size: 13303849 bytes
header size 80 bytes
strings 2705537 bytes
nodes 10598232 bytes
Loading kernel module index.
Found cgroup2 on /sys/fs/cgroup/, full unified hierarchy
Found container virtualization none.
Using default interface naming scheme 'v252'.
Parsed configuration file "/usr/lib/systemd/network/99-default.link"
Parsed configuration file "/usr/lib/systemd/network/73-usb-net-by-mac.link"
Created link configuration context.
Reading rules file: /usr/lib/udev/rules.d/39-usbmuxd.rules
Reading rules file: /usr/lib/udev/rules.d/40-usb-media-players.rules
Reading rules file: /usr/lib/udev/rules.d/40-usb_modeswitch.rules
Reading rules file: /usr/lib/udev/rules.d/50-firmware.rules
Reading rules file: /usr/lib/udev/rules.d/50-udev-default.rules
Reading rules file: /usr/lib/udev/rules.d/55-Argyll.rules
/usr/lib/udev/rules.d/55-Argyll.rules:139 Found builtin command 'usb_id --export %p' for IMPORT, replacing attribute
Reading rules file: /usr/lib/udev/rules.d/55-dm.rules
Reading rules file: /usr/lib/udev/rules.d/60-autosuspend.rules
Reading rules file: /usr/lib/udev/rules.d/60-block.rules
Reading rules file: /usr/lib/udev/rules.d/60-cdrom_id.rules
Reading rules file: /usr/lib/udev/rules.d/60-ddcutil.rules
Reading rules file: /usr/lib/udev/rules.d/60-drm.rules
Reading rules file: /usr/lib/udev/rules.d/60-evdev.rules
Reading rules file: /usr/lib/udev/rules.d/60-fido-id.rules
Reading rules file: /usr/lib/udev/rules.d/60-i2c-tools.rules
Reading rules file: /usr/lib/udev/rules.d/60-infiniband.rules
Reading rules file: /usr/lib/udev/rules.d/60-input-id.rules
Reading rules file: /usr/lib/udev/rules.d/60-libgphoto2-6.rules
Reading rules file: /usr/lib/udev/rules.d/60-libopenni2-0.rules
Reading rules file: /usr/lib/udev/rules.d/60-libsane1.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-alsa.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-input.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-dm.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-v4l.rules
Reading rules file: /usr/lib/udev/rules.d/60-sensor.rules
Reading rules file: /usr/lib/udev/rules.d/60-serial.rules
Reading rules file: /usr/lib/udev/rules.d/60-tpm-udev.rules
Reading rules file: /usr/lib/udev/rules.d/61-kde-bluetooth-rfkill.rules
Reading rules file: /usr/lib/udev/rules.d/64-btrfs.rules
Reading rules file: /usr/lib/udev/rules.d/64-xorg-xkb.rules
Reading rules file: /usr/lib/udev/rules.d/65-libwacom.rules
Reading rules file: /usr/lib/udev/rules.d/69-cd-sensors.rules
Reading rules file: /usr/lib/udev/rules.d/69-libmtp.rules
Reading rules file: /usr/lib/udev/rules.d/69-wacom.rules
Reading rules file: /usr/lib/udev/rules.d/70-camera.rules
Reading rules file: /usr/lib/udev/rules.d/70-joystick.rules
Reading rules file: /usr/lib/udev/rules.d/70-memory.rules
Reading rules file: /usr/lib/udev/rules.d/70-mouse.rules
Reading rules file: /usr/lib/udev/rules.d/70-power-switch.rules
Reading rules file: /usr/lib/udev/rules.d/70-printers.rules
Reading rules file: /usr/lib/udev/rules.d/70-touchpad.rules
Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules
Reading rules file: /usr/lib/udev/rules.d/71-ipp-usb.rules
Reading rules file: /usr/lib/udev/rules.d/71-seat.rules
Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules
Reading rules file: /usr/lib/udev/rules.d/73-special-net-names.rules
Reading rules file: /usr/lib/udev/rules.d/75-net-description.rules
Reading rules file: /usr/lib/udev/rules.d/75-probe_mtd.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-broadmobi-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-cinterion-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-dell-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-dlink-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-ericsson-mbm.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-fibocom-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-foxconn-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-gosuncn-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-haier-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-huawei-net-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-linktop-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-longcheer-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-mtk-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-nokia-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-qcom-soc.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-qdl-device-blacklist.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-quectel-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-sierra.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-simtech-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-telit-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-tplink-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-ublox-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-x22x-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/77-mm-zte-port-types.rules
Reading rules file: /usr/lib/udev/rules.d/78-sound-card.rules
Reading rules file: /usr/lib/udev/rules.d/80-debian-compat.rules
Reading rules file: /usr/lib/udev/rules.d/80-drivers.rules
Reading rules file: /usr/lib/udev/rules.d/80-ifupdown.rules
Reading rules file: /usr/lib/udev/rules.d/80-iio-sensor-proxy.rules
Reading rules file: /usr/lib/udev/rules.d/80-libinput-device-groups.rules
Reading rules file: /usr/lib/udev/rules.d/80-mm-candidate.rules
Reading rules file: /usr/lib/udev/rules.d/80-net-setup-link.rules
Reading rules file: /usr/lib/udev/rules.d/80-udisks2.rules
Reading rules file: /usr/lib/udev/rules.d/81-hid-bpf.rules
Reading rules file: /usr/lib/udev/rules.d/81-net-dhcp.rules
Reading rules file: /usr/lib/udev/rules.d/84-nm-drivers.rules
Reading rules file: /usr/lib/udev/rules.d/85-hwclock.rules
Reading rules file: /usr/lib/udev/rules.d/85-nm-unmanaged.rules
Reading rules file: /usr/lib/udev/rules.d/90-alsa-restore.rules
Reading rules file: /usr/lib/udev/rules.d/90-bolt.rules
Reading rules file: /usr/lib/udev/rules.d/90-console-setup.rules
Reading rules file: /usr/lib/udev/rules.d/90-fwupd-devices.rules
Reading rules file: /usr/lib/udev/rules.d/90-libgpod.rules
Reading rules file: /usr/lib/udev/rules.d/90-libinput-fuzz-override.rules
Reading rules file: /usr/lib/udev/rules.d/90-nm-thunderbolt.rules
Reading rules file: /usr/lib/udev/rules.d/90-pulseaudio.rules
Reading rules file: /usr/lib/udev/rules.d/95-cd-devices.rules
Reading rules file: /usr/lib/udev/rules.d/95-dm-notify.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-hid.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-wup.rules
Reading rules file: /usr/lib/udev/rules.d/96-e2scrub.rules
Reading rules file: /usr/lib/udev/rules.d/97-hid2hci.rules
Reading rules file: /etc/udev/rules.d/99-hid-bpf-0010-XPPen__ArtistPro16Gen2.rules
Reading rules file: /etc/udev/rules.d/99-hid-bpf-10-XPPen__ArtistPro16Gen2.rules
Reading rules file: /usr/lib/udev/rules.d/99-libsane1.rules
Reading rules file: /usr/lib/udev/rules.d/99-systemd.rules
0003:28BD:096A.000A: /usr/lib/udev/rules.d/50-udev-default.rules:20 Importing properties from results of builtin command 'hwdb --subsystem=hid'
0003:28BD:096A.000A: hwdb modalias key: "hid:b0003g0001v000028BDp0000096A"
0003:28BD:096A.000A: No entry found from hwdb.
0003:28BD:096A.000A: /usr/lib/udev/rules.d/50-udev-default.rules:20 Failed to run builtin 'hwdb --subsystem=hid': No data available
0003:28BD:096A.000A: /usr/lib/udev/rules.d/80-drivers.rules:5 RUN 'kmod load'
0003:28BD:096A.000A: /usr/lib/udev/rules.d/81-hid-bpf.rules:5 Importing properties from results of builtin command 'hwdb --subsystem=hid --lookup-prefix=hid-bpf:'
0003:28BD:096A.000A: hwdb modalias key: "hid:b0003g0001v000028BDp0000096A"
0003:28BD:096A.000A: /usr/lib/udev/rules.d/81-hid-bpf.rules:7 RUN '/usr/local/bin/udev-hid-bpf add $sys$devpath'
0003:28BD:096A.000A: sd-device: Created db file '/run/udev/data/+hid:0003:28BD:096A.000A' for '/devices/pci0000:00/0000:00:08.1/0000:0a:00.3/usb3/3-2/3-2:1.0/0003:28BD:096A.000A'
DEVPATH=/devices/pci0000:00/0000:00:08.1/0000:0a:00.3/usb3/3-2/3-2:1.0/0003:28BD:096A.000A
DRIVER=hid-generic
HID_ID=0003:000028BD:0000096A
HID_NAME=XPPen Artist Pro 19(Gen2)
HID_PHYS=usb-0000:0a:00.3-2/input0
HID_UNIQ=00000
MODALIAS=hid:b0003g0001v000028BDp0000096A
ACTION=add
SUBSYSTEM=hid
.HID_BPF=1
HID_BPF_T_015=0019-XPPen__ArtistPro16Gen2.bpf.o
HID_BPF_T_016=0020-XPPen__ArtistPro16Gen2.bpf.o
USEC_INITIALIZED=8999745
run: 'kmod load'
run: '/usr/local/bin/udev-hid-bpf add /sys/devices/pci0000:00/0000:00:08.1/0000:0a:00.3/usb3/3-2/3-2:1.0/0003:28BD:096A.000A'
Unload kernel module index.
Unloaded link configuration context.
~ »»» cat /usr/lib/udev/rules.d/81-hid-bpf.rules
ACTION!="add|remove|bind", GOTO="hid_bpf_end"
SUBSYSTEM!="hid", GOTO="hid_bpf_end"
# We lookup the hwdb during bind to set the property, but we don't do anything else
IMPORT{builtin}="hwdb --subsystem=hid --lookup-prefix=hid-bpf:"
#ACTION=="add", ENV{.HID_BPF}=="1", RUN{program}+="@@BINDIR@@/udev-hid-bpf add $sys$devpath"
ACTION=="add", ENV{.HID_BPF}=="1", RUN{program}+="/usr/local/bin/udev-hid-bpf add $sys$devpath"
#ACTION=="remove", ENV{.HID_BPF}=="1", RUN{program}+="@@BINDIR@@/udev-hid-bpf remove $sys$devpath"
ACTION=="remove", ENV{.HID_BPF}=="1", RUN{program}+="/usr/local/bin/udev-hid-bpf remove $sys$devpath"
LABEL="hid_bpf_end"
~ »»»