Este seria inicialmente o Apêndice 3 do artigo anterior,
Mas achei melhor separar para ser útil a pessoas com problemas mais simples, tais como ter de ficar montando cada dispositivo USB só porque não tem Udev e Hal.
A solução, com as necessárias adaptações, serve para quaisquer dispositivos de armazenamento (Mp3, pendrives, câmeras etc). Com mais trabalho e pesquisa, servirá a outros hardwares também.
O sistema testado foi Slackware 10.2.
As configurações do Hotplug no Slackware, e provavelmente em muitas outras distros, são muito básicas e pouco é documentado em linguagem compreensível sobre esse sistema. Então este artigo visa suprir parte dessa lacuna.
Se
rc.hotplug já está ativado (chmod +x /etc/rc.d/rc.hotplug), o trabalho é todo como root no diretório de configuração do Hotplug: /etc/hotplug.
Talvez seja possível colocar comandos "/sbin/mount" e "/sbin/umount" diretamente nos arquivos já existentes, mas não sei fazer. Então criei duas regras em
/etc/hotplug/usb.usermap (se não existir: # touch /etc/hotplug/usb.usermap) e dois scripts - /etc/hotplug/usb/mp3 e /etc/hotplug/usb/pen - para os mesmos dispositivos citados no artigo anterior. A saber, um Mp3 Foston 256 Mb que sempre é localizado como /dev/sda e um pendrive Kingston de 2 Gb que pode ser /dev/sda1 ou /dev/sdb1 de acordo à porta em que for conectado.
Dei permissão de execução aos scripts mp3 e pen.
Basicamente o que eles farão é desmontar o diretório alvo, para o caso de haver algo lá, e remontar com os dispositivos indicados nas regras estabelecidas em usb.usermap.
Necessário saber quais os IDs. É só plugar todos os dispositivos USB e verificar a saída de lsusb.
# lsusb
Bus 002 Device 002: ID 10d6:1100 Actions Semiconductor Co., Ltd
Bus 001 Device 003: ID 0951:1603 Kingston Technology
Conteúdo do MEU
usb.usermap:
# script match_flags idVendor idProduct bcdDevice_lo
bcdDevice_hi bDeviceClass bDeviceSubClass bDeviceProtocol
bInterfaceClass bInterfaceSubClass bInterfaceProtocol driver_info
# Primeiro campo é o script ou módulo. Segundo campo match_flags:
0x0003 = dispositivos que preencham ambos os ids. Terceiro e quarto campos referem-se aos ids, precedidos de 0x.
mp3 0x0003 0x10d6 0x1100 0x0000 0x0000
0x00 0x00 0x00 0x00 0x00
0x00 0x00000000
pen 0x0003 0x0951 0x1603 0x0000 0x0000
0x00 0x00 0x00 0x00 0x00
0x00 0x00000000
São quatro linhas somente, começando com #, #, mp3, pen. As linhas comentadas (#) servem apenas de ilustração. Não pode haver quebra de linha no lugar errado, na dúvida copie o padrão do usb.distmap.
Criei os diretórios /mnt/sda e /mnt/usb.
No /etc/fstab acrescentei três linhas:
/dev/sda /mnt/sda auto noauto,users,rw 0 0
/dev/sda1 /mnt/usb auto noauto,users,rw 0 0
/dev/sdb1 /mnt/usb auto noauto,users,rw 0 0
Conteúdo de MEU /etc/hotplug/usb/mp3:
#!/bin/sh
umount /mnt/sda; sleep 1 # Desmontar o diretório antes de montá-lo às cegas.
mount /mnt/sda
São três linhas: #, umount, mount.
Conteúdo de pen:
#!/bin/sh
umount /mnt/usb; sleep 1
mount /mnt/usb
Resultados e discussão
Reiniciei o sistema e os dispositivos foram montados automaticamente ao ser conectados. Teoricamente só precisaria reiniciar o rc.hotplug, mas na prática coisas estranhas acontecem (no meu caso o script pen só funcionou depois de reiniciar o micro).
Antes de desplugar os dispositivos, é bom desmontá-los, principalmente se acabou de gravar dados neles.
Quem não quisesse alterar o fstab, acho que poderia somente acrescentar os dispositivos (mount /dev/sda /mnt/sda) antes dos pontos de montagem. Embora, no meu caso, teria de resolver a questão do pendrive que ora é reconhecido como sda1, ora como sdb1.
Referência
MORIMOTO, Carlos E. Acessando dispositivos USB e escrevendo regras.
http://www.guiadohardware.net (Neste deve ser feita uma correção: ohci NÃO dá suporte aos controladores usados pela Via, mas sim ehci e uhci.) 2006.