Linux仮想コンソールでキーボードショートカットを設定する方法はありますか?
たとえば、tty1に移動して++Ctrlキーの組み合わせを押すと、スクリプトを実行したいとAlt思います。H/usr/bin/hello.sh
理想的には、ログインする前にもショートカットを使用できます(この場合は、私が指定したユーザーの権限で実行されます)。これがこれを達成する唯一の方法であれば、カーネルを修正することも気にしません。そしてシェルスクリプトである必要はありません。通常のELFバイナリでも、システムコールを実行するカーネルモジュールでもかまいません。
ユースケースの例
- コンソールでWebを検索していますが、
links
画面の明るさを下げたいです。偶然に明るさを下げるキーであるFn+を押して単一のキーコードを生成し、ファイルに何かを書いて明るさを下げるプログラムを実行します。End/sys
- 私はコンソールテキストエディタにいて、バックグラウンドミュージックが再生されるのを聞いています
mpd
。 (再生/一時停止)キーを押すと⏯キーコードが再生成され、mpd
現在の曲を一時停止するように指示するプログラムを実行する効果があります。
解決策
次のようなデクターの考えを使用/dev/input
して作成しました。欲張り(イベントデーモン)がこの目的に使用されます。アプリはバックグラウンドで実行でき、ログイン前とX内を含むどこにいてもキーボードに代わることができます。
ベストアンサー1
部分的な答え(開曜日のみでテストされていません):
デフォルトのキーボードに対応するすべてのデバイスを受信する悪魔を作成します/dev/input
(シンボリックリンクがあるので見てください)。持っている初期化システム(systemd、sysvなど)を使用して、指定したユーザーで悪魔を起動します。
悪魔は定義されているように主要なイベントを処理します。イベントコードを入力してくださいh(またはソースコードを見るevtest
)。これには、目的のキーシーケンスを認識し、そのシーケンスが完了すると指定したプロセスを生成するステートマシンがあります。
これはログインする前に使用できる必要があり、仮想コンソールにログインしているユーザーに関係なく、常に同じユーザーとして実行されます。また、Xで同じユーザーとして実行されます。
あるいは、シェルで何かをしたい場合は、使用したり、tmux
同様のプログラムを使用したりできます。キーシーケンスバインディング行動に。tmux
仮想コンソールにログインするたびに自動的に起動し、新しいセッションに接続することも可能でなければならないと思いますが、まだこれについては見ていません。
これはログイン前には機能しませんが、キーボードフォーカスを持つグラフィック端末エミュレータでも機能し、スクリプトはログインしたユーザーとして実行されます。