Um dispositivo de armazenamento está no block
subsistema, então você desejará SUBSYSTEM=="block"
em sua regra, assim:
ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", \
RUN+="/path/to/script"
Se você estiver usando systemd
, poderá executar uma systemd
unidade sempre que um dispositivo de armazenamento USB for adicionado. Crie o arquivo da unidade, por exemplo /etc/systemd/system/my-usb-rule.service
:
[Service]
Type=oneshot
ExecStart=/path/to/script
e a regra, por exemplo /etc/udev/rules.d/85-my-usb-rule.rules
:
ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", ENV{ID_BUS}=="usb", \
ENV{SYSTEMD_WANTS}="my-usb-rule.service"
Agora udev
será acionado my-usb-rule.service
(que, por sua vez, executará seu script) em qualquer evento de adição de dispositivo de armazenamento USB .
Não se esqueça de recarregar a configuração depois de editar as regras / unidades:
udevadm control --reload
systemctl daemon-reload
SUBSYSTEM=="block", SUBSYSTEMS=="usb"
(observe a diferença com o S ). Duvido que ele possa sempre funcionar comENV{ID_BUS}=="usb"
a resposta original, porque vejo o valor scsi aqui. Mas estou trabalhando em um problema ligeiramente diferente do originalmente solicitado, quero qualquer pendrive (pendrive), mas não unidades externas.ENV{ID_BUS}
valor não é o mesmo em todos os sistemas. Ontem eu estava trabalhando em um sistema mais antigo com o udev 210 (eu acredito. Não é possível verificar agora porque a máquina não está na internet). Lá o valor era scsi . Agora, estou em uma máquina mais nova com o udev 228 e o valor é usb . Para o mesmo pendrive, estou carregando comigo. (não tenho certeza se a versão do udev é o fator relevante aqui, também pode ser o kernel ou qualquer outro pacote que esteja instalando as regras do udev, e, g, udisks2). Ainda assimSUBSYSTEM=="block", SUBSYSTEMS=="usb"
(a nota S ) pode ser portátil e segura.