systemd-tmpfilesはどのように機能しますか?

systemd-tmpfilesはどのように機能しますか?

起動するたびに変更したい値です/sys/bus/usb/devices/4-3/power/wakeup(4-3によると、lsusbキーボードIDです)。

デフォルト値は次のとおりです。

# cat /sys/bus/usb/devices/4-3/power/wakeup
enabled

古典的な「オンライン」編集は期待どおりに機能します。

# echo disabled > /sys/bus/usb/devices/4-3/power/wakeup
# cat /sys/bus/usb/devices/4-3/power/wakeup
disabled

私はsystemdディストリビューションを使用しているので、使用したいと思います。「一時ファイル」を編集する体系的な方法

次のファイルを作成しました。

# cat /etc/tmpfiles.d/disable-usb-wakeup.conf 
w /sys/bus/usb/devices/4-3/power/wakeup - - - - disabled

ただし、起動するたびにこのファイルにデフォルト値(つまり有効)が残ります。

私は何が間違っていましたか?

編集する:

別のテストは次のとおりです。

# cat /etc/tmpfiles.d/scheduler.conf 
w /sys/block/sda/queue/scheduler - - - - deadline

これは素晴らしい作品です!開始すると、次のようになります。

# cat /sys/block/sda/queue/scheduler 
noop [deadline] cfq 

(デフォルトはcfqスケジューラです)

それではなぜこれはうまくいき、他のものはうまくいきませんか?

  • /sys/bus/usb/devices/4-3/power/wakeupへのシンボリックリンクなので/sys/devices/pci0000:00/0000:00:12.1/usb4/4-3/
  • /sys/bus/usb/devices/4-3/power/wakeup一言だけが含まれているので? (つまり、空白なし)

ベストアンサー1

tmpfiles.d私の考えでは、ここに行く道は正しくないと思います。あなたは本当にudevルールに従う必要があります。望むより:

udevadm info -a -p /sys/class/scsi_host/host*

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:11.0/ata1/host0/scsi_host/host0':
    KERNEL=="host0"
    SUBSYSTEM=="scsi_host"
    DRIVER==""
    ATTR{unchecked_isa_dma}=="0"
    ATTR{state}=="running"
    ATTR{cmd_per_lun}=="1"
...
    ATTR{ahci_host_version}=="10200"
    ATTR{prot_guard_type}=="0"
    ATTR{eh_deadline}=="off"
    ATTR{link_power_management_policy}=="max_performance"
    ATTR{host_busy}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:11.0/ata1/host0':
    KERNELS=="host0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""
...

親デバイスツリーを引き続き上に移動します。しかし、考えてみてください。上記の情報のみを使用して、次のことができます。

KERNEL=="host[0-5]", SUBSYSTEM=="scsi_host", ATTR{link_power_management_policy}="min_power"

私はこれがほとんどのスクリプトに当てはまると思います。上記の内容を規則60の後に置くべきだと思います。実際、残りの部分に対してこれを行う必要があります。sleepスクリプトの該当部分だけで十分です。これは競合状態を意味します。udevはこれらのパラメータを追加して設定するパラメータですsysfs。これはパディングです。すでに実行されているタスクを実行するように要求できます。

バックライト付きのキーボードでも同じことを行う必要があります。これらのデバイスについて必要な情報を入手し、udevadmいくつかのルールを作成してくださいudevadm test

おすすめ記事