Введение
Сенсорные экраны на устройствах под управлением Linux, таких как KUbuntu, иногда требуют ручной калибровки. Например, на планшетах Chuwi с сенсорным экраном Goodix Capacitive TouchScreen координаты касаний могут быть перевёрнуты. Для исправления этого можно использовать утилиту xinput, но настройки сбрасываются после перезагрузки. В этой статье мы разберём, как настроить автозапуск скрипта для калибровки сенсорного экрана в KUbuntu двумя способами: через «Системные настройки» KDE и как сервис systemd. Это руководство подойдёт для пользователей KUbuntu 24.04 и других версий KDE Plasma.
Что нужно для калибровки сенсорного экрана
Для настройки сенсорного экрана в KUbuntu тебе понадобится:
- Утилита
xinput(обычно предустановлена в KUbuntu). - Имя устройства сенсорного экрана (в нашем случае — Goodix Capacitive TouchScreen).
- Матрица преобразования координат (в данном примере:
0 1 0 -1 0 1 0 0 1). - Базовые знания работы с терминалом и редактором, например
nano.
Проблема: после перезагрузки настройки, заданные через xinput, сбрасываются. Мы автоматизируем их применение, чтобы сенсорный экран работал корректно сразу после входа в систему.
Создание скрипта для калибровки
Шаг 1: Создай файл скрипта
Открой терминал и создай файл скрипта:
sudo nano /usr/local/bin/fix-touchscreen.sh
Шаг 2: Добавь код скрипта
Вставь следующий код:
#!/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даёт системе время на инициализацию.- Скрипт автоматически определяет ID устройства через
xinput list.
Шаг 3: Сделай скрипт исполняемым
Задай права на выполнение:
sudo chmod +x /usr/local/bin/fix-touchscreen.sh
Шаг 4: Проверь работу скрипта
Запусти скрипт вручную:
/usr/local/bin/fix-touchscreen.sh
Убедись, что сенсорный экран работает корректно, проверив матрицу:
xinput list-props <ID устройства> | grep "Coordinate Transformation Matrix"
Настройка автозапуска через «Системные настройки» KDE
Этот способ идеально подходит для пользователей KDE Plasma, так как скрипт запускается в контексте графической сессии.
Шаг 1: Открой «Системные настройки»
- Нажми на меню приложений (в левом нижнем углу).
- Выбери «Системные настройки».
Шаг 2: Перейди в раздел «Автозапуск»
- Найди раздел «Автозапуск» (или «Запуск и завершение» → «Автозапуск»).
Шаг 3: Добавь новый скрипт
- Нажми «Добавить» → «Скрипт».
- В поле «Команда» укажи:
/usr/local/bin/fix-touchscreen.sh
- В поле «Имя» укажи «Fix Touchscreen».
- Убедись, что опция «Запускать при входе в систему» включена.
- Нажми «ОК» или «Применить».
Настройка автозапуска через сервис systemd
Если ты хочешь запускать скрипт на этапе загрузки системы, используй systemd. Этот метод требует дополнительных настроек для доступа к X-серверу.
Шаг 1: Создай файл сервиса
Создай файл сервиса:
sudo nano /etc/systemd/system/fix-touchscreen.service
Шаг 2: Добавь описание сервиса
Вставь код:
[Unit] Description=Fix touchscreen orientation on boot After=graphical.target [Service] Type=oneshot User=<твоё_имя_пользователя> Environment="DISPLAY=:0" Environment="XAUTHORITY=/home/<твоё_имя_пользователя>/.Xauthority" ExecStartPre=/bin/sleep 60 ExecStart=/usr/local/bin/fix-touchscreen.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
- Замени
<твоё_имя_пользователя>на своё имя (например,drslon). ExecStartPre=/bin/sleep 60добавляет задержку, чтобы графическая сессия успела загрузиться.
Шаг 3: Обнови конфигурацию systemd
sudo systemctl daemon-reload
Шаг 4: Запусти и включи сервис
Запусти сервис:
sudo systemctl start fix-touchscreen.service
Включи автозапуск:
sudo systemctl enable fix-touchscreen.service
Проверка работы после перезагрузки
Шаг 1: Перезагрузи систему
sudo reboot
Шаг 2: Проверь настройки
После входа в систему (или загрузки, если используешь systemd) убедись, что матрица применилась:
xinput list-props <ID устройства> | grep "Coordinate Transformation Matrix"
Ожидаемый результат: 0.000000, 1.000000, 0.000000, -1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000.
Решение возможных проблем
Скрипт запускается слишком рано
Увеличь задержку в скрипте (с sleep 15 на sleep 30) или в сервисе (с ExecStartPre=/bin/sleep 60 на ExecStartPre=/bin/sleep 90).
Нет доступа к X-серверу
Проверь наличие файла ~/.Xauthority:
ls -l ~/.Xauthority
Если его нет, удали строку export XAUTHORITY из скрипта или Environment="XAUTHORITY" из сервиса.
ID устройства меняется
Скрипт автоматически определяет ID через xinput list, так что это не должно быть проблемой.
Драйвер libinput сбрасывает настройки
Попробуй увеличить задержку или настроить запуск через udev (дополнительная настройка).
Заключение
Автозапуск скрипта для калибровки сенсорного экрана в KUbuntu можно настроить через «Системные настройки» KDE или как сервис systemd. Первый способ проще и надёжнее для графических сессий, второй даёт больше контроля на системном уровне. Теперь твой сенсорный экран Goodix Capacitive TouchScreen на Chuwi будет работать корректно сразу после загрузки или входа в систему!