В SCO нет настройки сенсорной панели, она выполняется на стороне интеграций

Тестирование сенсора

В Artix:SCO реализована возможность тестирования тачскрина (пункт "Тест тачскрина" в меню "Сервис" -> "Тест оборудования"). В процессе тестирования тачскрина можно определить правильность калибровки сенсора, рисуя на нем линии пальцами. Рисование на экране может осуществляться одновременно несколькими пальцами. Подвижная кнопка выхода позволяет проверять правильность калибровки тачскрина на всех участках экрана.

Для проверки сенсорной панели необходимо выполнить команду:

DISPLAY=:255 XAUTHORITY=/home/autologon/.Xauthority sudo -u autologon xev -geometry 5000x5000

Будут логироваться выполняемые события.

MotionNotify event, serial 28, synthetic NO, window 0x1200001,
    root 0x127, subw 0x0, time 6675569, (738,334), root:(740,336),
    state 0x10, is_hint 0, same_screen YES

ButtonPress event, serial 28, synthetic NO, window 0x1200001,
    root 0x127, subw 0x0, time 6675569, (738,334), root:(740,336),
    state 0x10, button 1, same_screen YES

MotionNotify event, serial 28, synthetic NO, window 0x1200001,
    root 0x127, subw 0x0, time 6676204, (738,334), root:(740,336),
    state 0x110, is_hint 0, same_screen YES

ButtonRelease event, serial 28, synthetic NO, window 0x1200001,
    root 0x127, subw 0x0, time 6676204, (738,334), root:(740,336),
    state 0x110, button 1, same_screen YES

В примере ButtonPress и ButtonRelease - события нажатия и отжатия на экране. root:(740,336) - координаты события.

Возможные проблемы и способы их решения

Не калибруется сенсор в Artix

В Artix до некоторой версии была некорректно реализована калибровка сенсорных панелей, отсутствовала привязка сенсора к экрану. Проявляется при наличии нескольких мониторов или при повороте экрана. Подробнее можно прочитать на wiki.

Для исправления надо добавить скрипт:

#!/bin/bash

SCREEN=VGA1

IFS=$'\n'
for dev in $(xinput_calibrator --list | cut -d'"' -f 2); do
    xinput map-to-output "$dev" "$SCREEN"
done

Заменить VGA1 на нужный. Используемый монитор можно посмотреть при помощи команды:

/linuxcash/cash/bin/graphicsmode.py -q

Сделать этот скрипт исполняемым:

chmod +x /linuxcash/cash/conf/autostart/touch.sh

Удалить уже существующий файл калибровки:

rm -f /usr/share/X11/xorg.conf.d/99-calibration.conf

И перезапустить программу.

Не калибруется сенсор ILITEK ILITEK-TP

В зависимости от конкретного устройства настройка может отличаться.

Если интерфейс сенсорного экрана распознается системой как default, но работает некорректно, то необходима дополнительная настройка:

  1. Удалить уже существующий файл калибровки:

    rm -f /usr/share/X11/xorg.conf.d/99-calibration.conf


  2. Добавить параметр fbcon=rotate:1 в значение GRUB_CMDLINE_LINUX_DEFAULT в файле /etc/default/grub:

    GRUB_DEFAULT=0
    GRUB_TIMEOUT_STYLE=hidden
    GRUB_TIMEOUT=3
    GRUB_DISTRIBUTOR='lsb_release -i -s 2> /dev/null || echo Debian'
    GRUB_CMDLINE_LINUX_DEFAULT="text nopti fbcon=rotate:1"
    GRUB_CMDLINE_LINUX=""


  3. Создать файл /usr/share/X11/xorg.conf.d/1-fbdev.conf:

    Section "Device"
    		Identifier "LCD"
    		Driver "fbdev"
    		Option "fbdev" "/dev/fb0"
    		Option "Rotate" "CW"
    EndSection


  4. Запустить команду:

    update-grub 
    


  5. Перезапустить программу и откалибровать экран в сервисном меню.
  6. Добавить в файл /usr/share/X11/xorg.conf.d/99-calibration.conf в секцию "InputClass" поворот координат в строке Option:

    Section "InputClass"
    		Identifier "calibration"
    		MatchProduct "ILITEK ILITEK-TP"
    		Option "TransformationMatrix" "0 1 0 -1 0 1 0 0 1"
    EndSection


    0 – "1 0 0  0 1 0 0 0 1"
    90 – "0 1 0 -1 0 1 0 0 1"
    180 – "-1 0 1 0 -1 1 0 0 1"
    270 – "0 -1 1 1 0 0 0 0 1"


  7. Перезапустить программу.

Привязка двух одинаковых сенсоров к мониторам в Artix

В Artix не поддерживается привязка двух абсолютно одинаковых сенсоров при работе с двумя мониторами. 

Для исправления надо добавить скрипт:

#!/bin/bash

logFile=/tmp/touchscreenmap.devices
rm -f $logFile

declare -A map
# Сопоставление адреса сенсора и монитора
map['pci-0000:00:14.0-usb-0:4.3:1.0']='eDP-1'
map['pci-0000:00:14.0-usb-0:4.1:1.0']='DP-1'

IFS=$'\n'
for dev in $(xinput_calibrator --list); do
    id=${dev#*id=}
    node=$(xinput list-props $id | grep 'Device Node' | cut -d'"' -f 2)
    bus=$(udevadm info --query=property --name=$node | grep ID_PATH= | sed -e "s/^ID_PATH=//")
    echo "$dev -> $bus" >> $logFile
    screen=${map["$bus"]}
    [ -z "$screen" ] && continue

    xinput map-to-output "$id" "$screen"
done

Сделать этот скрипт исполняемым:

chmod +x /linuxcash/cash/conf/autostart/touch.sh

Перезапустить программу.

В файле /tmp/touchscreenmap.devices необходимо скопировать адреса устройств и сопоставить с мониторами в строках 8-9.

Названия мониторов можно посмотреть при помощи команды:

/linuxcash/cash/bin/graphicsmode.py -q

После изменения скрипта необходимо еще раз перезапустить программу для применения мапинга.

Перестает работать тач на Wintec 

На Wintec периодически отваливается touchscreen. Производитель порекомендовал изменить настройки BIOS.

Также есть рекомендация подключать кабель тача к первому USB порту на плате.

Автоматическая привязка при переподключении устройства

Если настройки bios не помогли, то можно добавить udev правило и systemd сервис для автоматического подключения.

Для этого надо создать файл /etc/udev/rules.d/99-touch.rules

В нем заменить значения ID_VENDOR_ID и ID_MODEL_ID на необходимые. В примере для Wintec, но надо проверять.

ACTION=="add" SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="29bd", ENV{ID_MODEL_ID}=="4101", RUN+="/bin/systemctl --no-block start touch.service"

Создать файл /etc/systemd/system/touch.service

[Unit]
Description=Touchscreen mapping

[Service]
Type=oneshot
Environment=DISPLAY=:255
Environment=XAUTHORITY=/home/autologon/.Xauthority
ExecStart=/usr/bin/env bash -c "sleep 1 && sudo -u autologon /linuxcash/cash/conf/autostart/touch.sh"

[Install]
WantedBy=multi-user.target

Выполнить

systemctl daemon-reload
udevadm control --reload-rules