Pular para o conteúdo

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

Dica publicada em Linux / Hardware
morvan bliasby morvan
Hits: 12.122 Categoria: Linux Subcategoria: Hardware
  • Indicar
  • Impressora
  • Denunciar

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.

Sintonizador ISDB-T USB - Instalação correta

Mudando a associação arquivo/aplicativo

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

Módulo SisIMedia Abortando o LibreOffice: Como Resolver

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

"Resetando" o mapa de teclado ABNT2 no X

Impressora HP LaserJet 1000 no Conectiva Linux 10 via CUPS

VIA + SIS = VESA

Resolução de vídeo - Fedora 10

Áudio do Acer 5542 com Ubuntu

#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

Entre na sua conta para comentar.