Калибровка ручки и касания через xinput

Введение

Это результат моего предыдущего вопроса.

Когда я подключаю планшет к проектору, из-за смены разрешения перо уже не откалибровано. Я нашел этот wiki-пост от ArchLinux, и он делает именно то, что мне нужно сделать, за исключением чисел, которые немного не работают. Вот что я сделал:

Из xrandr я получаю:

Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767 LVDS1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 277mm x 156mm 1366x768 60.02 + 1280x720 60.00 1024x768 60.00* 1024x576 60.00 ... 

Один с + – максимальное разрешение, поддерживаемое моим монитором, и одно с * – текущее разрешение. Итак, я завершаю

 total_width = 1024 touch_area_width = 1366 touch_area_x_offset = (1024 - 1366) /2 = -171 

Вероятно, это то, что я делаю неправильно, потому что в конце я не получаю именно то, что мне нужно, но почти там.

Затем я смотрю на вывод списка xinput

 ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Logitech M325 id=9 [slave pointer (2)] ⎜ ↳ Wacom ISDv4 E6 Pen stylus id=10 [slave pointer (2)] ⎜ ↳ Wacom ISDv4 E6 Finger id=11 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)] ⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)] ⎜ ↳ Wacom ISDv4 E6 Pen eraser id=16 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Sleep Button id=8 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=12 [slave keyboard (3)] ↳ ThinkPad Extra Buttons id=15 [slave keyboard (3)] 

Строки 4,5 и 8 – это те, которые мне нужны, поэтому для ИМЯ УСТРОЙСТВА для меня будет «Wacom ISDv4 E6 Pen stylus», «Wacom ISDv4 E6 Finger» и «Wacom ISDv4 E6 Pen eraser».

xinput list-props "device name" | grep Matrix xinput list-props "device name" | grep Matrix должна отображать текущую матрицу трансформации координат. По умолчанию используется идентификационная матрица, которая указана строками:

 Coordinate Transformation Matrix (138): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 

Матрица преобразования – это матрица

 [ c0 0 c1 ] [ 0 c2 c3 ] [ 0 0 1 ] 

В учебнике сказано, чтобы вычислить матрицу следующим образом: (числа справа – это те, которые я рассчитал для своего случая)

 c0 = touch_area_width / total_width = 1366/1024 = 1.333984375 c2 = touch_area_height / total_height = 768/768 = 1 c1 = touch_area_x_offset / total_width = -171/768 = -0.22265625 c3 = touch_area_y_offset / total_height = 0/768 = 0 

Причина c2 = 1 и c3 = 0 для меня в том, что в моей ситуации высота прекрасна, поэтому мне нужно только масштабировать и сдвигать ширину.

Все, что мне нужно сделать, это представить мою матрицу как массив строк, то есть:

 c0 0 c1 0 c2 c3 0 0 1 

и это для меня становится:

 1.333984375 0 -0.22265625 0 1 0 0 0 1 

Затем мне понадобится следующая команда:

 xinput set-prop "DEVICE NAME" --type=float "Coordinate Transformation Matrix" 1.333984375 0 -0.22265625 0 1 0 0 0 1 

Это почти дает мне то место, где я хочу быть, но это все еще немного. Итак, я сделал несколько проб и ошибок, чтобы получить следующие номера: 1.345 0 -0.17 0 1 0 0 0 1

Вот мой вопрос

Как найти точные значения матрицы преобразования? Мне нужно работать с разными разрешениями, и я не могу повторить процесс проб и ошибок для всех из них!

Interesting Posts

почему команда запускается в приглашении, а не в скрипте?

Есть ли способ активировать конкретную вкладку хром через bash?

В чем разница в использовании xinput и synclient для деактивации сенсорной панели в X

Изменение сетевых настроек Redhat От DHCP до STATIC IP через конфигурационные файлы

Лучший способ сбора случайной выборки из коллекции файлов

Перезаписать определенную строку в файле 2 с содержимым файла 1

И операция по 2 столбцам (даты доступа и mofidy) в файле в linux

размещение данных с использованием cURL в скрипте

Почему ./configure дает мне неудовлетворенные пакеты, которых не существует?

перенаправить звук (микрофон) через ssh, как позвонить через ssh?

Поиск разрешений для файлов, кроме 755

«Dnf install vidalia» на Fedora Core 24?

Имена названий Guake по умолчанию

Настройка беспроводного интерфейса для нескольких местоположений

Openensuse удаляет модуль ядра

Linux и Unix - лучшая ОС в мире.