Use o Udev. O Udev é um daemon do gerenciador de dispositivos. Entre outras coisas, é responsável por nomear seus dispositivos. Você pode definir 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 está conectado.
Como resolver o seu problema:
Primeiro, você precisa coletar informações no seu dispositivo. Digamos que você o conectou e saiba que está sob o nome /dev/sdb1
. Se sim, execute:
udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)
O comando produzirá informações sobre o seu dispositivo. É um tanto demorado. Você precisa encontrar algo que identifique o dispositivo exclusivamente. Pode ser um tipo de série ATTRS{serial}=="UA04FLGC"
ou uma combinação de outros atributos, como ATTRS{idVendor}
e ATTRS{idProduct}
. A maioria dos nomes é mais ou menos autoexplicativa. 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 /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
devem ser uma boa opção para você. A sintaxe desse arquivo de regras pode ser muito complexa. Se você estiver interessado, pesquise no google udev. Se não, basta 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 nele. Cada linha é uma regra própria. A primeira linha executa um script para criar um dispositivo descriptografado sempre que um disco criptografado estiver conectado. A segunda linha chama o mesmo script com opções diferentes no caso de o dispositivo descriptografado ser removido. A terceira linha define permissões para outro dispositivo relacionado.
Provavelmente você precisará apenas da primeira linha. Exclua o restante e insira o número de série correto (ou a compilação dos parâmetros escolhidos para identificar o seu dispositivo).
Explicação do meu arquivo:
KERNEL=="sd?1"
diz que o dispositivo que estamos procurando nesta regra é nomeado ao longo das linhas de /dev/sda1
, /dev/sdc1
ou algo assim. O ponto de interrogação é um curinga para qualquer letra. ATTRS{serial}=="UA04FLGC"
é o identificador exclusivo aqui. Para o outro dispositivo sobre o qual eu estava falando (terceira linha), 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 à regra que ele deve agir apenas quando o dispositivo for adicionado; não quando é removido.
SYMLINK+="cusb1"
cria um link simbólico para o disco para que ele seja 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.
Não vou dar mais detalhes, pois existem excelentes tutoriais sobre as regras do udev. O que você lê aqui deve ser suficiente para ser visto.