Eu não acredito que tmpfiles.d
seja o caminho certo para ir até aqui. Você realmente deve fazer as regras udev
. Olhe:
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==""
...
E continua, subindo a árvore de dispositivos pai. Mas considere que, usando apenas as informações acima, você pode fazer:
KERNEL=="host[0-5]", SUBSYSTEM=="scsi_host", ATTR{link_power_management_policy}="min_power"
E eu acredito que isso é para a maioria do seu roteiro. Você vai querer colocar o acima após a regra 60, eu acho. E realmente, você deve fazer isso para o resto - só o sleep
bit no seu script é motivo suficiente - isso implica em uma condição de corrida. udev
é o único que adiciona e define esses parâmetros - é o que preenche sysfs
. Basta pedir para fazer o trabalho que já está fazendo.
E para o seu teclado, você definitivamente deveria fazer o mesmo - e a luz de fundo. Basta obter as informações necessárias sobre esses dispositivos em udevadm
, escrever algumas regras e udevadm test
delas.