Chciałbym uruchomić program, który nagrywa dźwięk tylko wtedy, gdy wciśnięty jest prawy klawisz Control. Po zwolnieniu klawiatury wynik zapisywałby na dysk jako np yy-mm-dd hh:mm.ogg
. Jak mogę to zrobić?
$ xmodmap -pke |grep -e Record
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
Kontrola prawna jest przechwytywana przez xev w następujący sposób dla zdarzeń związanych z kluczowaniem i opuszczaniem:
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, mój obecny pulpit to Xfce
. Jeden trop, którego śledzę: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg
halevt
działać, powinieneś po prostu rozpocząć nagrywanie po naciśnięciu klawisza i zabić go po zwolnieniu klawisza (SIGKILL
oczywiście nie za pomocą ).Odpowiedzi:
Polecam
xbindkeys
, aby przechwytywać zdarzenia, działa niezależnie od środowiska pulpitu. Stamtąd możesz uruchomić skrypt powłoki, który robi wszystko. Trudnym zadaniem jest zrobienie tej logiki naciśnij / zwolnij. Jednym ze sposobów jestxbindkeys
uruchomienie aplikacji, która następnie sama nasłuchuje wydania, ale zdarzenia xorg są niewiarygodne i mogą nigdy nie zostać zakończone (nie wspominając o tym, że musisz kodować Xlib).Znacznie lepiej jest, aby skrypt po prostu zaczął nagrywać (z ustawioną maksymalną długością „bezpieczeństwa”) i zapisał identyfikator procesu (PID) gdzieś w systemie plików. Wydanie zwalnia tylko odczytuje ten PID i używa
kill
do zatrzymania nagrywania. Jest to bezpieczne, ponieważarecord
ma na celu rozsądne zatrzymanie nagrywania po sygnale zabicia.Szorstki szkic:
Możesz uruchomić wyjście arecord bezpośrednio na
lame
innym urządzeniu do kodowania, aby uniknąć dużych plików. Lub przekonwertuj po wysłaniu zdarzenia przycisku zwolnienia. Kod wydania może byćJeśli kodujesz przy wydaniu, musisz gdzieś pobrać nazwę pliku, być może z innego pliku tymczasowego.
źródło
Nie wiem, czy Xfce obsługuje wyzwalanie poleceń po naciśnięciu i zwolnieniu przycisków, ale wydaje mi się, że pamiętam, że FVWM2 to obsługuje. Korzystanie z jednego skryptu do rozpoczęcia nagrywania i drugiego skryptu do jego zatrzymania powinno być w pełni możliwe.
arecord
lubparecord
powinien być w stanie dokonać właściwego nagrania.źródło