Калибровка сенсорного экрана astra linux

1. Основная информация

Для настройки акселерометра требуется создать правило udev, определяющее привязку данных, получаемых от акселерометра, к осям координат устройства. Эта привязка может быть представлена в виде таблицы (матрицы) 3х3, содержащей коэффициенты коррекции для данных, получаемых от акселерометра.

За взаимодействие с датчиком поворота отвечает IIO подсистема ядра Linux, в частности утилита iio-sensor-proxy — https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/#iio-sensor-proxy.

Ниже представлена таблица, содержащая матрицу, используемую для калибровки экрана ( Подробнее см.: https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/#accelerometer-orientation).

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

Красным в таблице отмечены участки, которые не нужно редактировать (не участвуют в калибровке).

ENV=="*accel*", ENV="x1,y1,z1;x2,y2,z2;x3,y3,z3"

По умолчанию, iio-sensor-proxy использует такую (единичную) матрицу:

Значения интерпретируется в виде udev правила следующим образом:

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

2. Настройка акселерометра: проверка наличия целевой матрицы

Целевая матрица используется для калибровки датчика поворота. По умолчанию, она должна находится в описании устройств из ACPI — Advanced Configuration and Power Interface (см.: https://ru.wikipedia.org/wiki/ACPI ).

Для проверки наличия целевой матрицы устройства, необходимо получить DSL дамп (описание устройств из ACPI), путем вызова следующих команд:

cat /sys/firmware/acpi/tables/DSDT > dsdt.dat iasl -d dsdt.dat

iasl — Intel ACPI компилятор/декомпилятор, используется для работы с ACPI и не только, подробнее см.: https://linux.die.net/man/1/iasl.

вызов iasl -d dsdt.dat
дизассемблирует dsdt.dat в dsdt.dsl (формат ASL)

ASL — ACPI Source Language, исходный язык для определения и написания методов ACPI, см.: https://wiki.osdev.org/AML.

В полученном файле (dsdt.dsl) необходимо найти матрицу по умолчанию:

  1. Если известны DEVICE_ID/VENDOR_ID, необходимо найти данное устройство
  2. Затем у устройства необходимо найти метод ROTM (Rotation Matrix).

В случае, если целевая матрица не была обнаружена — необходимо перейти к другому способу калибровки, описанному в п.3.

Рассмотрим пример для планшета Lenovo IdeaPad 3IGL5-LTE:

Method (ROTM, 0, NotSerialized) < Name (RBUF, Package (0x03) < "0 -1 0", "1 0 0", "0 0 1" >) Return (RBUF) /* \_SB_.PCI0.I2C5.DEV_.ROTM.RBUF */ >

Отсюда мы видим, что целевая матрица для данной модели:

В случае если полученная матрица некорректно откалибровала устройство, необходимо произвести калибровку по алгоритму, приведенному ниже (п.3).

3. Настройка акселерометра: калибровка при помощи udev правила

  1. Определить желаемое нормальное положение устройства (портретная либо альбомная ориентация). Нормальное положение зависит от нужд пользователя. За нормальное можно принять любое положение, и отталкиваясь от этого, проводить настройку. Можно также в качестве нормальной использовать ориентацию, в которой отображается экран при включении устройства (для планшетов iRU, например, это альбомный режим);
  2. Если режим отображения экрана не соответствует положению устройства, то определить, на сколько нужно осуществить поворот изображения для приведения его в правильное положение, и выполнить указанные далее изменения элементов матрицы для получения нужного режима отображения экрана.
Читайте также:  No preserve root linux

3.1. Настройка акселерометра: применение единичной матрицы

Первым шагом необходимо задать начальную (единичную) матрицу в виде udev правила, помещенного в файл /etc/udev/rules.d/99-astra-orientation.rules (все дальнейшие действия по калибровке экрана будут сводится к редактированию этого файла):

Для применения правил необходимо перезагрузить устройство.

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

После того, как была применена начальная матрица, необходимо выяснить, на сколько градусов нужно осуществить поворот изображения, для приведения его в правильное положение.

Все дальнейшие изменения по повороту применимы только к начальной (единичной) матрице (п. 3.1).

Источник

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

Тачскрин работает, но неправильно, нужно откалибровать. Установил и запустил 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 настройка сети netplan

Источник

Проблема калибровки тачскрина ноутбука 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).

Читайте также:  Операционная система альт линукс спт

—> 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