udevルールは新しいデバイス属性を生成できますか?

udevルールは新しいデバイス属性を生成できますか?

属性を生成するためのudevルールを作成しました/etc/udev/rules.d/99-backlight-scale.rules

ACTION=="add", \
KERNEL=="amdgpu_bl1", \
SUBSYSTEM=="backlight", \
DEVPATH=="/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card1/card1-eDP-1/amdgpu_bl1", \
ENV{GSD_BACKLIGHT_SCALE}="non-linear"

udevadm test /sys/class/backlight/amdgpu_bl1属性を作成する必要があると言います。

DEVPATH=/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card1/card1-eDP-1/amdgpu_bl1
ACTION=add
SUBSYSTEM=backlight
TAGS=:seat:systemd:
CURRENT_TAGS=:seat:systemd:
ID_PATH=pci-0000:03:00.0
ID_PATH_TAG=pci-0000_03_00_0
ID_FOR_SEAT=backlight-pci-0000_03_00_0
GSD_BACKLIGHT_SCALE=non-linear
SYSTEMD_WANTS=systemd-backlight@backlight:amdgpu_bl1.service
USEC_INITIALIZED=23289223
Unload kernel module index.
Unloaded link configuration context.

ただし、再起動後、その属性は出力に表示されませんudevadm info --path=/sys/class/backlight/amdgpu_bl1 --query=property

DEVPATH=/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card1/card1-eDP-1/amdgpu_bl1
SUBSYSTEM=backlight
USEC_INITIALIZED=23289223
NVME_HOST_IFACE=none
ID_PATH=pci-0000:03:00.0
ID_PATH_TAG=pci-0000_03_00_0
ID_FOR_SEAT=backlight-pci-0000_03_00_0
SYSTEMD_WANTS=systemd-backlight@backlight:amdgpu_bl1.service
TAGS=:systemd:seat:
CURRENT_TAGS=:systemd:seat:

編集:次のようにdevpath行を完全に削除しました。アーチウィキのこのセクション。現在のルールは

ACTION=="add", \
KERNEL=="amdgpu_bl1", \
SUBSYSTEM=="backlight", \
ENV{GSD_BACKLIGHT_SCALE}="non-linear"

しかし、まだ動作しません。

別のudevルールを作成し、ファイルに書き込んで実行中であることを確認しようとしました。ACTION=="add", KERNEL=="amdgpu_bl1", SUBSYSTEM=="backlight", RUN+="/bin/sh -c 'echo applied > /home/basilmari/udev-debug.log'" "実際に働く。

では、udevルールは最初にデバイスプロパティを作成できますか?これを明確に説明する資料が見つかりませんでした。

答え1

DEVPATH または DEVNAME を ID 確認として使用しないでください。変更されることがあります! - 少なくとも - 自分が何をしているのか正確に知らなければ。 (非専門家)

編集:BTW、と入力すると、udevadm info /sys[DEVPATH]DEVPATHは環境変数を意味するプレフィックスEの下に表示されます。ENV{DEVPATH}==

実際のDEVPATHとして実行すると、udevadm test /sys[DEVPATH]環境属性が割り当てられているとマークされますが、再起動するとDEVPATHが変更され、一致を取得できず、属性は割り当てられません。たぶんこれはあなたの状況かもしれません。見たらhttps://www.linux.org/docs/man7/udev.html、udevルールの$ devpath、%pが実際のDEVPATHに展開され、$ devnode、%Nが実際のDEVNAME、デバイスのカーネル、またはudev設定に展開されていることがわかります。

関連情報