Как отключить тачпад при использовании трекпойнта на Thinkpad?

21

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

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

РЕДАКТИРОВАТЬ: также, кто-то может объяснить, как работает опция отключения тачпада при наборе текста? Что делается за кулисами? Это команда конфигурации xinput, и если да, то какая?

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

январь
источник
Это было бы интересно. То, как раскладывается клавиатура, способствует случайным жестам, мешающим правильной работе. Я не думаю, что это возможно с текущими опциями, но, возможно, в будущем? Я нахожу, что мне нужно использовать две руки, чтобы печатать и указывать, выпрямляя (правую) руку, чтобы избежать чистки / подталкивания трекпада.
Fleamour
На данный момент я отключил щелчки мышью с помощью сенсорной панели - я обнаружил, что в большинстве случаев я в любом случае использую кнопки на верхней части сенсорной панели.
январь

Ответы:

10

Отключение сенсорной панели при использовании клавиатуры

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

Использование: syndaemon [-i idle-time] [-m poll-delay] [-d] [-t] [-k]
  -i Сколько секунд ждать после последнего нажатия клавиши до
     включение сенсорной панели. (по умолчанию 2.0 с)
  -m Сколько миллисекунд ждать до следующего опроса.
     (по умолчанию 200 мс)
  ...
  -t Только отключить нажатие и прокрутку, а не движения мыши.

Вот исходный код для 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функцию, чтобы также проверить на любую активность отслеживания.

  • В xinputсписки инструментов устройства и идентификаторы, например»

    Указатель виртуального ядра id = 2 [главный указатель (3)]
    Pointer ↳ Указатель XTEST виртуального ядра id = 4 [ведомый указатель (2)]
    PS ↳ SynPS / 2 Synaptics TouchPad id = 11 [ведомый указатель (2)]
    ↳ ↳ TPPS / 2 IBM TrackPoint id = 12 [ведомый указатель (2)]

  • Вы можете получить это (идентификатор) через функцию XListInputDevices

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

    Состояние запроса $ xinput 12
    2 класса:
    ButtonClass
    Кнопка [1] = вверх
    Кнопка [2] = вверх
    Кнопка [3] = вверх
    Кнопка [4] = вверх
    Кнопка [5] = вверх
    Кнопка [6] = вверх
    Кнопка [7] = вверх
    Режим ValuatorClass = Относительная близость = В
    оценщик [0] = 854
    оценщик [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 будут в родительском каталоге.
иш
источник
1
Поскольку срок действия вознаграждения истекает через три дня, я заключил с вами сделку (если не будет лучшего ответа): я назначу вам вознаграждение, если вы укажете мне API для запроса устройства по идентификатору xinput и дайте ссылку на страницу, описывающую, как создать пакет deb из модифицированных источников. Тогда я бы смог применить этот подход. Это будет хорошо?
января
Извините, я был далеко. Звучит хорошо, я постараюсь найти информацию и отредактировать ответ через несколько часов.
иш
не стоит беспокоиться! это нормально
января
1
Как и было обещано, вы, сэр, получите награду. Однако я не принимаю ответ, потому что мне нужно сначала написать решение.
января
1
@ Январь, не уверен, что тебе удалось написать свое решение? Я исправил Syndaemon для поддержки мониторинга трекпойнта. github.com/eyko/xf86-input-synaptics (зафиксируйте здесь github.com/eyko/xf86-input-synaptics/commit/… ) Чтобы отслеживать TrackPoint, вам нужно передать флаг опции -T при запуске syndaemon.
Винс
4

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

Сначала откройте терминал и запустите эту команду

~$ 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

введите описание изображения здесь введите описание изображения здесь

новый пользователь
источник
Спасибо, но отключение Touchpad вручную не является проблемой (даже с ярлыком), и я знаю, как это сделать. Идея состоит в том, чтобы автоматически отключить сенсорную панель во время использования Trackpoint, аналогичным образом сенсорная панель автоматически отключается при использовании клавиатуры (см. Настройку «отключить сенсорную панель во время набора текста» в настройках «Мышь и сенсорная панель»).
января
0

Вот низкотехнологичное решение, которое может быть плохо для энергопотребления (патч 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

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

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

covener
источник