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

Publicado por morvan bliasby em 30/04/2007

[ Hits: 10.100 ]

 


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

Configurando SIS 671|72 no Ubuntu 14.04

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

Módulo SisIMedia Abortando o LibreOffice: Como Resolver

Leitura recomendada

Instalando seu NVIDIA GeForce no Debian

Plymouth funcionando corretamente com as placas Intel

Como resolver o travamento do Ubuntu nos Avell W1511/G1511

Wireless no Linux (Ubuntu/Debian)

Configurando o celular GT-S8000B como modem 3G

  

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 tiagoarcosta 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.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts