Je voudrais exécuter un programme qui enregistre l'audio uniquement lorsque la touche de contrôle droite est maintenue enfoncée. Lors de la libération du clavier, le résultat serait écrit sur le disque comme, par exemple yy-mm-dd hh:mm.ogg
. Comment pourrais-je faire ça?
$ xmodmap -pke |grep -e Record
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
Le contrôle de droite est capturé comme suit par xev pour les événements clé en bas et clé en haut:
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, mon bureau actuel est Xfce
. Une piste que je suis: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg
halevt
travailler, il vous suffit de démarrer votre enregistrement en appuyant sur une touche et de le tuer lors de la libération de la touche (pas avecSIGKILL
, bien sûr).Réponses:
Pour piéger les événements, je le recommande
xbindkeys
, cela fonctionne indépendamment de votre environnement de bureau. De là, vous pouvez déclencher un script shell qui fait tout. L'astuce est de faire cette logique de presse / relâchement. Une façon consistexbindkeys
à déclencher une application qui, par elle-même, écoute la sortie, mais les événements xorg ne sont pas fiables et il peut ne jamais se terminer (sans mentionner que vous devez coder pour xlib).Il est préférable que le script commence simplement l'enregistrement (avec la longueur maximale "de sécurité" définie) et écrive l'id du processus (PID) quelque part dans le système de fichiers. L'événement de libération lit simplement ce PID et utilise
kill
pour arrêter l'enregistrement. Ceci est sûr cararecord
est conçu pour arrêter l'enregistrement de manière sensible sur le signal de mise à mort.Un croquis approximatif:
Vous pouvez exécuter une sortie d'enregistrement directement sur
lame
ou sur d'autres périphériques de codage pour éviter les fichiers volumineux. Ou convertissez après l'envoi de l'événement du bouton de libération. Le code de version pourrait êtreSi vous encodez à la sortie, vous devez obtenir le nom de fichier quelque part, peut-être à partir d'un autre fichier temporaire.
la source
Je ne sais pas si Xfce prend en charge le déclenchement de commandes à la pression et au relâchement des boutons, mais je semble me rappeler que FVWM2 le prend en charge. L'utilisation d'un script pour démarrer l'enregistrement et d'un autre script pour l'arrêter devrait être tout à fait possible.
arecord
ouparecord
devrait être en mesure de faire l'enregistrement réel.la source