バックグラウンドで実行されているシェルスクリプトで特定のキーが押されたことを確認する方法はありますか?キーまたは2つまたは3つのキーの組み合わせを押すと、すぐに曲のプレイリストを再生する必要があるシェルスクリプトを実行するとします。シェルスクリプトはcrontabに追加されるため、端末では実行されません。では、このシェルスクリプトで押されたキーをキャプチャすることは可能ですか?
答え1
あなたの要求は明確ではありません。しかし、私が正しく理解したら、まず試してみることをお勧めしますautokey-gtk
。事前定義されたキーセットを押すたびに実行されるスクリプトをPythonとして作成できるPythonベースのアプリケーション。これがあなたの要件に合っていることを確認してください。
まあ、手動で実行したい場合は、基本的に2つの方法があります。
解決策#1:キーロギング方法
キーボードのキーストロークを記録し続け、特定の組み合わせを押したときにイベントを開始するスクリプトを作成できます。レコードキーの場合は、以下のコードを確認できます。パイキーロガー。
解決策#2:キーバインダー方法
まず、キーをバインドする方法が必要です。 1つの方法は次のとおりです。キークリップ。または、設定で「キーボードショートカット」を使用して単にキーをバインドすることもできます。特定のキーセットを押すたびに、ホームフォルダ内の一部のXYZファイルにいくつかのテキストを書き込むスクリプトが実行されます。
その後、crontabを使用して起動されたスクリプトは、1秒ごとにこのXYZファイルを読み取ります。ファイルの内容に応じて、スクリプトは別の操作を開始します。
答え2
通常、フォーカスがあるアプリケーションのみがキーイベントを受け取ります。私たちは、グラフィック環境を備えたデスクトップシステムについて話しています。そうですか?
デスクトップ環境でイベントをキャプチャできます。これは、gnome、kde、xfce、または他の環境を実行しているかどうかによって多少異なりますが、通常、これらの環境には一般設定アプリケーション、検索キーボード、ショートカットからアクセスできるショートカットハンドラがあります。 、等。
ここから、バックグラウンドで実行されているアプリケーションのPIDを確認できますmypid=$(pidof myscript.sh)
。その後、ユーザー信号(SIGUSR1、SIGUSR2 - 参照man 7 signal
)をスクリプトに送信できます(man kill
はい、実際に参照)。 、以下をkill
使用してフレンドリーな信号を送信できます。しかし、私の考えでは、crontabでスクリプトを起動し、キーを押すのを待って、その信号を処理するのが複雑すぎます。簡単:ショートカットから直接スクリプトを実行します。
デスクトップ環境を教えてください。設定が見つからない場合は、キーの組み合わせを変更してみてください。