Если вы читаете страницу man
(выделите мою):
$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.
Соответствующее устройство не имеет атрибута vendor
, и вы используете SUBSYSTEMS == "usb", DRIVERS == "usb-storage"
в вашем правиле, которое соответствует определенному родительскому устройству:
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"
и, как вы можете видеть, это родительское устройство также не имеет атрибута vendor
.
Решение состоит в том, чтобы использовать переменные среды, например: [
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}"
, это создаст символическую ссылку с именем usb_Sandisk_Cruzer
. Обратите внимание, что с несколькими устройствами с одинаковыми id_vendor и id_model ссылка будет указывать на последнее подключенное устройство. Чтобы избежать этого, вы можете добавить ID_SERIAL_SHORT
, например, SYMLINK + = "usb_% E {ID_VENDOR} _% E {ID_MODEL} _% E {ID_SERIAL_SHORT}"
Вы вводите команду в неправильном формате.Допустимые спецификаторы требований::
packagename
packagename==version
packagename>=version
(или<=
)packagename>version
(или<
)Добавить знак ==
для спецификатора точной версии:
$ pip install pyudev==0.21.0