タッチスクリーン + 非ネイティブ解像度 = カーソルの位置がずれる

タッチスクリーン + 非ネイティブ解像度 = カーソルの位置がずれる

私は 1366x768 タッチスクリーンを搭載した HP ラップトップを持っています。800x600 の解像度を必要とするキオスク ソフトウェアを実行する必要があるため、xrandr で設定しました。

xrandr --output eDP-1 --mode 800x600

見た目は良いですね。xrandr がアスペクト比を維持するために画面の両側に黒いバーを追加したようです。

問題は、画面をタッチしたときに発生します。画面の中央から遠くをタッチするほど、カーソルがずれていきます。画面をタッチすると、カーソルの位置を計算するために、サイドの黒いバーが考慮されるようです。たとえば、物理画面の 25% をタッチすると、カーソルは表示画面の 25% に配置され、位置が揃います。

使ってみたこのリンクタッチスクリーンを調整しましたが、まったく違いはありませんでした。

答え1

すでにご存知のとおり、タッチ スクリーンの座標から画面の座標へのマッピングは、変換マトリックスによって制御されます。

通常、システムはタッチ スクリーンが画面領域全体に広がるものと想定しており、これはほとんどの状況で正しいです。ただし、表示領域がタッチ領域よりも大きい場合 (複数のモニターなど) または小さい場合は、その変換マトリックスを変更する必要があります。

Coordinate Transformation Matrix従来は、を介して設定する必要がありましたxinput。しかし、 を使用しているためlibinput、次の 2 つの違いがあります。

  • このxinput物件はlibinput Calibration Matrix
  • 変換行列の計算方法は異なる

判断するとReinderien の投稿「逆行列変換を行うのが適切です」。

正直どうやってやるのか分からないのですが、幸いなことに彼はxcal、タッチスクリーンを調整します。

前提条件:

python3、tkinter、numpy (sudo apt-get install python3 pyhton3-tk python3-numpyターミナルで実行してインストールします)。

ダウンロードxcalそしてそれを実行します。

関連情報