web-dev-qa-db-ja.com

仮想端末のキーボードショートカット

Linux仮想コンソールでキーボードショートカットを構成する方法はありますか?

たとえば、tty1に移動した場合、キーの組み合わせを押します Ctrl+Alt+H、スクリプト/usr/bin/hello.shを実行してください。


理想的には、ショートカットはログインする前でも利用できるはずです(この場合、私が指定したユーザーの権限でショートカットが実行されます)。カーネルを変更する唯一の方法であれば、カーネルを変更してもかまいません。また、シェルスクリプトである必要はなく、通常のELFバイナリ、またはシステムコールを行うカーネルモジュールでもかまいません。


ユースケースの例

  1. コンソールにいて、linksのようなものでWebを閲覧していて、画面の明るさを下げたいと思っています。押す Fn+End、これはたまたま輝度ダウンキーであり、単一のキーコードを生成し、/sysファイルに何かを書き込むことによって輝度を下げるプログラムを実行します。
  2. 私はコンソールテキストエディタを使用していて、mpdによって再生されている音楽をバックグラウンドで聴いています。私は押します  (再生/一時停止)キー。これも単一のキーコードを生成し、mpdに信号を送信して現在の曲を一時停止するプログラムを実行する効果があります。

解決

dirkt's idea を使用した/dev/inputを使用して、この目的で evd (イベントデーモン)を作成しました。アプリケーションはバックグラウンドで起動でき、ログイン前やX内など、どこにいてもキーボードを引き継ぎます。

7
rid

部分的な答え(それは単なる概要であり、テストされていないため):

何でも聞くデーモンを書く/dev/inputデバイスはメインキーボードに対応します(シンボリックリンクがあります。それらを見てください)。使用しているinitシステム(systemd、sysvなど)を使用して、指定したユーザーとしてそのデーモンを起動します。

デーモンは、 input-events-codes.h で定義されているように主要なイベントを処理します(またはevtestのソースコードを見てください)。必要なキーシーケンスを認識し、そのようなシーケンスが完了すると、指定したプロセスを生成するステートマシンがあります。

これは、ログインする前に使用可能である必要があり、仮想コンソールにログインしているユーザーに関係なく、常に同じユーザーとして実行されます。 Xでも同じユーザーとして実行されます。


代わりに、シェルで何かを実行したい場合:tmuxまたは同様のプログラムを使用して、アクションに キーシーケンスをバインド できます。仮想コンソールにログインするたびに、自動的にtmuxを開始して新しいセッションに接続することも可能であると思いますが、私はそれを調べていません。

これはログイン前には機能しませんが、キーボードフォーカスのあるグラフィカルターミナルエミュレーターでも機能し、ログインしたユーザーとしてスクリプトを実行します。

3
dirkt