このページでは

組み込みLinuxデバイスでの入力

組み込みLinuxデバイスにおいて、ウィンドウシステムが存在しない場合、マウス、キーボード、およびタッチ入力は、evdev を介して、あるいはlibinput やtslib などのヘルパーライブラリを使用して直接読み取られます。ただし、この動作には、デバイスノード/dev/input/event* がユーザーによって読み取り可能であることが必要です。eglfs およびlinuxfb には、すべての入力処理コードがコンパイル済みで組み込まれています。

libinputの使用

libinputは、Qt独自のevdev 入力サポートに代わる、入力デバイスを処理するためのライブラリです。libinput の使用を有効にするには、Qtをコンパイルおよびビルドする際に、libudev およびlibinput の開発用ファイルが利用可能であることを確認してください。 キーボードのサポートが必要な場合は、xkbcommon も必要です。eglfs およびlinuxfb を使用する場合、これらのプラグインはデフォルトでlibinput を使用するため、追加の操作は必要ありません。libinput のサポートが利用できない場合、またはQT_QPA_EGLFS_NO_LIBINPUT 環境変数が設定されている場合は、代わりに Qt 独自のevdev ハンドラが使用されます。

libinput を介して入力イベントを受信する際、以下の環境変数を利用できます:

変数説明
QT_QPA_LIBINPUT_TOUCH_MATRIX適用する 3x3 変換行列の最初の 2 行を指定します。値はスペースで区切られている必要があります。詳細については、libinput のドキュメントを参照してください。

libinput を使用しない eglfs および linuxfb での入力

デバイスノード名などのパラメータは、QT_QPA_EVDEV_MOUSE_PARAMETERS 、QT_QPA_EVDEV_KEYBOARD_PARAMETERS 、およびQT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS という環境変数で設定できます。各エントリはコロンで区切ってください。これらのパラメータは、-plugin コマンドライン引数で設定を指定する代わりに使用でき、一部のバックエンドでは必須となります。ただし、eglfs およびlinuxfb は組み込みの入力ハンドラを使用するため、-plugin 引数は使用されません。

さらに、QT_QPA_EGLFS_DISABLE_INPUT (eglfs 用)またはQT_QPA_FB_DISABLE_INPUT (linuxfb 用)を1 に設定することで、組み込みの入力ハンドラを無効にすることができます。

マウス

QT_QPA_EGLFS_HIDECURSOR (eglfs の場合)またはQT_QPA_FB_HIDECURSOR (linuxfb の場合)が設定されておらず、Qt の libudev ベースのデバイス検出機能により、少なくとも 1 台のマウスが利用可能であると報告された場合、マウスカーソルが表示されます。libudev のサポートがない場合、環境変数によって明示的に無効にされていない限り、マウスカーソルは常に表示されます。

Qtがlibudev のサポートを有効にして構成されている場合、アプリケーションの実行中に入力デバイスの接続や取り外し(ホットプラグ)がサポートされます。その場合、configure実行時にsysrootにlibudev の開発用ヘッダーが存在します。

evdev マウスハンドラは、以下の追加パラメータをサポートしています:

パラメータ説明
/dev/input/...入力デバイスの名前を指定します。指定しない場合、Qtはlibudev を介するか、利用可能なノードを順に探索して適切なデバイスを検索します。
nocompressデフォルトでは、前回の Qt マウスイベントと比較して位置の変更につながらない入力イベントは圧縮されます。新しい Qt マウスイベントは、位置またはボタンの状態が変更された後にのみ送信されます。この動作を無効にするには、nocompress パラメータを設定してください。
dejitterジッターの制限値を指定します。デフォルトでは無効です。
grab1 に設定すると、Qt はそのデバイスを排他的に使用します。
abs一部のタッチスクリーンは絶対座標を報告し、タッチパッドと区別がつかない場合があります。この場合、abs を指定して、デバイスが絶対イベントを使用していることを示してください。

キーボード

evdev キーボードハンドラは、以下の追加パラメータをサポートしています:

パラメータ説明
/dev/input/...入力デバイスの名前を指定します。指定しない場合、Qt は `libudev ` 経由、または利用可能なノードを順巡回することで、適切なデバイスを探します。
grab入力デバイスのグラブを有効にします。
disable-zapzapキーのコードを無効にします。以下の「Ctrl+Alt+Backspace 」に関する注記を参照してください。
keymapカスタムキーボードマップファイルの名前を指定します。
enable-composeコンポジティングを有効にします。
repeat-delayカスタムキーリピート遅延を設定します。
repeat-rateカスタムキーリピートレートを設定します。

ターミナルセッションが無効化されていない組み込みLinuxシステムでは、入力イベントがQtアプリケーションとttyの両方で処理されるため、キー押下の挙動が混乱を招く可能性があります。これを回避するために、以下のオプションが利用可能です:

  • アプリケーションの起動時、EGLFS およびLinuxFB は、ttyのキーボードモードをK_OFF に設定することで、ターミナルのキーボードを無効化しようとします。これにより、キー入力がターミナルに送信されるのを防ぎます。標準の動作が必要な場合は、環境変数QT_QPA_ENABLE_TERMINAL_KEYBOARD を1 に設定してください。なお、これは、例えばssh を介してリモートコンソールからアプリケーションが起動され、ターミナルのキーボード入力が有効なままである場合にのみ機能することに注意してください。
  • 別の方法として、`QT_QPA_EVDEV_KEYBOARD_PARAMETERS` に `grab=1 ` を渡すことで、evdev キーボードハンドラの `grab ` パラメータを使用する方法があります。これにより、入力デバイスのグラブが試みられます。grab が成功した場合、Qt アプリケーションが実行されている限り、システム内の他のコンポーネントはそのデバイスからのイベントを受け取らなくなります。 このアプローチは、ttyデバイスへのアクセスを必要としないため、リモートで起動されるアプリケーションに適しています。
  • 最後に、多くの特殊な組み込みLinuxイメージの場合、そもそも標準のターミナルセッションを有効にしておくこと自体に意味がありません。 これらのターミナルセッションを無効にする方法の詳細については、お使いのビルド環境のドキュメントを参照してください。たとえば、Yocto Project を使用してイメージを生成する場合、SYSVINIT_ENABLED_GETTYS の設定を解除すると、getty プロセスが実行されなくなります。つまり、どの仮想ターミナルにも入力が行われなくなります。

デフォルトの組み込みキーマップでは不十分な場合、keymap パラメータを使用して別のキーマップを指定できます。

注: eglfs 用の他の設定ファイルと同様 、これらのレガシーなキーマップファイルは、デバイスまたはプラットフォームの作成者によって完全に制御および管理される「信頼されたコンテンツ」と見なされます。これらはデバイスのエンドユーザーに公開されることを想定しておらず、ユーザーが用意したキーマップファイルの読み込みを許可するものではありません。

警告: 組み込みのキーマップでは 、zapコード(Ctrl+Alt+Backspace )がアプリケーションを終了させます。このコードはキーボードハンドラによって処理されるため、アプリケーションには通知されず、これを阻止することもできません。したがって、キーボードのような入力デバイスによってユーザーインターフェースがシャットダウンされる可能性があるデバイスでは、QT_QPA_EVDEV_KEYBOARD_PARAMETERS で `disable-zap ` を渡してください。

注:コンソールの 切り替え(Ctrl+Alt+Fx )および再起動コードは、キーボードハンドラによって認識されますが、処理は行われないため、事実上無視されます。

カスタムキーマップを生成するには、`qttools ` モジュールに含まれる `kmap2qmap ` ユーティリティを使用します。ソースファイルは、カーネルの `loadkeys ` コマンドで認識される標準的な Linux `kmap ` 形式である必要があります。qmap ファイルは、以下のいずれかの方法で生成できます:

  • Linux Console Tools (LCT)プロジェクト。
  • X.orgのX11キーマップは、ckbcomp ユーティリティを使用してkmap 形式に変換できます。
  • kmap ファイルはプレーンテキストファイルであるため、手動で作成することも可能です。

kmap2qmap はコマンドラインプログラムであり、少なくとも2つのファイルをパラメータとして必要とします。最後のパラメータは生成される.qmap ファイルであり、それ以外のすべては入力用の.kmap ファイルとして解析されます。例:

kmap2qmap i386/qwertz/de-latin1-nodeadkeys.kmap include/compose.latin1.inc de-latin1-nodeadkeys.qmap

注: kmap2qmap は 、Linux カーネルがサポートするすべての(疑似)シンボルをサポートしているわけではありません。そのため、標準のキーマップを変換する際には、Show_Registers やHex_A などに関する警告がいくつか表示されますが、これらのメッセージは無視して構いません。

タッチ

最新のタッチスクリーンでは必要ありませんが、シングルタッチのみをサポートする一部の古い抵抗膜式タッチスクリーンでは、Linuxのマルチタッチプロトコルやイベントデバイスに依存するのではなく、tslib を使用するように切り替える必要がある場合があります。

tslib のサポートを有効にするには、QT_QPA_EGLFS_TSLIB (eglfs 用)またはQT_QPA_FB_TSLIB (linuxfb 用)という環境変数を1に設定してください。デバイスを変更するには、TSLIB_TSDEVICE という環境変数を設定するか、コマンドラインでデバイス名を指定してください。なお、tslib 入力ハンドラはマウスイベントを生成し、シングルタッチのみをサポートしますが、evdevtouch は、真のマルチタッチであるQTouchEvent イベントも生成します。

注:デバイスの 選択とフィルタリングは、完全にtslib に委ねられています。つまり、アプリケーションのプロセスにどのフィルタモジュールが読み込まれるかは、tslib 自身の設定ファイルによって決定され、Qt による選択や列挙は行われません。新しいデバイスにはlibinput を優先して使用してください。

evdev のタッチハンドラは、以下の追加パラメータをサポートしています:

パラメータ説明
/dev/input/...入力デバイスの名前を指定します。指定しない場合、Qtはlibudev を介して、または利用可能なノードを順に調べることで、適切なデバイスを探します。
rotate一部のタッチスクリーンでは、rotate を90、180、または270に設定して座標を回転させる必要があります。
invertx およびinverty入力イベントの X 座標または Y 座標を反転させるパラメータを指定します。

たとえば、アプリケーションを起動する前にQT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS に以下の値を渡すと、座標が反転したタッチデバイスが明示的に指定されます。これは、実際の画面とタッチスクリーンの向きが一致しない場合に役立ちます。

export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event5:rotate=180

ペン式タブレット

evdevtablet プラグインは、Wacom および類似のペン入力対応タブレットに対する基本的なサポートを提供します。このプラグインは、QTabletEvent イベントのみを生成します。これを有効にするには、環境変数に `QT_QPA_GENERIC_PLUGINS=evdevtablet ` を設定するか、あるいはコマンドラインで `-plugin evdevtablet ` 引数を指定してください。

Qtの自動デバイス検出(libudev または/dev/input/event* の探索に基づく)が機能しない、あるいは正常に動作しない場合は、QT_QPA_GENERIC_PLUGINS=evdevtablet:/dev/event1 のようなデバイスノードパラメータをこのプラグインに指定することができます。

入力デバイスのデバッグ

qt.qpa.input ロギングルールを有効にすることで、デバッグ出力に情報を表示することが可能です。例えば、QT_LOGGING_RULES 環境変数をqt.qpa.input=true に設定します。これは、どのデバイスが使用されているかを特定したり、デバイス検出の問題をトラブルシューティングしたりするのに役立ちます。

入力サブシステム(マウス、キーボード、タッチ)に関するより詳細なログを出力するには、以下のコマンドで入力関連のすべてのログカテゴリを有効にしてください:

export QT_LOGGING_RULES="qt.qpa.input.*=true;qt.qpa.events=true"

カスタムマウスカーソル画像の使用

eglfs には、32x32サイズのマウスカーソル画像が標準で付属しています。これでは不十分な場合、環境変数 `QT_QPA_EGLFS_CURSOR ` をJSONファイルの名前に設定することで、カスタムのカーソルアトラスを指定できます。このファイルは、Qtリソースシステムを介してアプリケーションに組み込むことも可能です。

たとえば、1行あたり8つのカーソル画像を含む埋め込みカーソルアトラスは、次のように指定できます:

{
  "image": ":/cursor-atlas.png",
  "cursorsPerRow": 8,
  "hotSpots": [
      [7, 2],
      [12, 3],
      [12, 12],
      ...
  ]
}

なお、画像はアトラス内に密に配置されていることが想定されています。カーソルの幅と高さは、画像の総サイズとcursorsPerRow の設定に基づいて決定されます。また、アトラスには、サポートされているすべてのカーソルに対応する画像が含まれている必要があります。

注: eglfs 用の他の設定ファイルと同様に、 カーソルアトラスは、デバイスまたはプラットフォームの作成者によって完全に制御および管理される「信頼されたコンテンツ」と見なされます。デバイスのエンドユーザーに公開されることは想定されていません。

image およびhotSpots キー、ならびにゼロ以外のcursorsPerRow はすべて必須であり、hotSpots には、サポートされているカーソル形状ごとに1つのエントリが含まれている必要があります。これらのいずれかが欠けているファイルは警告とともに拒否され、カーソルは無効化されます。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.