Para capturar os eventos, recomendo xbindkeys
, ele funciona de maneira independente do seu ambiente de área de trabalho. De lá, você pode acionar um script de shell que faz tudo. O pouco complicado é fazer essa lógica de liberação / liberação. Uma maneira é que xbindkeys
acione um aplicativo que, por si só, escuta a liberação, mas os eventos xorg não são confiáveis e podem nunca sair (sem mencionar que você precisa codificar o xlib).
É muito melhor que o script comece a gravar (com o comprimento máximo definido como "segurança") e escreva o ID do processo (PID) em algum lugar do sistema de arquivos. O evento release apenas lê este PID e usa kill
para parar a gravação. Isso é seguro porque arecord
foi projetado para interromper o registro de maneira sensata no sinal de eliminação.
Um esboço:
if [ ! -f "~/.recordpid" ]; then
echo "already running" >&2
exit 1
fi
file="$(date '+recording-%m-%d-%H:%M:%S.wav')"
nohup arecord -f cd --duration=3600 "~/clips/$file" &> /dev/null &
echo "$!" > "~/.recordpid"
Você pode executar a saída do registro diretamente para lame
ou outros dispositivos de codificação para evitar arquivos grandes. Ou converta após o envio do evento do botão de liberação. O código de lançamento pode ser
if [ ! -f "~/.recordpid" ]; then
pid="$(cat "~/.recordpid")"
kill -l SIGTERM -- "$pid" &>/dev/null
rm -f "~/.recordpid"
fi
Se você codificar no lançamento, você precisa obter o nome do arquivo em algum lugar, possivelmente de outro arquivo temporário.