В SCO нет настройки сенсорной панели, она выполняется на стороне интеграций. Здесь описаны способы решения некоторых проблем.

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

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

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

/linuxcash/cash/conf/autostart/touch.sh
#!/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 не поддерживается привязка двух абсолютно одинаковых сенсоров при работе с двумя мониторами. 

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

/linuxcash/cash/conf/autostart/touch.sh
#!/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.

  • Перейти в Chipset → South Bridge → USB configuration
  • XHCI установить в Disable
  • USB2.0(EHCI) установить в Enable
  • Сохранить в выйти (F4)

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

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

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

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) - координаты события.

  • No labels