Use o Udev. O Udev é um daemon do gerenciador de dispositivos. Entre outras coisas, é responsável por nomear seus dispositivos. Você pode definir as regras do udev colocando arquivos com uma certa sintaxe no diretório de regras. As regras podem fazer muitas coisas - em particular, podem executar scripts quando um determinado dispositivo é conectado.
Como resolver seu problema:
Primeiro, você precisa coletar informações no seu dispositivo. Digamos que você o tenha conectado e saiba que ele está sob o nome /dev/sdb1
. Se assim for executado:
udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)
O comando gerará informações sobre o seu dispositivo. É um tanto demorado. Você precisa encontrar algo que identifique o dispositivo exclusivamente. Pode ser uma série como ATTRS{serial}=="UA04FLGC"
ou uma combinação de outros atributos, como ATTRS{idVendor}
e ATTRS{idProduct}
. A maioria dos nomes é mais ou menos auto-explicativa. Escolha uma ou uma combinação de algumas que pareçam razoáveis - se elas não funcionarem, tente outra coisa.
Depois de encontrar um identificador exclusivo, crie um arquivo em /etc/udev/rules.d
que comece com dois dígitos e termine com .rules
. Os dois dígitos especificam a ordem de processamento desses arquivos .rules - 70-usb-log-custom.rules
deve ser uma boa escolha para você. A sintaxe deste arquivo de regras pode ser muito complexa. Se você estiver interessado, acesse o google udev. Se não apenas abrir o arquivo recém-criado e editá-lo para algo parecido com isto:
# /etc/udev/rules.d/70-usb-log-custom.rules
KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"
Este é um arquivo udev real que estou usando. Tem três regras. Cada linha é uma regra própria. A primeira linha executa um script para criar um dispositivo descriptografado sempre que um disco criptografado é conectado. A segunda linha chama o mesmo script com opções diferentes no evento em que o dispositivo descriptografado é removido. A terceira linha define permissões para outro dispositivo relacionado.
O mais provável é que você só precise da primeira linha. Exclua o restante e insira a serial correta (ou a combinação de parâmetros escolhidos para identificar seu dispositivo).
Explicação do meu arquivo:
KERNEL=="sd?1"
diz que o dispositivo que procuramos nesta regra tem o nome ao longo das linhas de /dev/sda1
, /dev/sdc1
ou algo parecido. O questionmark é um curinga para qualquer letra. ATTRS{serial}=="UA04FLGC"
é o identificador exclusivo aqui. Para o outro dispositivo que eu estava falando (terceira linha) eu não estou usando o número de série, mas uma combinação de SYSFS{idVendor}=="1781"
e SYSFS{idProduct}=="0c9f"
para identificá-lo.
ACTION=="add"
informa a regra que deve agir somente quando o dispositivo é adicionado; não quando é removido.
SYMLINK+="cusb1"
cria um link simbólico para o disco, de modo que ele será encontrado em /dev/cusb1
.
RUN+="/home/confus/bin/usb-encrypt.sh add %k"
executa o script e passa 'add' e '% k' (o nome do dispositivo) para ele.
Eu não vou dar mais detalhes, pois há excelentes tutoriais sobre as regras do udev. O que você leu aqui deveria ser o suficiente para ficar com os olhos fixos.