Quero executar um script em desconectar fones de ouvido, mas me ressenti da ideia de pesquisa constante do status quando já existe algum código executado quando ele é alterado.
Quero executar um script em desconectar fones de ouvido, mas me ressenti da ideia de pesquisa constante do status quando já existe algum código executado quando ele é alterado.
Respostas:
Na maioria dos sistemas, se não em todos, o ACPI pode manipular esse evento. Para testar isso:
acpi_listen
Desconecte e reconecte fones de ouvido, exemplo de saída: (microfone / orelhas compartilham o mesmo conector no meu laptop)
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
Coloque your-script.sh
em/etc/acpi/
Adicione um arquivo de acionador de eventos para seu script em /etc/acpi/events/
event=jack/headphone HEADPHONE unplug
action=/etc/acpi/your-script.sh
Verifique os outros arquivos lá para aprender.
Pode ser necessário reiniciar o acpid
serviço para recarregar as regras alteradas em/etc/acpi/events/
sudo service acpid restart
Referência: man acpid
DBUS_SESSION_BUS_ADDRESS
variável de ambiente em um arquivo em sua propriedade com um script iniciado ~/.config/autostart/dbus.desktop
. Então você pode executar a su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."
partir de/etc/acpi/your-script.sh
A versão atual do seu script agora contém um sleep 0.25
comando.
sleep
é baseado em timer, portanto, não usa nenhum ciclo de processamento enquanto dorme ...
Ele usa um pouquinho muito pequeno de CPU para configurar o timer, mas sleep 1
(espera 1 segundo), sleep 60
(espera por um minuto) e sleep 86400
(espera por um dia), todos usam o mesmo número de ciclos de CPU.
No entanto, o uso da ACPI é a solução perfeita , pois a ACPI é orientada a eventos, em vez de orientada por pesquisas.