(グローバル)キー押下を何らかのコマンドにバインドし、それでもキー押下の完了を中断しないことは可能ですか?つまり、bindkeyソリューションを試してみると ここに投稿されています :
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command"
q
その場合、キーを押した「q」は、そうでない場合のように完了することはありません。つまり、たとえば、端末に文字「q」を出力することはありません。
xdotool
を使用して 'q'キーを送信するには、次のようにします。
# In file: ~/.xbindkeysrc
# Bind key 'q' to running 'some_command'
"some_command && xdotool key q"
q
xdotool
によって実行された「q」キーの押下がバインディングを介して別の「some_command」を実行するため、ループが発生します。
もう少し明確にするために、キーを押して「q」を通常どおりに実行し、さらに外部コマンドを実行します。上記の解決策は、 'q'キー押下イベントを外部コマンドの実行に置き換えます。問題は、その外部コマンドが「q」キーの押下もシミュレートする場合、バインディングが外部コマンドを再起動し、無限ループに陥ることです。
わかりました。見つけた解決策を投稿しますが、他の誰かがもっと良い解決策を持っているかもしれません。提示された答えに続いて ここ 、実行することによって押されたすべてのキーを見ることができます
xinput test <keyboad_id>
ターミナルで。次に、そのコマンドの出力を、「キーリリース24」(キーボードで「q」がリリースされたときの出力)のような文字列を監視するプログラムにパイプし、それが実行されたときに好きなことを実行するという単純なケースです。この文字列に一致します。
たとえば、「q」キーを押すと、次のような音が鳴ります。
xinput test <keyboard_id> | while read in ; do
[[ $in = "key press 24" ]] && aplay /usr/share/sounds/purple/alert.wav
done
その後、明らかに、他の入力も監視し、必要に応じて他の何かを実行できます。