В качестве единственного личного компьютера у меня служит несколько нестандартный ноутбук - 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

Указано 3 мишени из 4
Указано 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

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

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

Комментарии (13)


  1. PaltrP
    25.12.2022 18:23

    Благодарю! Я под Win сделал для своей системы автоматическую калибровку тач-скрина, собирался на Linux переходить, но сходу не нашел решения, но, похоже, оно сама меня нашло, еще раз спасибо!


    1. red_dragon
      26.12.2022 12:14

      А автоматическая калибровка, это как? Ну, или что имеется в виду?


      1. PaltrP
        27.12.2022 00:34

        У меня система, разворачивается на каждый покерный стол в казино, потому модель тач-скрина известна, но бывает такое, что настройки сбиваются и приходилось калибровать их вручную. Потому для win была написала автоматическая калибровка, если слетела - все автоматом чинится, т.к. железо известно.


        1. red_dragon
          27.12.2022 04:14

          Я немного не про то. Насколько я знаю, чтобы откалибровать резистивный тач, необходимо в него ткнуть механически, причём более одного раза. Поэтому мне стало интересно, как это реализовано у Вас.


          1. PaltrP
            27.12.2022 09:01

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

            Под win я этот вопрос решил, начал гуглить под Ubuntu - не нашел, на StackOverflow тоже никто не ответил. А в этой статье упоминается утилита, которая этим занимается - калибрует тач, и она - с исходниками, а значит расковыряем и повторим :)


  1. Johan_Palych
    25.12.2022 18:59

    xcalibrate fails to identify the xinput device
    Есть форк

    https://github.com/Kippykip/xcalibrate


    1. anttv Автор
      25.12.2022 19:41

      Благодарю за дополнение.

      У меня и так всё заработало. Но потенциально - полезно.


  1. r0g3r
    25.12.2022 23:43
    -1

    > и возможные пути решения
    Ставим Windows и включаем WSL.

    /thread


  1. red_dragon
    26.12.2022 12:16

    Наверное не с Linux случилось что-то, а резизтивный тач постарел и начал уплывать.


    1. masai
      26.12.2022 15:23

      Но в Windows по словам автора всё работает как раньше.


      1. red_dragon
        26.12.2022 15:27
        +1

        После калибровки экрана. Однако, может автор ответит, к чему гадать.


        1. masai
          26.12.2022 20:51

          А, точно! Я пропустил фразу про калибровку.


    1. anttv Автор
      26.12.2022 20:56

      нет, с тачскрином всё в порядке. Калибровка также не работает на CF19mk1 . В винде всё работает.