В качестве единственного личного компьютера у меня служит несколько нестандартный ноутбук - 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).
--> 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 :)
Запустил калибратор:
>xcalibrate
Pointer devices:
ID Name
4 Virtual core XTEST pointer
9 Fujitsu Component USB Touch Panel
11 PS/2 Generic Mouse
Device to calibrate [9]: 9
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
/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
Собственно, в уже существующий файл добавил вывод и всё сразу заработало!
Надеюсь, заметка окажется кому-нибудь полезной.
Комментарии (13)
Johan_Palych
25.12.2022 18:59xcalibrate fails to identify the xinput device
Есть форкhttps://github.com/Kippykip/xcalibrate
anttv Автор
25.12.2022 19:41Благодарю за дополнение.
У меня и так всё заработало. Но потенциально - полезно.
red_dragon
26.12.2022 12:16Наверное не с Linux случилось что-то, а резизтивный тач постарел и начал уплывать.
masai
26.12.2022 15:23Но в Windows по словам автора всё работает как раньше.
anttv Автор
26.12.2022 20:56нет, с тачскрином всё в порядке. Калибровка также не работает на CF19mk1 . В винде всё работает.
PaltrP
Благодарю! Я под Win сделал для своей системы автоматическую калибровку тач-скрина, собирался на Linux переходить, но сходу не нашел решения, но, похоже, оно сама меня нашло, еще раз спасибо!
red_dragon
А автоматическая калибровка, это как? Ну, или что имеется в виду?
PaltrP
У меня система, разворачивается на каждый покерный стол в казино, потому модель тач-скрина известна, но бывает такое, что настройки сбиваются и приходилось калибровать их вручную. Потому для win была написала автоматическая калибровка, если слетела - все автоматом чинится, т.к. железо известно.
red_dragon
Я немного не про то. Насколько я знаю, чтобы откалибровать резистивный тач, необходимо в него ткнуть механически, причём более одного раза. Поэтому мне стало интересно, как это реализовано у Вас.
PaltrP
Там сбивается соответствие дисплей-устройство ввода. Сами по себе тачи у меня работают без калибровки - сразу при подключении все нормально, но поскольку у меня используется несколько дисплеев - иногда тач начинает ассоциироваться с дисплеем без тача и тачи идут на него. Чтобы это исправить - приходилось идти настройки, где тачем надо было тыкнуть нужный монитор и тогда винда начинала перенаправлять тачи куда надо. Информация об этом соответствии хранится в реестре - достаточно проверить, что нужный дисплей соответствует тачу и если нет - поправить.
Под win я этот вопрос решил, начал гуглить под Ubuntu - не нашел, на StackOverflow тоже никто не ответил. А в этой статье упоминается утилита, которая этим занимается - калибрует тач, и она - с исходниками, а значит расковыряем и повторим :)