Линукс калибровка сенсорного экрана

KurtJacobson / touchscreen_calibration.md

Unfortunately xinput-calibrator does not work at all for calibrating a touchscreen in Debian9. This is apparently because X server now uses libinput to handle input devices instead of evdev. I spent huge amount of trying to fiddling with xinput-calibrator and 99-calibration.conf files until I finely found this issue on GitHub that gave me some hints as how to proceed. This is mostly for my own reference, but I hope it might also help others in the same situation.

This not not seem to be installed by defaults on Debian9

$ sudo apt-get install xinput

Determine the screen size

You probably already know this, but if you have multiple screens they might be see as one big screen. So to determine the total size run

This will print out a good bit of information, but what you are interested in is the current vales in the first line, which will look something like this:

Screen 0: minimum 320 x 200, current 1440 x 900, maximum 8192 x 8192

Determine the name of the touch device

Next step it to find the touch device’s name

Look for the touch device in the Virtual core pointer section. In my case the device name is Elo TouchSystems 2700 IntelliTouch(r) .

⎡ Virtual core pointer [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer [slave pointer (2)] ⎜ ↳ Elo TouchSystems 2700 IntelliTouch(r) [slave pointer (2)] ⎜ ↳ 2.4G Mouse [slave pointer (2)] ⎣ Virtual core keyboard [master keyboard (2)] ↳ Virtual core XTEST keyboard [slave keyboard (3)] . 

were is the name you determined in the last step.

Confirm that the list of properties includes near the top a property called Coordinate Transformation Matrix . If it does not, you probably have the wrong device name.

Set the Coordinate Transformation Matrix

The screen is calibrated using a Coordinate Transformation Matrix , which defaults to the identity matrix.

for convenient entry, the matrix is flatted into a single line like this

were the valuse seem to map like this

[hscale] [vskew] [hoffset] [hskew] [vscale] [voffset] 0 0 1

Here is a very nice interactive tool for visualizing the effect of the various values: https://codepen.io/GottZ/full/d73f2f844b52b91b7457febce2d1b18c/

Apply the calibration matrix by saying

Читайте также:  Eternal blue metasploit kali linux

xinput set-prop » ‘Coordinate Transformation Matrix’ 1.04 0 -0.02 0 1.04 -0.02 0 0 1

I just experimented with the values until I had the scree calibrated, it only took a few iterations to get so the pointer was exactly under were I touched.

Источник

Калибровка тачскрина

Тачскрин работает, но неправильно, нужно откалибровать. Установил и запустил xinput_calibrator , ткнул 4 точки. Ничего не изменилось (хотя на этом этапе уже должно правильно работать!) Попробовал по указанию программы сохранить настройки в файлик /usr/share/X11/xorg.conf.d/99-calibration.conf :

Section "InputClass" Identifier "calibration" MatchProduct "Silead GSLx680 Touchscreen" Option "MinX" "67097" Option "MaxX" "401" Option "MinY" "-8966" Option "MaxY" "62759" Option "SwapXY" "0" # unless it was already set to 1 Option "InvertX" "0" # unless it was already set Option "InvertY" "0" # unless it was already set EndSection 

В этой директории и другие похожие файлы есть, вроде 70-wacom.conf и пр. После ребута так же ничего не изменилось. Попробовал и в /etc/X11/xorg.conf.d/ закинуть (директорию пришлось создать) – так же ничего не поменялось.

Вот еще информация, которая может помочь: xinput -list

⎡ Virtual core pointer [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer [slave pointer (2)] ⎜ ↳ SteelSeries Rival Gaming Mouse [slave pointer (2)] ⎜ ↳ SteelSeries Rival Gaming Mouse [slave pointer (2)] ⎜ ↳ Silead GSLx680 Touchscreen [slave pointer (2)] ⎜ ↳ ImPS/2 Logitech Wheel Mouse [slave pointer (2)] ⎣ Virtual core keyboard [master keyboard (2)] ↳ Virtual core XTEST keyboard [slave keyboard (3)] ↳ Power Button [slave keyboard (3)] ↳ Video Bus [slave keyboard (3)] ↳ Power Button [slave keyboard (3)] ↳ SteelSeries Rival Gaming Mouse [slave keyboard (3)] ↳ PC Cam [slave keyboard (3)] ↳ AT Translated Set 2 keyboard [slave keyboard (3)] ↳ SteelSeries Rival Gaming Mouse [slave keyboard (3)] 

(Мой девайс под номером 13)

Device 'Silead GSLx680 Touchscreen': Device Enabled (155): 1 Coordinate Transformation Matrix (157): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Calibration Matrix (314): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Calibration Matrix Default (315): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Send Events Modes Available (279): 1, 0 libinput Send Events Mode Enabled (280): 0, 0 libinput Send Events Mode Enabled Default (281): 0, 0 Device Node (282): "/dev/input/event9" Device Product ID (283): 0, 0 

Попробовал поиграться с set-prop – тоже безрезультатно. Свойство вроде применяется (?), но эффекта нет. xinput set-prop 13 —type=atom —format=32 InvertX 1 , xinput list-props 13 :

Device 'Silead GSLx680 Touchscreen': Device Enabled (155): 1 Coordinate Transformation Matrix (157): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Calibration Matrix (314): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Calibration Matrix Default (315): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Send Events Modes Available (279): 1, 0 libinput Send Events Mode Enabled (280): 0, 0 libinput Send Events Mode Enabled Default (281): 0, 0 Device Node (282): "/dev/input/event9" Device Product ID (283): 0, 0 InvertX (578): "PRIMARY" (1) 

Этот тред я читал, но не понял, как тамошний гуру всё разрулил, да и у того человека калибровка уже работала, а у меня ничего.

Читайте также:  Сервер linux через vpn

Источник

Проблема калибровки тачскрина ноутбука Toughbook CF-19 под управлением GNU/Linux и возможные пути решения

В качестве единственного личного компьютера у меня служит несколько нестандартный ноутбук — Panasonic Toughbook CF-19Mk5. За годы использования в качестве ОС на нём использовал различные дистрибутивы Linux. В начале практически любой дистрибутив исправно и в условно полном объёме работал с железом. В том числе без всякой отдельной калибровки чётко работал резистивный тачскрин ноутбука. Однако года 4 назад произошло непонятное мне изменение в Linux, и с какого то момента калибровка съехала. Собственно, нескольким попыткам решения проблемы и посвящена заметка. Пишу по памяти, так сказать с чистого листа.

Тачскрин на ноутбуке — элемент пусть не первой необходимости, но иногда бывает полезен чтобы не скролить курсор из угла в угол — тыкнул куда надо стилусом и всё. Но когда ты тыкаешь стилусом в точку а курсор оказывается где-то внизу слева от этой точки, то это нервирует. Проявилось это после одного из обновлений используемого тогда Mint Linux.

Поиски решения начал с установки винчестера с комплектной Win XP и калибровки экрана. В среде Win всё работало чётко. Поиск решения в сообществе mint выявил, что съезжающая калибровка у toughbook в linux — проблема старинная. Из описанных решений можно выделить использование утилиты из состава продуктов проекта X.Org — xinput_calibrator

При запуске утилиты от sudo на экране последовательно отрисовывается 4 мишени которые надо нажать стилусом. Окно закрывается и в терминале отрисовывается текст, который надо записать в соответствующий конфиг:

xinput_calibrator
Calibrating standard Xorg driver «Fujitsu Component USB Touch Panel»
current calibration values: min_x=0, max_x=65535 and min_y=0, max_y=65535
If these values are estimated wrong, either supply it manually with the —precalib option, or run the ‘get_precalib.sh’ script to automatically get it (through HAL).

Читайте также:  Linux sum file size

—> Making the calibration permanent copy the snippet below into ‘/etc/X11/xorg.conf.d/99-calibration.conf’
Section «InputClass»
Identifier «calibration»
MatchProduct «Fujitsu Component USB Touch Panel»
Option «MinX» «90»
Option «MaxX» «65412»
Option «MinY» «-64»
Option «MaxY» «65299»
EndSection

Создал соответствующий файл, записал туда вывод калибровщика — и никакого результата.

Некоторое время спустя пробовал Astra Linux — там xinput_calibrator сработал исправно. Но в целом мне дистрибутив не понравился и я перебрался на Manjaro. Тут вопрос калибровки тачскрина снова встал «в полный рост». Опять пробовал вышеупомянутую утилиту, пробовал калибровку вписывать по очередной найденной инструкции. Без какого либо положительного результа.

Однако через некоторое время подключил сторонний репозиторий. Изучал что там есть и наткнулся на сборку малоизвестной альтернативы xinput_calibrator. Программа называется xcalibrate

страница программы https://github.com/reinderien/xcalibrate
Программа написана на Python c использованием tk

Кстати автор написал эту программу потому что на его старом ноутбуке Panasonic Toughbook CF-29 не работала программа xinput_calibrator 🙂

Pointer devices:
ID Name
4 Virtual core XTEST pointer
9 Fujitsu Component USB Touch Panel
11 PS/2 Generic Mouse

Old calibration:
[[ 1.126767 0. -0.089242]
[ 0. 1.175728 -0.037727]
[ 0. 0. 1. ]]

Calibrate? [y]: y
Point count (min 3) [4]: 4
Disable rotation? [y]: y

Указано 3 мишени из 4

/usr/bin/xcalibrate:210: FutureWarning: rcond parameter will change to the default of machine precision times max(M, N) where M and N are the input matrix dimensions.
To use the future default and silence this warning we advise to pass rcond=None, to keep using the old, explicitly pass rcond=-1.
m_transform, residuals, rank, singular = np.linalg.lstsq(m_mouse, m_screen)

New calibration:
[[ 1.12516318 0. -0.08927897]
[ 0. 1.18247197 -0.03973887]
[ 0. 0. 1. ]]
Quality (should be at least 3): 4.5

Test? [y]: y
Point count (min 3) [4]: 12

Use calibration? [y]: y
Create a file (for example 99-libinput-ts-calib.conf) in /usr/share/X11/xorg.conf.d/ and put in the following

Section «InputClass»
Identifier «calibration»
MatchProduct «Fujitsu Component USB Touch Panel»
Option «CalibrationMatrix» «1.1251631837961777 0.0 -0.08927897169357178 0.0 1.18247197158914 -0.03973886907469457 0.0 0.0 1.0»
EndSection

Собственно, в уже существующий файл добавил вывод и всё сразу заработало!

Надеюсь, заметка окажется кому-нибудь полезной.

Источник

Оцените статью
Adblock
detector