Me gustaría ejecutar un programa que grabe audio solo cuando se mantenga presionada la tecla Control derecho. En el lanzamiento del teclado, el resultado escribiría en el disco como, por ejemplo yy-mm-dd hh:mm.ogg
. ¿Cómo podría hacer eso?
$ xmodmap -pke |grep -e Record
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
Control derecho es capturado de la siguiente manera por xev para los eventos de tecla abajo y tecla arriba:
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, mi escritorio actual es Xfce
. Una pista que estoy siguiendo: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg
halevt
trabajar, solo debes comenzar tu grabación al presionar una tecla y matarla al soltar la tecla (no conSIGKILL
, por supuesto).Respuestas:
Para atrapar los eventos, recomiendo
xbindkeys
, funciona independientemente de su entorno de escritorio. A partir de ahí, puede activar un script de shell que hace todo. El truco es hacer esta lógica de prensa / liberación. Una forma esxbindkeys
desencadenar una aplicación que luego escucha por sí sola el lanzamiento, pero los eventos xorg no son confiables y es posible que nunca se cierre (sin mencionar que necesita codificar para xlib).Es mucho mejor que el script solo comience a grabar (con la longitud máxima "segura" establecida) y escriba la identificación del producto (PID) en algún lugar del sistema de archivos. El evento de lanzamiento solo lee este PID y lo utiliza
kill
para detener la grabación. Esto es seguro porquearecord
está diseñado para detener la grabación de manera sensata en la señal de apagado.Un bosquejo aproximado:
Puede ejecutar una salida de registro directamente a
lame
otros dispositivos de codificación para evitar archivos grandes. O convierta después de que se envíe el evento del botón de liberación. El código de lanzamiento podría serSi va a codificar en el lanzamiento, debe obtener el nombre del archivo en algún lugar, posiblemente de otro archivo temporal.
fuente
No sé si Xfce admite comandos de activación al presionar y soltar botones, pero parece recordar que FVWM2 lo admite. Usando un script para comenzar la grabación y otro script para detenerlo, esto debería ser completamente posible.
arecord
oparecord
debería poder hacer la grabación real.fuente