Auto Switch Off Touchpad With External USB Mouse

W tym miejscu zapraszamy Was do współpracy. Czekamy na propozycje, sugestie i rady.
Moderatorzy zatroszczą się o to, by najlepsze teksty trafiły do FAQ.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
webster
Użytkownik
Posty: 1265
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Auto Switch Off Touchpad With External USB Mouse

Post autor: webster » 2012-11-09, 10:33

Moja propozycja na stworzenie szybkiego programiku do wyłączania touchpada w laptopie, w momencie podpięcia zewnętrznej myszki USB

Wszystko wykonujemy z root'a:

EDIT

########################################################## Zmiana koncepcji. !!! #################################################################

Cały czas podnoszę kernel wraz z current paczkami, i zauważam przy wielu modyfikacjach Xorga Display itp problemy z odwoływaniem się do xinputa itp. Odwoływanie się do zewnętrznych skomplikowanych skryptów, które i tak wymagają znów dostępu do display zmusiły mnie do zmiany koncepcji. Może trochę brutalnie, jednak będziemy na czas wyłączenia touchpada wywalać psmouse z modproba.

Sprawa wygląda dużo prościej niż w poprzedniej koncepcji.

Edytujemy/tworzymy plik /etc/udev/rules.d/90-disable_touchpad.rules i wrzucamy do niego

Kod: Zaznacz cały

ACTION=="add", KERNELS=="input*", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", ENV{ID_PATH}!="platform-i8042-serio-1", RUN+="/sbin/modprobe -r psmouse"
ACTION=="remove", KERNELS=="input*", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", ENV{ID_PATH}!="platform-i8042-serio-1", RUN+="/sbin/modprobe psmouse"
Przeładujmy reguły udev'a

Kod: Zaznacz cały

udevadm control --reload-rules
i tyle... Jak widać sprawa trochę mniej skomplikowana. Osobiście jednak uważam, że nie powinno się wykorzystywać do tego modprobe, jednak na dziś dzień nie widzę innego uniwersalnego, dobrego sposobu.

Dodatkowe informacje / wyjaśnienia
Jak widzimy w regule, dzielimy eventy na dwie pozycje Add oraz Remove, dochodzi warunek input. ID_INPUT_MOUSE wynika z informacji uzyskanych z polecenia

Kod: Zaznacz cały

udevadm info --query=all --name=/dev/input/mouse1
Dochodzi warunek negacji dla ID_PATH, i polecenie external modprobe

Pozdr.

######################################################################################################################################
########################################################## Old Version #################################################################

Tworzymy plik /etc/udev/rules.d/90-disable_touchpad.rules i wrzucamy zawartość:

Kod: Zaznacz cały

ACTION=="change",
SUBSYSTEM=="input",
RUN+="/bin/sh /usr/bin/mouse_test.sh"
Tworzymy plik /usr/bin/mouse_test.sh i wrzucamy zawartość:

Kod: Zaznacz cały

#!/bin/sh
export DISPLAY=:0
export XAUTHORITY=$(ps wwwwaux | grep auth|grep "/usr/bin/X"|awk '{print $20}')
if lsusb -v|grep -iq mouse;then
xinput --set-prop "PS/2 Generic Mouse" "Device Enabled" 0
synclient TouchpadOff=1
else
xinput --set-prop "PS/2 Generic Mouse" "Device Enabled" 1
synclient TouchpadOff=0
fi
Wydajemy polecenia

Kod: Zaznacz cały

chmod +x /usr/bin/mouse_test.sh
/etc/rc.d/rc.udev reload
Powinno hulać :) Have Fun :)

Parę uwag: W zależności od sterownika touchpada są dwie różne możliwości wyłączania touchpada w systemie 1. synclient oraz 2.xinput. Jeśli działa jedna, to druga nie, tak więc by było uniwersalnie dla każdego, nie rozwodziłem się na dodatkowe zależności w skrypcie.

Enjoy!

EDIT
#################################### Sam pomysł bardzo mocno zwalnia uruchamianie systemu. Moja propozycja ####################################

/etc/rc.d/rc.mouse_auto

Kod: Zaznacz cały

#!/bin/sh

start() {
if [ -f /etc/udev/90-disable_touchpad.rules ];then
mv /etc/udev/90-disable_touchpad.rules /etc/udev/rules.d/90-disable_touchpad.rules;
else
echo 'ACTION=="change",
SUBSYSTEM=="input",
RUN+="/bin/sh /usr/bin/mouse_test.sh"
' > /etc/udev/rules.d/90-disable_touchpad.rules
fi
/etc/rc.d/rc.udev force-restart > /dev/null
/sbin/mouse_test.sh
echo 'Mouse auto switch daemon Turn ON'
}

stop() {
        if [ -f /etc/udev/rules.d/90-disable_touchpad.rules ];then mv /etc/udev/rules.d/90-disable_touchpad.rules /etc/udev/90-disable_touchpad.rules;fi
#       /etc/rc.d/rc.udev force-restart > /dev/null
echo 'Mouse auto switch daemon Turn OFF'
}
case "$1" in
  'start')
        start
  ;;
  'stop')
        stop
  ;;
  *)
    echo "Usage: $0 {start|stop}"
  ;;
esac
Dodać do /etc/rc.d/rc.local

Kod: Zaznacz cały

/etc/rc.d/rc.mouse_auto start
Dodać na początku pliku /etc/rc.d/rc.0

Kod: Zaznacz cały

/etc/rc.d/rc.mouse_auto stop
Enjoy!

Tags: Auto Switch Off Touchpad With External Mouse | wylaczenie touchpad | Automatyczne wylaczenie touchpad | linux touchpad i myszka | linux touchpad with mouse | how to disable touchpad | disable touchpad
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook

ODPOWIEDZ