В 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 до некоторой версии была некорректно реализована калибровка сенсорных панелей, отсутствовала привязка сенсора к экрану. Проявляется при наличии нескольких мониторов или при повороте экрана. Подробнее можно прочитать на 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 |
И перезапустить программу.
В зависимости от конкретного устройства настройка может отличаться. |
Если интерфейс сенсорного экрана распознается системой как default
, но работает некорректно, то необходима дополнительная настройка:
Удалить уже существующий файл калибровки:
rm -f /usr/share/X11/xorg.conf.d/99-calibration.conf |
Добавить параметр 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="" |
Создать файл
:/usr/share/X11/xorg.conf.d/1-fbdev.conf
Section "Device" Identifier "LCD" Driver "fbdev" Option "fbdev" "/dev/fb0" Option "Rotate" "CW" EndSection |
Запустить команду:
update-grub |
Добавить в файл /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" |
В 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 периодически отваливается 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 |