Тачпад не отключается при вводе текста на HP трансформере-ноутбуке.

Вопрос или проблема

У меня есть следующий (частичный) вывод команды 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. У вас уже есть скрипт, который эффективно решает эту задачу, и он работает следующим образом:

  1. Определение идентификаторов устройств и свойств: Сначала вы определяете идентификатор устройств и свойств тачпада с помощью xinput, чтобы знать, какие именно параметры изменять.

  2. Написание скрипта: Скрипт keyd-touchpad-control.sh активно управляет состоянием тачпада (включает/выключает), основываясь на событиях от клавиатуры и временных интервалах.

  3. Создание и настройка службы: Вы создали пользовательскую службу системного демона systemd, чтобы автоматизировать выполнение этого скрипта при старте системы.

  4. Настройка прав доступа через sudo: С целью избегания запроса пароля при исполнении скрипта и команды xinput, вы настроили права в конфигурации sudoers.

Применение

Для внедрения решения, которое вы разработали, следуйте следующим шагам:

  1. Проверьте идентификаторы устройств: Убедитесь, что идентификаторы устройств (тачпада и его свойств) актуальны, используя команды xinput и xinput list-props.

  2. Настройте и протестируйте скрипт: Разместите ваш скрипт в указанном пути (/usr/local/bin/keyd-touchpad-control.sh), убедитесь, что все параметры (например, Device ID и Property ID) прописаны правильно.

  3. Создайте и запустите службу systemd: Создайте конфигурационный файл службы в $HOME/.config/systemd/user/, затем выполните команды, чтобы активировать и запустить её.

  4. Настройте sudo: Откройте файл sudoers и добавьте необходимые строки с вашим именем пользователя, чтобы избегать запроса пароля.

  5. Тестируйте работу: Убедитесь, что тачпад правильно отключается и включается во время печати на клавиатуре. Проверьте работу службы после перезагрузки системы.

Этот метод создаёт временное решение, которое может быть полезным, пока не будут внесены изменения в драйверы или конфигурации для полноценной поддержки системы. Учитывая бизнес-контекст и возможные ограничения корпоративных политик, может потребоваться утверждение от ваших IT-специалистов.

Оцените материал
Добавить комментарий

Капча загружается...