Eu gostaria de executar um programa que grave áudio apenas quando a tecla Right Control for pressionada. Na liberação do teclado, o resultado gravaria no disco como, por exemplo yy-mm-dd hh:mm.ogg
. Como eu posso fazer isso?
$ xmodmap -pke |grep -e Record
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
O Right Control é capturado da seguinte forma pelo xev para eventos de pressionamento e pressionamento de tecla:
KeyPress event, serial 43, synthetic NO, window 0x1800001,
root 0x7f, subw 0x0, time 27689430, (-145,169), root:(476,366),
state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 46, synthetic NO, window 0x1800001,
root 0x7f, subw 0x0, time 27689540, (-145,169), root:(476,366),
state 0x14, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
ClientMessage event, serial 46, synthetic YES, window 0x1800001,
message_type 0x112 (WM_PROTOCOLS), format 32, message 0x110 (WM_DELETE_WINDOW)
FWIW, minha área de trabalho atual é Xfce
. Uma dica que estou seguindo: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg
halevt
trabalhar, basta iniciar a gravação com o pressionamento de teclas e matá-lo com o lançamento das teclas (não comSIGKILL
, é claro).Respostas:
Para capturar os eventos, eu recomendo
xbindkeys
, ele funciona independentemente do seu ambiente de área de trabalho. A partir daí, você pode acionar um script de shell que faz tudo. O mais complicado é fazer essa lógica de imprensa / liberação. Uma maneira éxbindkeys
acionar um aplicativo que, por si só, escuta a liberação, mas os eventos do xorg não são confiáveis e podem nunca sair (sem mencionar que você precisa codificar para xlib).É muito melhor para o script iniciar a gravação (com o comprimento máximo "de segurança" definido) e escrever o ID do processo (PID) em algum lugar do sistema de arquivos. O evento de lançamento apenas lê este PID e usa
kill
para parar a gravação. Isso é seguro porquearecord
foi projetado para parar a gravação de forma sensata no sinal de interrupção.Um esboço aproximado:
Você pode executar uma saída de um 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 liberação pode serSe você codificar na liberação, precisará obter o nome do arquivo em algum lugar, possivelmente de outro arquivo temporário.
fonte
Não sei se o Xfce suporta o acionamento de comandos ao pressionar e liberar botões, mas me lembro que o FVWM2 suporta isso. Usando um script para iniciar a gravação e outro para interrompê-lo, isso deve ser totalmente possível.
arecord
ouparecord
deve poder fazer a gravação real.fonte