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

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

現在私の問題は次のとおりです。私の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数値は実行時に安定しません。

おすすめ記事