Сенсорный экран + нестандартное разрешение = смещенный курсор

Сенсорный экран + нестандартное разрешение = смещенный курсор

У меня ноутбук HP с тактильным экраном 1366x768. Мне нужно запустить какое-то программное обеспечение киоска, которому нужно разрешение 800x600, поэтому я устанавливаю его с помощью xrandr:

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

Выглядит хорошо, похоже, xrandr добавил черные полосы по обеим сторонам экрана, чтобы сохранить соотношение сторон.

Проблема возникает, когда я касаюсь экрана. Чем дальше я касаюсь от центра экрана, тем больше курсор смещается. Похоже, когда я касаюсь экрана, он учитывает боковые черные полосы, чтобы вычислить, где должен быть курсор. Скажем, я касаюсь 25% физического экрана, курсор помещается на 25% в видимый экран, поэтому он выравнивается.

Я пробовал использоватьэта ссылкадля калибровки сенсорного экрана, но это вообще ничего не меняет.

решение1

Как вы уже сами поняли, преобразование координат сенсорного экрана в экранные координаты управляется матрицей преобразования.

Обычно система предполагает, что сенсорный экран охватывает всю область экрана, что верно в большинстве случаев. Однако, если область отображения больше (например, несколько мониторов) или меньше области касания, вам необходимо изменить эту матрицу преобразования.

Традиционно вам пришлось бы устанавливать Coordinate Transformation Matrixчерез xinput. Но поскольку вы используете libinput, есть два отличия:

  • Недвижимость xinputназываетсяlibinput Calibration Matrix
  • Матрица преобразования рассчитывается по-другому

Судя поПост Reinderien, «правильнее всего сделать обратное матричное преобразование».

Честно говоря, я не знаю, как это сделать, но, к счастью, он предоставляет скрипт, который называетсяxcal, который откалибрует сенсорный экран для вас.

Предварительные условия:

python3, tkinter, numpy (устанавливается путем запуска sudo apt-get install python3 pyhton3-tk python3-numpyв терминале).

Скачатьxcalи выполнить его.

Связанный контент