Se você ler a página man
(enfatize a minha):
$attr{file}, %s{file} The value of a sysfs attribute found at the device where all keys of the rule have matched. If the matching device does not have such an attribute, and a previous KERNELS, SUBSYSTEMS, DRIVERS or ATTRS test selected a parent device, then the attribute from that parent device is used.
O dispositivo correspondente não tem o atributo vendor
e você está usando SUBSYSTEMS=="usb", DRIVERS=="usb-storage"
em sua regra que corresponde a um dispositivo pai específico:
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb4/4-3/4-3:1.0':
KERNELS=="4-3:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="usb-storage"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bInterfaceProtocol}=="50"
ATTRS{bNumEndpoints}=="02"
ATTRS{supports_autosuspend}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceNumber}=="00"
e como você pode ver, o dispositivo pai também não possui o atributo vendor
.
A solução é usar variáveis de ambiente, por exemplo:
KERNEL=="sd[a-z]", SUBSYSTEM=="block", ATTR{ro}=="0", ATTR{removable}=="1", \
SUBSYSTEMS=="usb", DRIVERS=="usb-storage", SYMLINK+="usb_%E{ID_VENDOR}_%E{ID_MODEL}"
isso criaria um link simbólico chamado usb_Sandisk_Cruzer
. Note que com vários dispositivos com o mesmo id_vendor e id_model o link apontará para o último que foi anexado. Para evitar isso, você pode adicionar ID_SERIAL_SHORT
, por exemplo SYMLINK+="usb_%E{ID_VENDOR}_%E{ID_MODEL}_%E{ID_SERIAL_SHORT}"