Parece funcionar para mim no Ubuntu 14.04 com 2 teclas de flash & amp; telefone android como armazenamento e adaptador de rede USB & amp; webcam como outro tipo. (não consegui testar a colocação de um hub usb)
-
Verifique a porta USB (que é um dispositivo pai para o dispositivo conectado)
$ udevadm info --name=/dev/sdc --attribute-walk looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0': KERNELS=="2-1.2: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"
-
Crie a regra do udev, correspondendo ao nome do kernel da porta usb sem
usb-storage
driver/etc/udev/rules.d/90-remove-non-storage.rules
Permitir qualquer dispositivo que tenha armazenamento como primeira interface (dispositivos compostos permitidos)
KERNELS=="2-1.2:1.0", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
Bloqueia qualquer dispositivo que tenha uma interface sem armazenamento (Dispositivos compostos negados)
Na verdade, o telefone é montado como modem para
/dev/ttyACM0
como KERNELS == "2-1.2: 1.1". Isso não permitirá que os telefones (dispositivos compostos) sejam montados apenas em dispositivos de armazenamento simples.KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
Bloqueie somente as interfaces que não são de armazenamento (Dispositivos compostos são permitidos somente como armazenamento)
Após alguma pesquisa sobre uma maneira de desabilitar somente interfaces não permitidas. Desligamento do driver parece funcionar. Meu telefone só pode ser usado como armazenamento. Não cria
/dev/ttyACM0
.KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo -n %k >/sys%p/driver/unbind'"
-
Recarregue as regras do udev
udevadm control --reload-rules
Referências:
- udev - gerenciamento dinâmico de dispositivos Linux
- Capítulo 13. Dispositivo de Kernel Dinâmico: Gerenciamento com o udev
- desativa um dispositivo PCI específico na inicialização
- Ligação manual de drivers e desvinculação
- descrições e & amp; sysfs & amp; como usar