Автозапуск калибровки сенсора CHUWI Hi10Go в KUbuntu

На планшетах вроде CHUWI Hi10Go под KUbuntu сенсор Goodix Capacitive TouchScreen часто «ездит» осями: касания перевёрнуты или сдвинуты. Разовая правка через xinput живёт до перезагрузки, потом матрица сбрасывается. Ниже рабочий скрипт калибровки и два варианта автозапуска: через «Системные настройки» KDE и через unit systemd.

CHUWI Hi10Go: сенсорный экран в KUbuntu

Что понадобится

  • Утилита xinput (в KUbuntu обычно уже есть).
  • Имя устройства: Goodix Capacitive TouchScreen (проверьте у себя через xinput list).
  • Матрица преобразования координат. В этом примере: 0 1 0 -1 0 1 0 0 1 под перевёрнутые оси. Если ориентация другая, матрицу нужно подобрать отдельно.
  • Терминал и любой редактор (nano, vim и т.п.).

Задача не «откалибровать один раз», а сделать так, чтобы после входа в сессию (или после загрузки) матрица применялась сама.

Скрипт калибровки

Создайте файл:

sudo nano /usr/local/bin/fix-touchscreen.sh

Содержимое:

#!/bin/bash
# Переменные окружения для доступа к X-серверу
export DISPLAY=:0
export XAUTHORITY=/home/$USER/.Xauthority

# Ждём инициализации устройств
sleep 15

# ID устройства Goodix Capacitive TouchScreen
DEVICE_ID=$(xinput list | grep "Goodix Capacitive TouchScreen" | grep -o "id=[0-9]*" | grep -o "[0-9]*" | head -n 1)

if [ -n "$DEVICE_ID" ]; then
    xinput set-prop "$DEVICE_ID" "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1
fi
  • sleep 15 пауза, пока input-устройства появятся в X.
  • ID ищется динамически через xinput list, чтобы не привязываться к «застывшему» номеру.
  • Если имя тачскрина у вас другое, поправьте строку в grep.

Права на запуск:

sudo chmod +x /usr/local/bin/fix-touchscreen.sh

Проверка вручную:

/usr/local/bin/fix-touchscreen.sh
xinput list-props <ID_устройства> | grep "Coordinate Transformation Matrix"

ID смотрите в xinput list. Ожидаемые значения матрицы (с плавающей точкой): 0.000000, 1.000000, 0.000000, -1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000.

Автозапуск через «Системные настройки» KDE

Для обычной графической сессии Plasma это самый простой и стабильный путь: скрипт стартует уже в контексте пользователя и X.

  1. Откройте меню приложений → Системные настройки.
  2. Раздел Автозапуск (иногда путь: «Запуск и завершение» → «Автозапуск»).
  3. Кнопка ДобавитьСкрипт.
  4. В поле команды укажите:
/usr/local/bin/fix-touchscreen.sh
  • Имя, например: Fix Touchscreen.
  • Включите опцию запуска при входе в систему.
  • Сохраните (ОК / Применить).
KUbuntu: автозапуск скрипта калибровки тачскрина

Автозапуск через systemd

Нужен, если хотите unit на уровне системы. Минус: сервис должен «дотянуться» до X (DISPLAY, XAUTHORITY, задержка до графической сессии).

Файл unit:

sudo nano /etc/systemd/system/fix-touchscreen.service

Содержимое (подставьте своё имя пользователя вместо USERNAME):

[Unit]
Description=Fix touchscreen orientation on boot
After=graphical.target

[Service]
Type=oneshot
User=USERNAME
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/USERNAME/.Xauthority"
ExecStartPre=/bin/sleep 60
ExecStart=/usr/local/bin/fix-touchscreen.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  • User= и путь к .Xauthority ваши, не копируйте чужой логин.
  • ExecStartPre=/bin/sleep 60 запас времени, пока поднимется графическая сессия. При необходимости увеличьте.

Подключение unit:

sudo systemctl daemon-reload
sudo systemctl start fix-touchscreen.service
sudo systemctl enable fix-touchscreen.service

Проверка после перезагрузки

sudo reboot

После входа (или после boot, если используете systemd) снова проверьте матрицу:

xinput list-props <ID_устройства> | grep "Coordinate Transformation Matrix"

Если значения совпали с ожидаемыми и курсор/касания ведут себя нормально, калибровка закрепилась.

Типичные проблемы

Скрипт срабатывает слишком рано

Увеличьте sleep в скрипте (15 → 30) или ExecStartPre в unit (60 → 90). Устройство может появляться с задержкой после логина.

Нет доступа к X-серверу

ls -l ~/.Xauthority

Если файла нет, на части сессий Xauthority не используется. Тогда уберите export XAUTHORITY=... из скрипта и/или строку Environment="XAUTHORITY=..." из unit. Для KDE-автозапуска обычно хватает DISPLAY из окружения сессии.

ID устройства «прыгает»

Скрипт сам ищет ID по имени, поэтому жёстко прописывать номер не нужно. Важно, чтобы имя в grep совпадало с выводом xinput list.

libinput перетирает настройки

Иногда драйвер или udev-правила сбрасывают свойства. Увеличьте задержку; в сложных случаях имеет смысл вешать применение матрицы на событие появления устройства (udev + скрипт). Для Hi10Go чаще хватает sleep и автозапуска из сессии KDE.

Кратко

  • Скрипт /usr/local/bin/fix-touchscreen.sh выставляет Coordinate Transformation Matrix для Goodix.
  • Для KUbuntu/Plasma удобнее автозапуск из «Системных настроек».
  • systemd запасной вариант, если нужен unit на boot, с корректным User/DISPLAY/XAUTHORITY и паузой.
  • После reboot проверяйте матрицу через xinput list-props.

После этого сенсор на CHUWI Hi10Go в KUbuntu должен работать с нужной ориентацией уже при входе, без ручного xinput каждый раз.

Источники и ссылки


Комментарии загружаются…