Вопрос или проблема
У меня есть следующий (частичный) вывод команды libinput list-devices
Device: ELAN07FC:00 04F3:32EF Mouse Kernel: /dev/input/event4 Group: 5 Seat: seat0, default Capabilities: pointer Tap-to-click: n/a Tap-and-drag: n/a Tap drag lock: n/a Left-handed: disabled Nat.scrolling: disabled Middle emulation: n/a Calibration: n/a Scroll methods: *button Click methods: none Disable-w-typing: n/a Disable-w-trackpointing: n/a Accel profiles: flat *adaptive custom Rotation: n/a Device: ELAN07FC:00 04F3:32EF Touchpad Kernel: /dev/input/event5 Group: 5 Seat: seat0, default Size: 134x84mm Capabilities: pointer gesture Tap-to-click: disabled Tap-and-drag: enabled Tap drag lock: disabled Left-handed: disabled Nat.scrolling: disabled Middle emulation: disabled Calibration: n/a Scroll methods: *two-finger edge Click methods: *button-areas clickfinger Disable-w-typing: enabled Disable-w-trackpointing: enabled Accel profiles: flat *adaptive custom Rotation: n/a Device: ELAN2514:00 04F3:42C9 Kernel: /dev/input/event6 Group: 6 Seat: seat0, default Size: 332x226mm Capabilities: touch Tap-to-click: n/a Tap-and-drag: n/a Tap drag lock: n/a Left-handed: n/a Nat.scrolling: n/a Middle emulation: n/a Calibration: identity matrix Scroll methods: none Click methods: none Disable-w-typing: n/a Disable-w-trackpointing: n/a Accel profiles: n/a Rotation: 0.0 Device: ELAN2514:00 04F3:42C9 Stylus Kernel: /dev/input/event9 Group: 6 Seat: seat0, default Size: 343x215mm Capabilities: tablet Tap-to-click: n/a Tap-and-drag: n/a Tap drag lock: n/a Left-handed: disabled Nat.scrolling: n/a Middle emulation: n/a Calibration: identity matrix Scroll methods: none Click methods: none Disable-w-typing: n/a Disable-w-trackpointing: n/a Accel profiles: none Rotation: n/a Device: ELAN2514:00 04F3:42C9 Keyboard Kernel: /dev/input/event10 Group: 6 Seat: seat0, default Capabilities: keyboard Tap-to-click: n/a Tap-and-drag: n/a Tap drag lock: n/a Left-handed: n/a Nat.scrolling: n/a Middle emulation: n/a Calibration: n/a Scroll methods: none Click methods: none Disable-w-typing: n/a Disable-w-trackpointing: n/a Accel profiles: n/a Rotation: 0.0 Device: ELAN2514:00 04F3:42C9 Mouse Kernel: /dev/input/event11 Group: 6 Seat: seat0, default Capabilities: pointer Tap-to-click: n/a Tap-and-drag: n/a Tap drag lock: n/a Left-handed: disabled Nat.scrolling: disabled Middle emulation: n/a Calibration: n/a Scroll methods: *button Click methods: none Disable-w-typing: n/a Disable-w-trackpointing: n/a Accel profiles: flat *adaptive custom Rotation: n/a
Мне нужно как-то сделать корректировку или как-то сделать так, чтобы устройство Mouse идентифицировалось как тачпад, который должен быть отключен во время набора текста, потому что это встроенный тачпад, это не мышь, и он должен быть отключен…
Так что бы опция Disable-w-typing
была включена, как на ELAN07FC:00 04F3:32EF Touchpad
Мне не удалось отключить тачпад другим способом, поэтому я создал сервис, который отслеживает, когда клавиатура печатает, и устанавливает определенные свойства тачпада в 0, а через 500 мс после последнего действия на клавиатуре включает его, в моем случае это было так:
sudo xinput set-prop 10 368 1
1 – включено, 0 – отключено…
Чтобы определить ID вашего тачпада, введите:
sudo xinput
А чтобы определить конкретный id для включения/выключения:
xinput list-props 10
В моем случае id 10 был тачпадом…
Ниже содержимое скрипта .sh, поместите его как:
sudo nano /usr/local/bin/keyd-touchpad-control.sh
с следующим содержимым:
#!/bin/bash
# Конфигурация
KEYBOARD_DEVICE_ID=10 # Замените на ваш ID устройства
PROPERTY_ID=189 # Замените на ваш ID свойства
DEBOUNCE_MS=500 # Время в миллисекундах, считая, что набор текста завершен
LOG_FILE="/var/log/keyd-touchpad-control.log" # По желанию: файл журнала для отладки
# Отслеживание состояния
last_event_time=0
typing_active=0
# Функция отключения тачпада
disable_touchpad() {
if [[ $typing_active -eq 0 ]]; then
sudo xinput set-prop "$KEYBOARD_DEVICE_ID" "$PROPERTY_ID" 0
typing_active=1
echo "$(date): Тачпад отключен" | tee -a "$LOG_FILE"
fi
}
# Функция включения тачпада
enable_touchpad() {
if [[ $typing_active -eq 1 ]]; then
sudo xinput set-prop "$KEYBOARD_DEVICE_ID" "$PROPERTY_ID" 1
typing_active=0
echo "$(date): Тачпад включен" | tee -a "$LOG_FILE"
fi
}
# Мониторинг событий keyd
keyd monitor | while read -r event; do
# Проверка, будет ли событие от виртуальной клавиатуры keyd
if echo "$event" | grep -q "keyd virtual keyboard"; then
# Обнаружено событие от виртуальной клавиатуры keyd
disable_touchpad
last_event_time=$(date +%s%3N) # Текущее время в миллисекундах
else
# Проверка, прошло ли время задержки с момента последнего события
current_time=$(date +%s%3N)
if [[ $((current_time - last_event_time)) -ge $DEBOUNCE_MS ]]; then
enable_touchpad
fi
fi
done
Затем я создал пользовательский сервис systemctl следующим образом:
[Unit]
Description=Keyd Touchpad Control Service
[Service]
ExecStart=sudo /usr/local/bin/keyd-touchpad-control.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
Поместите его в
~/.config/systemd/user/keyd-touchpad-control.service
Настройте sudo, чтобы разрешить выполнение этого следующим образом:
sudo visudo
Добавьте следующее:
youruser ALL=(ALL) NOPASSWD: /usr/local/bin/keyd-touchpad-control.sh
youruser ALL=(ALL) NOPASSWD: /usr/bin/xinput
Замените youruser на вашего фактического пользователя
затем установите и запустите сервис следующим образом:
systemctl --user daemon-reload
systemctl --user enable keyd-touchpad-control.service
systemctl --user restart keyd-touchpad-control.service
Ответ или решение
Ваш вопрос касается отключения тачпада при наборе текста на конвертируемом ноутбуке HP. Учитывая детали, предоставленные вами, мы можем предложить комплексный подход к решению данной проблемы.
Теория
Основное препятствие заключается в определении мониторинга устройств ввода и корректном использовании их свойств. Основная цель — это конфигурация так, чтобы тачпад автоматически отключался в процессе ввода текста, предотвращая случайные касания.
Пример
Вы привели пример, как вы пытались решить проблему путем автоматизации. Ваш подход заключается в создании службы, которая отслеживает события от клавиатуры и управляет состоянием тачпада при помощи утилиты xinput
. У вас уже есть скрипт, который эффективно решает эту задачу, и он работает следующим образом:
-
Определение идентификаторов устройств и свойств: Сначала вы определяете идентификатор устройств и свойств тачпада с помощью
xinput
, чтобы знать, какие именно параметры изменять. -
Написание скрипта: Скрипт
keyd-touchpad-control.sh
активно управляет состоянием тачпада (включает/выключает), основываясь на событиях от клавиатуры и временных интервалах. -
Создание и настройка службы: Вы создали пользовательскую службу системного демона
systemd
, чтобы автоматизировать выполнение этого скрипта при старте системы. -
Настройка прав доступа через
sudo
: С целью избегания запроса пароля при исполнении скрипта и командыxinput
, вы настроили права в конфигурацииsudoers
.
Применение
Для внедрения решения, которое вы разработали, следуйте следующим шагам:
-
Проверьте идентификаторы устройств: Убедитесь, что идентификаторы устройств (тачпада и его свойств) актуальны, используя команды
xinput
иxinput list-props
. -
Настройте и протестируйте скрипт: Разместите ваш скрипт в указанном пути (
/usr/local/bin/keyd-touchpad-control.sh
), убедитесь, что все параметры (например, Device ID и Property ID) прописаны правильно. -
Создайте и запустите службу
systemd
: Создайте конфигурационный файл службы в$HOME/.config/systemd/user/
, затем выполните команды, чтобы активировать и запустить её. -
Настройте
sudo
: Откройте файлsudoers
и добавьте необходимые строки с вашим именем пользователя, чтобы избегать запроса пароля. -
Тестируйте работу: Убедитесь, что тачпад правильно отключается и включается во время печати на клавиатуре. Проверьте работу службы после перезагрузки системы.
Этот метод создаёт временное решение, которое может быть полезным, пока не будут внесены изменения в драйверы или конфигурации для полноценной поддержки системы. Учитывая бизнес-контекст и возможные ограничения корпоративных политик, может потребоваться утверждение от ваших IT-специалистов.