右のコントロールキーを押しているときだけオーディオを録音するプログラムを実行したいと思います。キーボードを離すと、結果がディスクに書き込まれます(例:)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
私がフォローしているスレッドの1つです。http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#bypassing_Xorg
答え1
イベントをキャプチャするには、xbindkeys
デスクトップ環境とは無関係に実行することをお勧めします。ここでは、すべての操作を実行するシェルスクリプトをトリガーできます。難しい部分は、このプレス/オフロジックを実行することです。 1つのアプローチは、xbindkeys
リリース自体を受け取るアプリケーションを起動することです。しかし、xorgイベントは信頼できず、決して終了しないかもしれません(xlibのコードを書く必要があることは言うまでもありません)。
スクリプトは直接記録を開始し(「安全な」最大長の設定)、ファイルシステムのどこかにプロセスID(PID)を書き込む方が良いでしょう。リリースイベントは、単にこのPIDを読み取り、kill
ロギングを停止するために使用されます。これはarecord
、終了信号のロギングをインテリジェントに停止するように設計されているため、安全です。
おおよそのスケッチ:
if [ ! -f "~/.recordpid" ]; then
echo "already running" >&2
exit 1
fi
file="$(date '+recording-%m-%d-%H:%M:%S.wav')"
nohup arecord -f cd --duration=3600 "~/clips/$file" &> /dev/null &
echo "$!" > "~/.recordpid"
lame
大容量ファイルを避けるために、記録された出力を別のエンコーディングデバイスに直接実行できます。または、リリースボタンイベントを送信した後に切り替えを実行します。公開されたコードは次のとおりです。
if [ ! -f "~/.recordpid" ]; then
pid="$(cat "~/.recordpid")"
kill -l SIGTERM -- "$pid" &>/dev/null
rm -f "~/.recordpid"
fi
公開時にエンコードする場合は、別の一時ファイルからファイル名を取得する必要があります。
答え2
Xfceがボタンを押して放したときに実行コマンドをサポートしているかどうかはわかりませんが、FVWM2がそれをサポートしていることを覚えているようです。あるスクリプトを使用して録音を開始し、別のスクリプトを使用して録音を停止することは完全に可能である必要があります。arecord
あるいは、parecord
実際の録音ができるはずです。