Я хотел бы запустить программу, которая записывает звук только тогда, когда нажата правая клавиша управления. При отпускании клавиатуры результат будет записан на диск как, например yy-mm-dd hh:mm.ogg
. Как я могу это сделать?
$ xmodmap -pke |grep -e Record
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
Правильный контроль фиксируется следующим образом xev для событий нажатия клавиш и нажатия клавиш:
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, мой текущий рабочий стол Xfce
. Я веду следующее руководство: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg
halevt
работе, вам просто нужно начать запись при нажатии клавиши и убить ее при отпускании клавиши (SIGKILL
конечно, не с помощью ).Ответы:
Я рекомендую для захвата событий
xbindkeys
работать независимо от среды вашего рабочего стола. Оттуда вы можете запустить сценарий оболочки, который делает все. Сложнее всего сделать эту логику пресс-релиза. Одним из способов являетсяxbindkeys
запуск приложения, которое затем само по себе слушает выпуск, но события xorg ненадежны и могут никогда не завершиться (не говоря уже о том, что вам нужно написать код для xlib).Для сценария гораздо лучше просто начать запись (с установленной максимальной длиной «безопасности») и записать идентификатор процесса (PID) где-нибудь в файловой системе. Событие release просто читает этот PID и использует
kill
для остановки записи. Это безопасно, потому чтоarecord
предназначено для разумной остановки записи по сигналу уничтожения.Грубый набросок:
Вы можете запустить вывод arecord напрямую на
lame
другие устройства кодирования, чтобы избежать больших файлов. Или конвертировать после отправки события кнопки выпуска. Код выпуска может бытьЕсли вы будете кодировать при выпуске, вам нужно где-нибудь получить имя файла, возможно, из другого временного файла.
источник
Я не знаю, поддерживает ли Xfce запуск команд при нажатии и отпускании кнопок, но, похоже, я вспоминаю, что FVWM2 поддерживает это. Используя один сценарий для начала записи и другой сценарий для его остановки, это должно быть полностью возможным.
arecord
илиparecord
должен быть в состоянии сделать фактическую запись.источник