Jak wyłączyć touchpad podczas korzystania z trackpointa na Thinkpad?

21

Thinkpady (np. X230, których używam) mają zarówno trackpoint, jak i touchpad. Touchpad jest wyłączony podczas pisania.

Jednak gdy używam trackpointa, często dotykam również touchpada i generuję kliknięcia myszą, których chciałbym uniknąć. Czy ktoś ma pomysł, jak wyłączyć kliknięcia myszą na touchpadzie, gdy jest używany trackpoint?

EDYCJA: czy ktoś może wyjaśnić, jak działa opcja wyłączenia touchpada podczas pisania? Co się dzieje za kulisami? Czy to polecenie konfiguracyjne xinput, a jeśli tak, to które?

EDIT2: wyjaśnienie; ręczne wyłączenie touchpada (nawet za pomocą skrótu) nie jest tutaj problemem. Powinno to działać tak samo, jak opcja „wyłącz touchpad podczas pisania”, ponieważ używam touchpada i Trackpointa zamiennie (najczęściej używam Touchpada do przewijania i Trackpoint do poruszania kursorem).

styczeń
źródło
To byłoby interesujące. Układ klawiatury przyczynia się do zbłąkanych gestów zakłócających prawidłowe działanie. Nie sądzę, że jest to możliwe przy obecnych opcjach, ale może w przyszłości? Uważam, że muszę używać dwóch rąk do pisania i wskazywania, wyginając wysoko (prawą) rękę, aby uniknąć szczotkowania / szturchania gładzika.
fleamour
W tej chwili wyłączam kliknięcia myszką za pomocą touchpada - stwierdzam, że w większości przypadków i tak używam przycisków na górze touchpada.
styczeń

Odpowiedzi:

10

Wyłączanie touchpada, gdy klawiatura jest używana

Ta funkcja jest wykonywana przez syndaemonnarzędzie z xserver-xorg-input-synapticspakietu. Możesz ustawić opcje, takie jak czas bezczynności, częstotliwość odpytywania itp. (Patrz pomoc środowiska wykonawczego ):

Użycie: syndaemon [-i bezczynność] [-m opóźnienie odpytywania] [-d] [-t] [-k]
  -i Ile sekund trzeba czekać po ostatnim naciśnięciu klawisza
     włączanie touchpada. (domyślnie 2,0s)
  -m Ile milisekund należy czekać do następnej ankiety.
     (domyślnie 200ms)
  ...
  -t Wyłącz tylko stukanie i przewijanie, a nie ruchy myszy.

Oto kod źródłowy dla syndaemon.c.

  • Ważnymi funkcjami są keyboard_activity(...)imain_loop(...)
  • keyboard_activityużywa wywołania API XQueryKeyMap, aby uzyskać aktualny stan klawiatury (1 bit na klawisz), a następnie porównuje do ostatniego (starego) stanu; jeśli są różne, zwraca 1
  • main_loopodpytuje keyboard_activityco mmilisekundę, a na podstawie „czasu ostatniej aktywności” i tego, czy keyboard_activityzwraca wartość true czy false, decyduje, czy wyłączyć lub włączyć touchpad.
  • Ta dp_get_devicefunkcja ilustruje sposób wyliczania urządzeń wejściowych X; powinieneś być w stanie to zmodyfikować i keyboard_activityfunkcję, aby sprawdzić również aktywność trackpointów.

  • Te xinputurządzenia wymienia narzędzia i identyfikatorów, na przykład”

    Wskaźnik wirtualnego rdzenia id = 2 [wskaźnik główny (3)]
    ↳ ↳ Wskaźnik wirtualnego rdzenia XTEST id = 4 [wskaźnik slave (2)]
    ⎜ ↳ SynPS / 2 Synaptics TouchPad id = 11 [wskaźnik slave (2)]
    ⎜ ↳ TPPS / 2 IBM TrackPoint id = 12 [wskaźnik slave (2)]

  • Możesz uzyskać to (ID) za pomocą funkcji XListInputDevices

  • Następnie musisz uzyskać uchwyt urządzenia z identyfikatora za pomocą XOpenDevice
  • Następnie używasz funkcji XQueryDeviceState, aby uzyskać współrzędne wskaźnika TrackPoint; podobnie do istniejącej pętli, sondujesz to co jakiś czas i sprawdzasz, czy zmieniły się współrzędne (tj. używany jest TrackPoint), i używasz go do włączania i wyłączania touchpada
  • Możesz użyć xinputnarzędzia z query-stateprzełącznikiem i identyfikatorem urządzenia, aby sprawdzić, czy programowanie jest prawidłowe, na przykład:

    $ xinput stan zapytania 12
    2 klasy:
    ButtonClass
    przycisk [1] = góra
    przycisk [2] = góra
    przycisk [3] = góra
    przycisk [4] = góra
    przycisk [5] = góra
    przycisk [6] = góra
    przycisk [7] = góra
    ValuatorClass Mode = Relative Proximity = In
    rzeczoznawca [0] = 854
    rzeczoznawca [1] = 867
    
  • Interesują Cię wartości wyceny , które są współrzędnymi X i Y urządzenia TrackPoint
  • Zobacz xinputźródło, aby uzyskać więcej wskazówek
  • Aby zmodyfikować i przebudować ten pakiet:

    1. Zdobądź źródło z apt-get source...
    2. Dokonaj modyfikacji w tools/syndaemon.c
    3. Wyłącz istniejące syndaemonłatki, komentując linie 118...i 124...wdebian/patches/series
    4. Zbuduj zmodyfikowany pakiet, dpkg-buildpackage -us -uca pliki deb będą w katalogu nadrzędnym.
ish
źródło
1
Ponieważ nagroda wygaśnie za trzy dni, zawrę z tobą umowę (chyba że pojawi się lepsza odpowiedź): Przydzielę ci nagrodę, jeśli wskażesz mi interfejs API do zapytania urządzenia za pomocą identyfikatora xinput i podaj link do strony opisującej sposób utworzenia pakietu deb ze zmodyfikowanych źródeł. Wtedy byłbym w stanie zastosować to podejście. Czy to będzie ok?
stycznia
Przepraszam, nie było mnie. Brzmi nieźle, postaram się znaleźć informacje i edytować odpowiedź za kilka godzin.
ish
bez obaw! To dobrze
styczeń
1
Jak obiecano, dostaniesz nagrodę. Jednak nie akceptuję odpowiedzi, ponieważ najpierw muszę zakodować rozwiązanie.
styczeń
1
@ Stycznia, nie jesteś pewien, czy udało ci się już kodować swoje rozwiązanie? Poprawiłem syndaemona, aby wspierał monitorowanie punktu śledzenia. github.com/eyko/xf86-input-synaptics (zatwierdz tutaj github.com/eyko/xf86-input-synaptics/commit/… ) Aby monitorować TrackPoint, musisz przekazać flagę opcji -T podczas uruchamiania syndaemona.
Vince
4

Pierwszą rzeczą do zrobienia jest znajomość identyfikatora tabliczki dotykowej. Aby to zrobić, wykonaj następujące czynności

Najpierw otwórz terminal i uruchom to polecenie

~$ xinput --list

Mamy to Touchpad id = <id Number>

Następnie otwórz te skróty klawiaturowe, a następnie dodaj to pod dwoma poleceniami za pomocą skrótów klawiaturowych.

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

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

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

nowy użytkownik
źródło
Dzięki, ale ręczne wyłączenie touchpada nie jest tutaj problemem (nawet za pomocą skrótu) i wiem, jak to zrobić. Chodzi o to, aby wyłączyć Touchpad automatycznie, gdy używany jest Trackpoint, podobnie jak Touchpad jest wyłączany automatycznie, gdy używana jest klawiatura (patrz ustawienie „wyłącz touchpad podczas pisania” w ustawieniach „Myszy i touchpada”).
styczeń
0

Oto rozwiązanie mało zaawansowane technologicznie, które może mieć negatywny wpływ na zużycie energii (łata syndaemon -T nie działała dla mnie).

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

To musi być trochę szczęśliwe, aby zauważyć, że używasz trackpointa, ponieważ może on określić współrzędne tylko podczas każdego interwału 5s. Innymi słowy, konserwatywne jest wyłączanie touchpada, ale nie powinno ono niezawodnie włączać go ponownie, gdy trackpoint jest bezczynny.

W każdym razie bardzo pomaga mi to na moim ultrabooku z wędrującym kursorem z wyciskania dłoni.

kowboj
źródło