カーネルモジュールでグラフィカルアプリケーションを実行しますか?

カーネルモジュールでグラフィカルアプリケーションを実行しますか?

現在私の問題は次のとおりです。私のAcer Nitroノートブックキーボードには、他のノートブックブランドにはない特別なキーであるNitroキーがあります。下の図では、バックスペースキーの横に奇妙なNキーがあることがわかります。これがニトロキーです。

ニトロボンド

Nitroボタンを押すたびに私のアプリケーションが表示されるようにGUIアプリケーションを開発したいと思います。 Ubuntu 22.04を使用しています。

私が見つけたものによれば、Nitroキーイベントをキャプチャし、そこからアプリケーションを起動するにはLKMを作成する必要があると思います。私はここに答えています(https://stackoverflow.com/questions/33836541/linux-kernel-how-to-capture-a-key-press-and-replace-it-with-another-key) 主なイベントをキャプチャします。

LKMでGTKアプリケーションを実行できるかどうかを知りたいです。つまり、ここにサンプルコードを入力してください(https://www.gtk.org/docs/getting-started/hello-world)私のカーネルモジュールコードから。また、私は目標を達成するための正しい道を進んでいるかどうかを知りたいです。

よろしくお願いします!

【書き直す】私が欲しいものを明確にするために:Acer Nitroノートブックには、通常、キーボードの色とファンの速度を変更するGUIを提供するNitrosenseというアプリケーションがあります。 Nitroキーを押すと、ユーザーにGUIが表示されます。ただし、Nitrosense アプリケーションは Windows でのみ使用できます。 Ubuntuにも同じ内容を書いてみたかったです。これまでキーボードの色やファンの速度を変更するためのさまざまなリポジトリが見つかりましたが、Nitroキーを押したときに開かれるアプリのリポジトリはありませんでした。 Ubuntu 22.04でGNOME 42を使用しています。私が望むのは、ログインしたユーザーがNitroキーを押すたびに操作を実行できるGUIが自動的に表示されることです。

[アップデート2]私もこの倉庫を見つけました。https://github.com/kphanipavan/PredatorNonSenseこれは私が他のAcerブランドについて心配していたのと同じことをしたいと思います。私はこれが役に立つと思います。

[アップデート3]使用して発見したイベントですevtest ニトロキーevtestイベント

ただし、試してもxev何も印刷されず、XサーバーがNitroキーイベントを認識しないと考えられます。 NitroキーイベントをXサーバーに送信するモジュールを作成するには、ドキュメントを探す必要がありますか?

キーボードショートカットを追加するために、GNOMEコントロールセンターのキーボード設定に移動しましたが、Nitroキーも認識しませんでした。これは、GNOME が X サーバーで実行されており、X サーバーが Nitro キーイベントを認識しないためかもしれません。

UPD2で言及されているリポジトリも見てきましたが、作成者が行った操作もログをgrep継続的にポーリングしてevtestキーが押されたことを確認することでした。このシェルコマンドを確認してください。https://github.com/kphanipavan/PredatorNonSense/blob/master/PNS.sh

私ができることは、キーボードデバイスファイルをポーリングし、Nitroが押されたことを確認する簡単なシステムサービスを作成することです。しかし、これは莫大な資源の無駄になる可能性があることに言及した。これに提案がありますか?

答え1

Nitroボタンを押すたびに私のアプリケーションが表示されるようにGUIアプリケーションを開発したいと思います。

したがって、Nitroボタンをカーネル入力レイヤーイベントとして公開する必要があります。その後、一部のユーザースペースアプリケーションがこれを機能させ、UIアプリケーションを起動できます。

Linuxはマルチユーザーであり、システムは1つのシステムと別のアカウントでGUIを使用する何十人もの人々がいる状況のために設計されています。したがって、単に「アプリを実行」することはできず、正しいユーザーを見つける必要があります。しかし、カーネルはユーザーとは何の関係もありません。

これは、特定のユーザーに対して何らかのアクションを取る必要があることを意味します。これを配置する最も簡単な場所は、特定のユーザーのウィンドウマネージャの設定です(私はあなただと思います)。

LKMでGTKアプリケーションを実行できるかどうかを知りたいです。

これは不可能で、動作しません。


リソース:

主なイベントが発生したことをevtest確認するために使用されます。Nitroもしそうなら、カーネルモジュールを書く必要はありません。次に、それを使用してxevXイベントに変換されたことを確認します。

キー押下イベントが発生しない場合は、実際のイベントを検索するのが面白いでしょう。

最後に、デスクトップでどのウィンドウマネージャを使用しているかを調べて、Googleでウィンドウマネージャのドキュメントを検索し、特定のキーストローク用のプログラムを起動する方法を学びます。


(しかし、通常、画像ではなく4つのスペースでインデントされたテキストを貼り付ける方が良いです)

これはコード425の一般的なキー押下および解除イベントですKEY_PRESENTATION

このコードをXキーシンボルにマッピングする独自のキーボードレイアウトを作成したい場合は、次の記事を読むことをお勧めします。信頼できないXKB構成ガイド(2004)。既存のレイアウトを新しい名前にコピーして変更し、システムパッケージが更新されたときに失われないようにします。

小さなユーザースペースプログラムからキーを受け取るには、カーネル入力階層ライブラリがある言語を選択してください。Python/dev/input/by-path/...キーボードに対応するシンボリックリンクを使用する必要があります。/dev/input/eventX数値は実行時に安定しません。

答え2

システムがすでにACPI Thermaldデーモンまたはその他を介して熱管理を構成している可能性があることを考慮すると、ファン速度でプレイしようとしません。


キーボードの色を変更する機能に関しては、これはいくつかの適切なデバイスドライバを介してのみ実行できると記録されています。
キーボード(ほとんどの間違いなく一部のHID互換デバイス)は一部を公開する必要があります。出力デバイス(とは異なります入力するキーボードキーの転送に関連するデバイス)キーボードにコマンドを送信するには、正しく処理する必要があります。

からインスピレーションを得ることができます。Acer Gaming RGBキーボードバックライトおよびターボモードLinuxカーネルモジュール

これは、デフォルトで/sys/devicesツリーにコントロールを公開するように設計する必要があります。

これらのコントロールの動作方法は、/sys/devices コントロールを大胆に反映することから gtk ウィジェットの概念に至るまで、ユーザー空間で決定します。
キーボードキー(特殊Nitroキーを含む)を使用してこの機能を有効にすることは、DEがデフォルトのシステム設定として扱うことができる簡単なキーマッピングの問題です。

関連情報