Como desativar o touchpad ao usar o trackpoint em um Thinkpad?

21

Os Thinkpads (por exemplo, X230 que estou usando) têm um trackpoint e um touchpad. O touchpad está desativado ao digitar.

No entanto, quando estou usando o trackpoint, muitas vezes também toco no touchpad e gero cliques do mouse que gostaria de evitar. Alguém tem uma idéia de como desabilitar os cliques do mouse no touchpad quando o trackpoint está em uso?

EDIT: também, alguém pode explicar como funciona a opção de desativar o touchpad ao digitar? O que está sendo feito nos bastidores? É um comando de configuração xinput e, se sim, qual?

EDIT2: esclarecimento; desabilitar manualmente o Touchpad (mesmo com um atalho) não é o problema aqui. Isso deve funcionar como a opção "desativar o touchpad ao digitar", já que eu uso o Touchpad e o Trackpoint alternadamente (mais frequentemente, eu uso o Touchpad para rolagem e o Trackpoint para mover o cursor).

    
por January 29.08.2012 / 10:17

3 respostas

10

Desativando o touchpad quando o teclado está em uso

Esta função é executada pelo utilitário syndaemon , do pacote xserver-xorg-input-synaptics . Você pode definir opções como o tempo ocioso, a freqüência de pesquisa, etc (consulte ajuda em tempo de execução ):

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.

Aqui está o código-fonte para syndaemon.c .

  • As funções importantes são keyboard_activity(...) e main_loop(...)
  • keyboard_activity usa a chamada de API XQueryKeyMap para obter o estado atual do teclado (1 bit por chave) e, em seguida, compara é para o último estado (antigo); se forem diferentes, retorna 1
  • main_loop polls keyboard_activity a cada m milissegundos e, com base no "tempo da última atividade" e se keyboard_activity retorna verdadeiro ou falso, decide se deseja desativar ou ativar o touchpad.
  • A função dp_get_device ilustra como os dispositivos de entrada X são enumerados; você deve poder modificar isso e a função keyboard_activity para também verificar qualquer atividade de trackpoint.
  • A ferramenta xinput lista dispositivos e IDs, por exemplo "

    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)]
  • Você pode obter esse (o ID) por meio do XListInputDevices função

  • Depois disso, você deve obter um identificador de dispositivo do ID usando o XOpenDevice
  • Em seguida, use a função XQueryDeviceState para obter o coordenadas do ponteiro do TrackPoint; semelhante ao loop existente, você o pesquisa de vez em quando e verifica se as coordenadas foram alteradas (ou seja, o TrackPoint está em uso) e usa isso para ativar ou desativar o touchpad
  • Você pode usar o utilitário xinput com a opção query-state e a ID do dispositivo para verificar se a programação está correta, por exemplo:

    $ 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
    
  • Você está interessado nos valores valuator , que são as coordenadas X e Y do TrackPoint
  • Veja a xinput source para mais dicas
  • Para modificar e reconstruir este pacote:

    1. Obtenha a fonte com apt-get source...
    2. Faça suas modificações em tools/syndaemon.c
    3. Desative as correções syndaemon existentes comentando as linhas 118... e 124... em debian/patches/series
    4. Compile seu pacote modificado com dpkg-buildpackage -us -uc e os arquivos deb estarão no diretório pai.
por ish 03.09.2012 / 07:16
4

A primeira coisa a fazer é conhecer o ID do touch pad. Para fazer isso, siga estas etapas

Primeiro abra o terminal e execute este comando

~$ xinput --list

Aqui, recebemos este Touchpad id = <id Number>

Depois disso, abra os atalhos de teclado e adicione esse comando abaixo aos seus atalhos de teclado.

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

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

    
por newuser 31.08.2012 / 11:51
0

Aqui está uma solução de baixa tecnologia que pode ser ruim para uso de energia (o syndaemon -T patch não funcionou para mim).

#!/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

É preciso ter um pouco de sorte ao perceber que você está usando o trackpoint, porque ele só pode informar as coordenadas durante cada intervalo de 5 segundos. Em outras palavras, é conservador sobre a desativação do touchpad, mas não deve ser reativado de forma confiável quando o trackpoint estiver ocioso.

De qualquer forma, isso me ajuda muito no meu ultrabook com o cursor errante da palma da mão.

    
por covener 04.09.2016 / 20:21