На планшетах вроде CHUWI Hi10Go под KUbuntu сенсор Goodix Capacitive TouchScreen часто «ездит» осями: касания перевёрнуты или сдвинуты. Разовая правка через xinput живёт до перезагрузки, потом матрица сбрасывается. Ниже рабочий скрипт калибровки и два варианта автозапуска: через «Системные настройки» KDE и через unit systemd.
Что понадобится
- Утилита
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.
- Откройте меню приложений → Системные настройки.
- Раздел Автозапуск (иногда путь: «Запуск и завершение» → «Автозапуск»).
- Кнопка Добавить → Скрипт.
- В поле команды укажите:
/usr/local/bin/fix-touchscreen.sh
- Имя, например:
Fix Touchscreen. - Включите опцию запуска при входе в систему.
- Сохраните (ОК / Применить).
Автозапуск через 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 каждый раз.
