Escrever um script como esse é bastante simples - você precisa canalizar acpi_listen
para while IFS= read -r line ; do ... done
structure e cuidar da manipulação dos eventos dentro dessa estrutura. O comando read
shell builtin aguardará uma linha de texto de acpi_listen
e o processamento ocorrerá quando a instrução if
perceber que a linha contém o texto apropriado. Como alternativa, pode-se usar a instrução case
para melhor portabilidade do script.
Aqui está o script simples que eu pessoalmente usaria. Testado no Ubuntu 16.04 LTS
#!/bin/bash
acpi_listen | while IFS= read -r line;
do
if [ "$line" = "jack/headphone HEADPHONE plug" ]
then
notify-send "headphones connected"
sleep 1.5 && killall notify-osd
elif [ "$line" = "jack/headphone HEADPHONE unplug" ]
then
notify-send "headphones disconnected"
sleep 1.5 && killall notify-osd
fi
done
Observe que, se você planeja executar isso a partir do cron job ou via /etc/rc.local
, precisará exportar seu DBUS_SESSION_BUS_ADDRESS
para notify-send
para o trabalho.