Как отключить сенсорную панель при использовании trackpoint на ThinkPad?

Ноутбуки ThinkPad (например, X230, который я использую) имеют и trackpoint и сенсорную панель. Сенсорная панель отключена при вводе.

Однако, когда я использую trackpoint, я часто касаюсь сенсорной панели также и генерирую щелчки мышью, которых я хотел бы избежать. У кого-либо есть идея, как отключают щелчки мышью по сенсорной панели, когда trackpoint используется?

Править: также, кто-то может объяснить как опция отключения сенсорной панели при вводе работ? Что делается негласно? Действительно ли это - xinput команда конфигурации, и если да, который?

EDIT2: разъяснение; вручную отключающая Сенсорная панель (даже с ярлыком) не является проблемой здесь. Это должно работать точно так же, как опция "отключают сенсорную панель при вводе", так как я использую Touchpad и Trackpoint попеременно (наиболее часто, я использую Сенсорную панель для прокрутки и Trackpoint для перемещения курсора).

21
задан 31 August 2012 в 14:11

3 ответа

Отключение сенсорной панели, когда клавиатура используется

Эта функция выполняется syndaemon утилита, от xserver-xorg-input-synaptics пакет. Можно установить опции, такие как время простоя, частота запросов, и т.д. (см. справку во время выполнения):

Usage: syndaemon [-i idle-time] [-m poll-delay] [-d] [-t] [-k]
  -i How many seconds to wait after the last key press before
     enabling the touchpad. (default is 2.0s)
  -m How many milli-seconds to wait until next poll.
     (default is 200ms)
  ...
  -t Only disable tapping and scrolling, not mouse movements.

Вот исходный код для syndaemon.c.

  • Важные функции keyboard_activity(...) и main_loop(...)
  • keyboard_activity использует вызов API XQueryKeyMap для получения текущего состояния клавиатуры (1 бит за ключ) и затем выдерживает сравнение, к последнему (старому) состоянию; если они отличаются, это возвращается 1
  • main_loop опросы keyboard_activity каждый m миллисекунды, и на основе "прошлого времени действия" и ли keyboard_activity TRUE или FALSE возвратов, это решает, запретить ли или включить сенсорную панель.
  • dp_get_device функция иллюстрирует, как перечисляются X устройств ввода данных; необходимо смочь изменить это и keyboard_activity функционируйте, чтобы также проверить на любое trackpoint действие.

  • xinput инструмент перечисляет устройства и идентификаторы, например"

    Virtual core pointer                     id=2    [master pointer  (3)]
    ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    ⎜   ↳ SynPS/2 Synaptics TouchPad                id=11   [slave  pointer  (2)]
    ⎜   ↳ TPPS/2 IBM TrackPoint                     id=12   [slave  pointer  (2)]
  • Можно получить это (идентификатор) через функцию XListInputDevices

  • После этого необходимо получить дескриптор устройства из идентификатора с помощью XOpenDevice
  • Затем Вы используете функцию XQueryDeviceState для получения координат указателя TrackPoint; подобный существующему циклу, Вы опрашиваете это время от времени и проверку, если координаты изменились (т.е. TrackPoint используется), и используйте это для переключения сенсорной панели на или прочь
  • Можно использовать xinput утилита с query-state переключатель и идентификатор устройства, чтобы проверить, корректно ли Ваше программирование, например:

    $ xinput query-state 12
    2 classes :
    ButtonClass
    button[1]=up
    button[2]=up
    button[3]=up
    button[4]=up
    button[5]=up
    button[6]=up
    button[7]=up
    ValuatorClass Mode=Relative Proximity=In
    valuator[0]=854
    valuator[1]=867
    
  • Вы интересуетесь значениями блока оценки, которые являются координатами X и Y TrackPoint
  • Посмотрите xinput источник для большего количества подсказок
  • Изменить и восстановить этот пакет:

    1. Получите источник с apt-get source...
    2. Сделайте свои модификации к tools/syndaemon.c
    3. Отключите существующее syndaemon патчи путем комментирования 118... и 124... строки в debian/patches/series
    4. Создайте свой измененный пакет с dpkg-buildpackage -us -uc и deb файлы будут в родительском каталоге.
10
ответ дан 21 October 2019 в 12:03

Первая вещь, которая будет сделана, состоит в том, чтобы знать Ваш идентификатор сенсорной панели. Таким образом, чтобы сделать, которые выполняют эти шаги

Первый открытый терминал и Выполнение эта команда

~$ xinput --list

Здесь, мы получаем это Touchpad id = <id Number>

После этого, открытые сочетания клавиш затем добавляют, что это ниже два управляет с Вашими сочетаниями клавиш.

# Disable Touchpad:
xinput set-prop <id number> 'Device Enabled' 0

# Enable Touchpad:
xinput set-prop <id number> 'Device Enabled' 1

enter image description here enter image description here

4
ответ дан 21 October 2019 в 12:03

Вот не использующее высокие технологии решение, которое могло бы быть плохо для энергопотребления (syndaemon-T, патч не работал на меня).

#!/bin/sh

TRACKPOINT_DEV="TPPS/2 IBM TrackPoint"
SLEEP_TIME=5

OLD_XY=0,0,
while true; do
  NEW_XY=`xinput query-state "$TRACKPOINT_DEV" |grep valu|awk 'BEGIN { FS = "=" } ; {print $2 ","}'|xargs`
    if [ ! "$OLD_XY" = "$NEW_XY" ]; then
      synclient TouchpadOff=1
    else
      synclient TouchpadOff=0
    fi
    sleep $SLEEP_TIME
    OLD_XY="$NEW_XY"
done

должно стать немного удачным заметить использование trackpoint потому что это может только сказать координаты во время каждых 5 интервалов с. Другими словами, это консервативно об отключении сенсорной панели, но не должно надежно повторно включить его, когда trackpoint неактивен.

Так или иначе, это помогает мне много на моем ультрабуке с блуждающим курсором из пальмового нажатия.

0
ответ дан 21 October 2019 в 12:03

Другие вопросы по тегам:

Похожие вопросы: