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

21

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

No entanto, quando estou usando o trackpoint, geralmente toco também no touchpad e giro cliques do mouse que gostaria de evitar. Alguém tem uma idéia de como desativar 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; desativar o Touchpad manualmente (mesmo com um atalho) não é o problema aqui. Isso deve funcionar como a opção "desativar o touchpad ao digitar", pois eu uso o Touchpad e o Trackpoint de forma intercambiável (na maioria das vezes, uso o Touchpad para rolar e o Trackpoint para mover o cursor).

janeiro
fonte
Isso seria interessante. A maneira como o teclado é organizado contribui para gestos dispersos, interferindo na operação adequada. Eu não acho que isso é possível com as opções atuais, mas talvez no futuro? Acho que preciso usar as duas mãos para digitar e apontar, arqueando minha mão (direita), para evitar escovar / cutucar o trackpad.
fleamour
No momento, desativei os cliques do mouse com o touchpad - acho que, na maioria dos casos, uso os botões na parte superior do touch pad de qualquer maneira.
janeiro

Respostas:

10

Desativando o touchpad quando o teclado está em uso

Esta função é realizada pelo syndaemonutilitário, a partir do xserver-xorg-input-synapticspacote. Você pode definir opções como o tempo ocioso, a frequência da pesquisa, etc. (consulte a ajuda do tempo de execução ):

Uso: syndaemon [-i tempo ocioso] [-m poll-delay] [-d] [-t] [-k]
  -i Quantos segundos esperar após a última tecla pressionada antes
     ativando o touchpad. (o padrão é 2.0s)
  -m Quantos mili-segundos de espera até a próxima enquete.
     (o padrão é 200ms)
  ...
  -t Desativa apenas tocar e rolar, não os movimentos do mouse.

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

  • As funções importantes são keyboard_activity(...)emain_loop(...)
  • keyboard_activityusa a chamada da API XQueryKeyMap para obter o estado atual do teclado (1 bit por tecla) e, em seguida, compara com o último estado (antigo); se forem diferentes, retorna 1
  • main_looppesquisa a keyboard_activitycada mmilissegundo e, com base no "horário da última atividade" e se keyboard_activityretorna verdadeiro ou falso, decide se deseja desativar ou ativar o touchpad.
  • A dp_get_devicefunção ilustra como os dispositivos de entrada X são enumerados; você deve poder modificar isso e a keyboard_activityfunção para verificar também qualquer atividade do trackpoint.

  • A xinputferramenta lista dispositivos e códigos, por exemplo "

    ID do ponteiro do núcleo virtual = 2 [ponteiro mestre (3)]
    Id ↳ ID do ponteiro do núcleo virtual XTEST = 4 [ponteiro escravo (2)]
    Id id ID do TouchPad SynPS / 2 Synaptics = 11 [ponteiro escravo (2)]
    Exemplo TPPS / 2 IBM TrackPoint id = 12 [ponteiro escravo (2)]

  • Você pode obter esse (o ID) através da função XListInputDevices

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

    $ xinput query-state 12
    2 classes:
    ButtonClass
    botão [1] = para cima
    botão [2] = para cima
    botão [3] = para cima
    botão [4] = para cima
    botão [5] = para cima
    botão [6] = para cima
    botão [7] = para cima
    Modo ValuatorClass = Proximidade relativa = Em
    avaliador [0] = 854
    avaliador [1] = 867
    
  • Você está interessado nos valores do avaliador , que são as coordenadas X e Y do TrackPoint
  • Veja a xinputfonte para mais dicas
  • Para modificar e reconstruir este pacote:

    1. Obtenha a fonte com apt-get source...
    2. Faça suas modificações para tools/syndaemon.c
    3. Desative os syndaemonpatches existentes comentando as linhas 118...e 124...emdebian/patches/series
    4. Crie seu pacote modificado dpkg-buildpackage -us -uce os arquivos deb estarão no diretório pai.
ish
fonte
1
Como a recompensa expirará em três dias, eu faria um acordo com você (a menos que uma resposta melhor apareça): atribuirei a recompensa a você se você me indicar a API para consultar um dispositivo pelo identificador xinput e forneça um link para uma página que descreve como criar um pacote deb a partir de fontes modificadas. Então eu seria capaz de aplicar essa abordagem. Isso seria bom?
janeiro
Desculpe, eu estive fora. Parece bom, tentarei encontrar as informações e editar a resposta em algumas horas.
Ish
não se preocupe! tudo bem
janeiro
1
Como prometido, você recebe a recompensa. Eu não aceito a resposta, no entanto, porque preciso codificar a solução primeiro.
janeiro
1
@ Janeiro, não tenho certeza se você já conseguiu codificar sua solução? Corrigi o syndaemon para oferecer suporte ao monitoramento do trackpoint. github.com/eyko/xf86-input-synaptics (confirme aqui github.com/eyko/xf86-input-synaptics/commit/… ) Para monitorar o TrackPoint, você precisa passar o sinalizador de opção -T ao executar o syndaemon.
Vince
4

A primeira coisa a ser feita é saber a identificação do seu touch pad. Para fazer isso, siga estas etapas

Primeiro abra o terminal e execute este comando

~$ xinput --list

Aqui temos isso Touchpad id = <id Number>

Depois disso, abra os atalhos de teclado e adicione-o abaixo dos dois comandos com os atalhos de teclado.

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

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

insira a descrição da imagem aqui insira a descrição da imagem aqui

novo usuário
fonte
Obrigado, mas desativar o Touchpad manualmente não é o problema aqui (mesmo com um atalho), e eu sei como fazê-lo. A idéia é desativar o Touchpad automaticamente enquanto o Trackpoint estiver sendo usado. De maneira semelhante, o Touchpad é desativado automaticamente quando o teclado é usado (consulte a configuração "desativar o touchpad ao digitar" nas configurações "Mouse e Touchpad").
janeiro
0

Aqui está uma solução de baixa tecnologia que pode ser ruim para o uso de energia (o patch syndaemon -T 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 dizer as coordenadas a cada intervalo de 5s. Em outras palavras, é conservador desabilitar o touchpad, mas não deve reativá-lo de maneira confiável quando o trackpoint estiver ocioso.

Enfim, isso me ajuda muito no meu ultrabook com o cursor errante do palm pression.

covener
fonte