Executar automaticamente um script depois de conectar ou desconectar um dispositivo USB


22

O que posso fazer para executar automaticamente um script depois de montar / plug-in ou desmontar / desconectar um dispositivo USB?


2
@XxxXxx: não é uma opção, enquanto Choco não tem uma versão de lançamento para o Ubuntu 12.10
Radu Rădeanu


@Glutanimate: essa pergunta é sobre um flash-drive USB específico, mas eu perguntei sobre um dispositivo USB, em geral
Radu Rădeanu

@ Glutanimate: digamos que as respostas dessa pergunta sejam úteis, de qualquer maneira não responde sobre como executar automaticamente um script depois que eu desconectei um dispositivo USB.
Radu Rădeanu

1
"digamos que as respostas dessa pergunta sejam úteis, de qualquer forma, não respondem a como executar automaticamente um script depois que eu desconectei um dispositivo USB". Suponho que se você alterar "ACTION = 'add'" para "ACTION = 'remove' ", seria um bom lugar para começar.
Blokay #

Respostas:


17

Graças a MinimusHeximus e os respectivos contribuidores do tópico que ele mencionou em seu comentário à minha pergunta semelhante, acho que agora posso oferecer a seguinte resposta.

Você precisará de 5 (cinco) arquivos para um dispositivo USB da seguinte maneira, basta preencher os respectivos valores <fortheseparts>:

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

Notas:

  1. Você pode capturar os valores <yourvendorid>e <yourproductid>digitar o comando lsusbno Terminal - quando o dispositivo USB estiver conectado - que listará todos os dispositivos USB atualmente disponíveis, como Bus 003 Device 002: ID 8087:07da Intel Corp.onde 8087 é o VendorID e 07da é o ProductID .
  2. E <yourdevice>pode ser qualquer nome arbitrário que você possa escolher para o seu dispositivo USB, por exemplo, eu escolhi usar o nome genérico " teclado " ao criar esses arquivos para o meu teclado USB, o que exigia a aplicação de um layout de teclado diferente sempre que ele fosse conectado.
  3. Em alguns cenários, pode não ser necessário usar a ACTION=="remove"linha no arquivo de regras do udev e, consequentemente, os 2 (dois) " out" arquivos associados , quando você não precisar fazer nada (por exemplo, reverter uma alteração feita quando o dispositivo estiver ligado). conectado) depois que o dispositivo for desconectado.

Isso parece errado da minha perspectiva iniciante. Essas cláusulas não precisam estar na mesma linha?
nafg

1
Funciona: ACTION == "add", ATTRS {idVendor} == "...", ATTRS {idProduct} == "...", ENV {XAUTHORITY} = "/ home / <usuário> / Xauthority" , ENV {DISPLAY} = ": 0", EXECUTAR + = "<script>" "
nafg 28/11

@nafg: da minha perspectiva iniciante, não deve fazer diferença se você colocar todos em uma linha (usando vírgula como separador) no arquivo de regras do udev, mas vejo que você adicionou parâmetros XAUTHORITY e DISPLAY às regras do udev, que pode funcionar para você ou para outra pessoa; nesse caso, pergunto-me se eles não são mais necessários nos dois arquivos de script abaixo.
Sadi

1
Sim, esse é o ponto, você não precisa mais do script intermediário (exceto, talvez, para colocar o script real em segundo plano), pois o udev permite definir o ambiente. Também meu entendimento dos documentos do udev é que cada linha é uma regra independente, as linhas em um arquivo não são combinadas.
Nafg

@nafg: Obrigado pela sua valiosa contribuição. Mudei esses ambientes para a regra do udev e funcionou para mim também. Além disso, movi os scripts para / usr / local / bin quando comecei a encontrar problemas depois que movi minha pasta / home para uma partição separada por conta própria (provavelmente porque não foi montada anteriormente). Parece que o uso de quebras de linha nas regras do udev não apresenta nenhum problema, pelo menos no meu sistema (Ubuntu 13.04 64 bits) e eu preferi isso para facilitar a leitura.
Sadi

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.