Aviso de inserção / remoção de dispositivo USB

Publicado por morvan bliasby em 30/04/2007

[ Hits: 11.372 ]

 


Aviso de inserção / remoção de dispositivo USB



Sempre achei aquela notificação auditiva de determinado SO proprietário muito útil e elegante, no caso de inserção e remoção de dispositivos USB. Tive então a idéia de reproduzi-la no Linux. No meu caso, usuário Fedora, a inserção de um dispositivo USB de armazenamento de dados, como um "PenDrive", por exemplo, invoca um script que pede ao usuário a ação a ser tomada, como no sistema proprietário, porém sem o apelo do áudio. Então, para implementar este recurso no Linux, devemos:

Criar uma regra UDEV/HotPlug (se sua distro já manipula o UDEV, tanto melhor, pois sendo só uma dica, não nos deteremos em minúcias - forneço o código da regra do UDEV pronto.) que detecte a inserção / remoção do dispositivo; e invocar, a partir da regra casada, um script que acione o som correspondente (Inserir / Remover).

Observe que é chamado, nos scripts respectivos, o comando "play" para execução dos sons.

Seguem abaixo os códigos:

Regras do UDEV:

# 49udev-usb.rules - copie-o na pasta de regras UDEV de sua distro
# (normalmente /etc/udev/rules.d)
BUS=="usb", ACTION=="add", SUBSYSTEM=="usb_device", DRIVER!="", RUN+="/scripts/toca.usb.add.sh"

BUS=="usb", ACTION=="remove", RUN+="/scripts/toca.usb.rem.sh"

Duas coisas sobre arquivos de regras UDEV: cada declaração deve ocupar uma linha e a extensão é - obrigatoriamente - .rules - senão o UDEV não a processa.

Scripts:

#!/bin/sh
### toca.usb.add.sh ###
/usr/bin/play /usr/share/sounds/KDE_Dialog_Appear.wav &

O arquivo acima, toca.usb.add.sh, toca um som indicativo da inserção de dispositivo USB. Ele é invocado pela regra que codificamos.

#!/bin/sh
### toca.usb.rem.sh ###
/usr/bin/play /usr/share/sounds/KDE_Dialog_Disappear.ogg &

Este outro script, toca.usb.rem.sh, faz o contrário, ou seja, toca um som na remoção de dispositivo USB. Lembre-se de colocar, na regra UDEV, o caminho certo dos scripts, no parâmetro RUN+ e lembre-se, claro, de torná-los executáveis.

Testando vários dispositivos, como chaveiros (Pendrives), tocadores MP4, videocâmeras e discos rígidos (gavetas), todos foram detectados e executaram os sons de acordo com a ação (Inserir / Remover), dando um retorno auditivo bastante agradável. Se não gostar dos sons que utilizei, pode mudá-los, é claro, nos scripts.

Bom proveito.

Outras dicas deste autor

Abrindo o Konsole com o Konqueror, na pasta atual

Fazendo cópia de segurança (backup) rapidinho dos seus .conf

Gerenciador de download veloz (de várias fontes simultâneas)

Mudando a associação arquivo/aplicativo

Modificando a ordem de execução de aplicativos / extensão no KDE

Leitura recomendada

Fazendo o scanner GOTEC funcionar no Ubuntu

Configurando o IP da sua placa de rede

Instalando impressora compartilhada pelo Windows XP no Debian Squeeze

Descobrindo se seu winmodem é compatível com o Linux

Fazendo mouse Mtek funcionar no Debian com kernel 2.6

  

Comentários
[1] Comentário enviado por fabio em 30/04/2007 - 10:53h

Caramba, isso é legal! +favoritos

Parabéns pela idéia.

[2] Comentário enviado por robersonfox em 30/04/2007 - 11:36h

Muito boa a dica.

Vale lembrar que no KDE 3.5.6 em diante o arquivo toca.usb.add.sh deve ficar assim

#!/bin/sh
### toca.usb.add.sh ###
/usr/bin/play /opt/kde/share/sounds/KDE_Dialog_Appear.wav

e não se esqueçam de passar o chmod +x nos arquivos, caso contrário dá permission denied.

[3] Comentário enviado por intpa em 30/04/2007 - 17:54h

Excelente dica.

Pena que o udev em si não executa programas gráficos colocados nestes scripts.

Caso contrário ao inserir um pendrive, o udev poderia executar um script que, tocaria o som de inserção de hardware, e logo após abriria uma gerenciador de arquivos (como o Konqueror, Nautilus, Thunar, etc), por exemplo.

Tomara que o udev seja capaz um dia de executar programas graficos pelos scripts, sem a necessidade de rodar um segundo script em background que monitora o que o udev faz, economizando assim processamento.

[4] Comentário enviado por fsemradar em 02/05/2007 - 17:32h

Ahh!!! maneraço!!! muito show!!

vlw!

[5] Comentário enviado por Credmann em 03/05/2007 - 03:18h

Excelente. Pena que o `notify-send' não funciona a partir do root.

[6] Comentário enviado por demattos em 04/05/2007 - 07:49h

Muito Bom, era o que estava procurando
mas uma pergunta. Onde consigo materia sobre estas comandos.

abraco a todos

t+

[7] Comentário enviado por morvan em 04/05/2007 - 10:02h

Bom dia a todos. Como solicitado por Demattos, forneço dois atalhos para aprofundamento do assunto:

http://www.guiadohardware.net/tutoriais/118/

Neste atalho acima, o Morimoto explica, e muito bem, o que é o UDEV e dá alguns exemplos, inclusive sobre o USB;

http://reactivated.net/writing_udev_rules.html

Neste outro, o autor (Daniel Drake) aprofunda bastante a compreensão do mecanismo do UDEV. Boa leitura a todos.

[8] Comentário enviado por demattos em 04/05/2007 - 20:09h

Valeu é 10 os links


[9] Comentário enviado por morvan em 19/07/2007 - 15:19h

Olá.
Apesar da felicidade por ter implementado, para mim e para outros usuários, esta pequena função, estava bastante insatisfeito, pois o comando invocado pelo parâmetro +RUN executava tão poucas coisas! Porque não executá-lo "In Line", ou seja, em linha? Pesquisando nas próprias regras do UDEV, observei que, sendo poucos os comandos, a própria regra faz a execução em linha. No caso da regra com o evento Add, por exemplo, ficaria assim:
RUN+="/bin/bash -c '/usr/bin/play /usr/share/sounds/KDE_Dialog_Appear.wav &'"

Observe as aspas duplas envolvendo todo o comando, o interpretador (Bash), logo no início do comando, em seguida o parâmetro "-c", indicativo dos parâmetros do próprio comando para o Bash e as aspas simples a envolver o comando passado para o Bash. A vantagem desta implementação é a não-dependência de um arquivo exterior à regra, o que simplifica bastante.

[ ],

Morvan

[10] Comentário enviado por ricardospimentel em 04/03/2010 - 10:41h

Um grande olá a todos.

Sei que este tópico não caminha já há três anos. Uma pena, já que este assunto é muito útil e interessante, pois imagino que esta função não venha ativada no linux por causa dos direitos autorais da "microsoft". Assim acredito.

Eu utilizei esta técnica muito útil no Kubuntu 9.10 com KDE4, mas só consegui fazê-lo funcionar deixando o arquivo *.rules assim:

BUS=="usb", ACTION=="add", RUN+="/scripts/toca.usb.add.sh"

BUS=="usb", ACTION=="remove", RUN+="/scripts/toca.usb.rem.sh"

..retirei da linha "add" as opções "SUBSYSTEM=="usb_device", DRIVER!=""", pois não fazia som algum ao inserir dispositivos USB e só ao remover, entretanto, quando eu insiro ou removo um dispositivo, ele repete váaaarias vezes o arquivo de som e ainda não consegui resolver este probleminha.

Tambeém descobri que sem o "sox" instalado, a função "/usr/bin/play" do script não fununcia. Resolvido com apt-get install.

Ah! Alterei também o meu script e eles ficaram assim:
Este é o "ADD"-

#!/bin/sh
# toca.usb.add.sh
/usr/bin/play /usr/share/sounds/KDE-usb-add.ogg & - o detalhe é que este arquivo de som não
vem com a distribuição e eu peguei um arquivo "ogg" qualquer e o nomeei assim.
E este é o meu arquivo "REM"-

#!/bin/sh
# toca.usb.rem.sh
/usr/bin/play /usr/share/sounds/KDE-usb-add.ogg reverse & - o detalhe aqui é que ele reproduz o arquivo de trás para frente, bem interessante.

Descobri também que é possível reproduzir um som diferente para cada tipo de dispositivo USB inserido, basta ter criatividade.

Ainda estou a resolver o problema de tocar o som várias vezes ao inserir um dispositivo.

[11] Comentário enviado por morvan em 04/08/2024 - 10:26h


..retirei da linha "add" as opções "SUBSYSTEM=="usb_device", DRIVER!=""", pois não fazia som algum ao inserir dispositivos USB e só ao remover, entretanto, quando eu insiro ou removo um dispositivo, ele repete váaaarias vezes o arquivo de som e ainda não consegui

Bom dia. Obrigado pelo comentário. Eu deixei de manter essa implementação por dois motivos:
1- Eu já tava entediado de ter que reescrever as Regras do UDEV. Houve bastante mudanças;
2- essa função de notificação sonora, felizmente, já vem habilitada no Plasma, do 6.1?? em diante. Parece, não me detive a estudar o tópico, utiliza os próprios semáforos do KDE Plasma. 100% funcional.
Quanto a "repetir várias vezes...", você pode criar uma regra que verifique se não há instância daquele dispositivo já instalada, tanto pelo Driver como pelo serial.
E ainda, quanto a reproduzir um som diferente, dependendo do dispositivo, o próprio UDEV pode fazer isso, tanto pelo Driver ("k") do UDEV, como pelo serial do device. A robustez do Sistema UDEV é assustadora.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts