Управляем тачпадом. Ликвидируем эффект случайного нажатия.

logo-linux

Сегодняшняя статья посвящена решению проблемы по искоренению нервирующей особенности строения ноутбука, а именно наличию тачпада прямо под руками. Случайно задетый тачпад во время набора текста может стать причиной довольно неприятных последствий: отправки сообщения не тому контакту, набор текста в никуда или же просто смена строк и как следствие неправильно набранный текст. В общем, проблема эта неприятная, а решения этой проблемы из коробки нет, кроме как полностью отключить тачпад.

Ниже я разберу основные способы решения данной проблемы не только путем разрубания гордиева узла, но и вполне элегантные, заслуживающие уважения способы.

Способ №1. Рубим гордиев узел.

Этот способ заключается в просто отключении тачпада как такового в системе.
К примеру, в Ubuntu Linux можно зайти сюда:

Система->Администрирование->Мышь

И просто снять галочку напротив тачпада. Этот способ отключает устройство до тех пор, пока вы опять не вернетесь в этот раздел меню и не вернете галку на место.

Способ №2. Для тех, у кого нет специальной кнопки переключения режимов тачпада.

Этот способ более элегантен, так как заключается в создании комбинации клавиш, нажав которую мы отключаем и включаем тачпад, по своему усмотрению. Рассматривать ситуацию я буду на примере Ubuntu Linux 9.04,хоят это и не особо важно, так как данный способ работает и на версиях 8.04, 8.10, а при пустяковой адаптации является вполне универсальным способом, которым могут воспользоваться пользователи практически любого дистрибутива.

Пункт 1: Обновление и установка нужных пакетов.

sudo apt-get update
sudo apt-get install perl-Tk

Это пакет, который заставляет работать скрипт отключения и включения тачпада на ноутбуках.

Пункт 2: Редактируем xorg.conf.
Это необходимо для того, чтобы добавить в раздел «InputDevice» строку Option «SHMConfig» «true». Или команды отдаваемые скриптом будут проигнорированы системой.

sudo nano /etc/X11/xorg.conf

ищем блок: «InputDevice» и приводим его к такому виду:

Section «InputDevice»
Identifier «Synaptics Touchpad»
Driver «synaptics»
Option «SendCoreEvents» «true»
Option «Device» «/dev/psaux»
Option «Protocol» «auto-dev»
Option «HorizScrollDelta» «0″
Option «SHMConfig» «true»
EndSection

То есть, добавляем строчку Option «SHMConfig» «true». Если у вас сенсорная площадка не от Synaptics, то строчка, которая начинается с Identifier так же должна отличаться от канонической.

Это действие необходимо выполнять тщательно и не допуская ошибок, так как они могу привести к падению иксов или не корректной работе, а это, как минимум, неприятно.

После оттачивания навыков копипаста необходимо перезагрузить x-server.

Если же xorg.conf стоически открещивается от наличия секции «InputDevice», то просто установите драйвер для synaptics.

sudo apt-get install xserver-xorg-input-synaptics

Пункт 3: Копируем скрипт отключения тачпада в нужную папку.
Скрипт отключения тачпада стоит поместить в ~/bin, если этот каталог не существует в вашей домашней папке, то просто создайте. Не забываем в свойствах файла указать, что он исполняемый.

Код скрипта:

#! /usr/bin/perl -w
# 1.In /etc/X11/Xorg.conf in section «Synaptics Touchpad» you need add option
# Option «SHMConfig» «true»
# 2. Reboot X-server
# 3. Install perl-Tk module for use gsynaptics.pl
# You can associate this program with shortkey in your desktop manager and use anytime on desktop
# Tested on KDE3.5 Kubuntu 8.04
# Author: Mishchenko A.S., 2008

use strict;
use Tk;
#Variables:
# time – time to show message in mSec
my $time=3000;
my $t;
my $m;
# Detect on open gsynaptics.pl. if open – kill…
if (-e «/tmp/syn_id»)
{
open(F,»/tmp/syn_id»);
$t=<F>;
close(F);
system(«kill -9 «.$t);
system(«rm -f /tmp/syn_id»);
}
# write ID to tmp file
open(F,»>/tmp/syn_id»);
print F $;
close(F);
#get synaptics status
system(«synclient -l | grep TouchpadOff > /tmp/syn_key»);
open(F,»/tmp/syn_key»);
$t=<F>;
close(F);
$t=~/^(.*?)TouchpadOff(.*?)=\s(.*?)$/;
$t=$3;
# If status=1 or 2 set to 0 else to 1
if (($t eq «1″) || ($t eq «2″))
{
system(«synclient TouchpadOff=0″);
$m=»Touchpad On.»;
}
else
{
system(«synclient TouchpadOff=1″);
$m=»Touchpad Off.»;
}
#delete tmp file
system(«rm -f /tmp/syn_key»);
# create window and show message
my $main = MainWindow->new;
$main->Label(-text => $m)->pack;
$main->Button(-text => ‘Ok’,-command => [$main => 'destroy'])->pack;
$main->after($time,[$main => 'destroy']);
MainLoop;
# delete ID file on exit
system(«rm -f /tmp/syn_id»);
exit;

Пункт 4: Привязываем скрипт к комбинации клавиш.
Этот пункт расписывать я не стану, так как его содержимое всецело зависит от того DE, которым пользуется конкретный пользователь. Для KDE этот путь заключается в следующем.

4.1. Запускаем kcontrol (Alt+F2).
4.2. Раскрываем группу «Региональные и специальные возможности», затем кликаем на вкладку «Действия».
4.3.Нам необходимо создать новое действие типа «Комбинация клавиш», переходим на вкладку «Команда или адрес». Обзываем новое действие (как вам угодно).
4.4. Задаем комбинацию клавиш, наиболее удобную для вас.
4.5. Переходим на третью вкладку и назначаем в качестве команды наш готовый скрипт.

Все, теперь ваш тачпад – самое послушное устройство повинующееся командам.

Способ №3: Для тех, у кого есть специальная кнопка управления тачпадом.

Мало чем отличается от способа №2, кроме того, что вместо хоткея пользователь будет пользоваться специализированной клавишей, а значит, настройка будет происходить через ACPI.

Это способ ориентирован на Asusоводов, в первую очередь.

Пункт 1: Из способа №2 вам понадобятся пункты 2, а вот четвертый будет несколько усложнен.

Пункт 2: Устанавливаем нужные пакеты.
После того, как вы их выполните, поставьте еще и пакет acpitool – пригодится:

sudo apt-get acpi acpid acpitool

Пункт 3: Определяем код нужной кнопки.
В консоли от имени root выполняем команду:

acpi_listen

и зажимаем кнопку управления тачпадом.

Таким образом, на выходе, мы получаем код кнопки приблизительно такого типа (ноутбук Asus x50n):

hotkey ATKD 0000006b 00000000

Из это строчки нам нужна только череда цифр, которая следует за абривеатурой ATKD (0000006b), вторая группа цифр – игнорируется.

Пункт 4: Нам необходимо найти этот код в /etc/acpi/events.

99% что там уже есть файлик содержащий код со ссылкой на абсолютно нерабочий скрипт или прочую ерунду. Выполняем:

# grep 0000006b events/*

Далее действия будут рассматриваться на примере Asus x50n, но они могут отличаться только названиями файлов и кодом кнопки, в остальном – достаточно универсальны.

events/asus-touchpad:event=hotkey ATKD 0000005c

# cat events/ asus-touchpad

Перед нами перед нами предстает содержимое файлика. Правим значение кода и приводим содержание к такому виду:

# /etc/acpi/events/asus-touchpad
# This is called when the user presses the touchpad button and calls
# /etc/acpi/asus-touchpad.sh for further processing.

event=hotkey (ATKD|HOTK) 0000006b
action=/etc/acpi/asus-touchpad.sh

Сохраняемся, выходим.

Пункт 5: Приводим скрипт в нормальное состояние.
Для этого идем и открываем файл /etc/acpi/asus-touchpad.sh для редактирования и приводим к такому виду:

#!/bin/sh
[ -f /usr/share/acpi-support/state-funcs ] || exit 0.

# get the current state of the touchpad
TPSTATUS=`synclient -l | awk ‘/TouchpadOff/ {print $3}’`

# if getting the status failed, exit
test -z $TPSTATUS && exit 1

if [ $TPSTATUS = 0 ]; then
synclient TouchpadOff=1
else
synclient TouchpadOff=0
fi

Сохраняемся, выходим.

Способ №4: Отключение тачпада во время набора текста.

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

Для начала убедитесь, что у вас есть такой процесс syndaemon, если его нет, то установите.

Затем, выполните действие, описанное в способе №2, пункт 2.

Далее просто выполнить в консоли программу от имени root.

/usr/bin/syndaemon -d -t -i 2

И получаем то, что и требовалось, как только ваши пальчики начнут стучать по клавиатуре, тачпад отключается и ваше сообщение не будет испорчено несвоевременным кликом.

Вывод:

Кто бы что ни говорил, но я не знаю более ни одной ОС, которая была бы такой гибкой в астройках даже таких пустяковых делах как отключения тачпада. Напомню, что это не исчерпывающее руководство, так как существует гораздо больше способов, но на мой взгляд это наиболее элегантные и простые. Я уверен, что через 6-12 месяцев они уже никому не понадобятся. так как все можно будет сделать в графическом режиме. Ну, а пока, думаю, это достойный материал в раздел «Настройка Linux на ноутбуке»

И на последок расскажу о самом действенном и 100% безотказном методе, а точнее покажу ;-)

отключение тачпада

-на главную-

Обсуждаем на форуме: “Управляем тачпадом. Ликвидируем эффект случайного нажатия.”.

  1. vanoc:

    спасибо большое! давно мучался случайным задеванием тачпада.

  2. Don_John:

    а мне не помогло :( после нажатии по кнопки отключения тачпада, просто моргает лампочка, а тачпад по прежнему работает…
    Ноутбук Аsus M50Vc – Ubuntu 9.04

  3. Подскажите, каким методом вы воспользовались?

  4. Don_John:

    способ №3

  5. #!/bin/sh
    [ -f /usr/share/acpi-support/state-funcs ] || exit 0.

    # get the current state of the touchpad
    TPSTATUS=`synclient -l | awk ‘/TouchpadOff/ {print $3}’`

    # if getting the status failed, exit
    test -z $TPSTATUS && exit 1

    if [ $TPSTATUS = 0 ]; then
    synclient TouchpadOff=1
    echo 0 > /sys/class/leds/asus::touchpad/brightness
    else
    synclient TouchpadOff=0
    echo 1 > /sys/class/leds/asus::touchpad/brightness
    fi

    Вот этот скрипт попробуйте, и проверьте, что вы правильно оформляете скрипт, что нет впереди пустых строк и что, файл – исполняемый.

  6. Don_John:

    скрипт я проверял, он рабочий, если ручками его запускать то все ОК.
    А вот при нажатии кнопки не канает(

  7. А все ли пакеты установлены, необходимые для обработки события ACPI?

  8. Don_John:

    Да все: acpi acpid acpitool!
    еще какие нужны?

  9. Из способа №2 вам понадобятся пункты 2.
    То есть отредактировать ксорг и поставить дрова от Синаптика.
    Этот способ – 100% работает. Отписывайтесь о результатах – будем думать дальше. Сделаем вам тачпад ;-)

  10. Don_John:

    Ксорг в 9.04 править не надо.
    Делал вот так:
    Создаем shmconfig.fdi
    Код:

    gksudo gedit /etc/hal/fdi/policy/shmconfig.fdi

    Встатвляем в него
    Код:

    True

  11. Don_John:

    код тут можно посмотреть https://help.ubuntu.com/community/SynapticsTouchpad

  12. Don_John:

    Вместо /etc/acpi/asus-touchpad.sh создал /etc/acpi/touchpad.sh с тем же содержанием и все заработало!

  13. Don_John:

    такой скрипт кстати отключает выключает лампочку тачпада:
    #!/bin/sh
    [ -f /usr/share/acpi-support/state-funcs ] || exit 0.

    # get the current state of the touchpad
    TPSTATUS=`synclient -l | awk ‘/TouchpadOff/ {print $3}’`

    # if getting the status failed, exit
    test -z $TPSTATUS && exit 1

    if [ $TPSTATUS = 0 ]; then
    synclient TouchpadOff=1
    echo 1 > /sys/class/leds/asus::touchpad/brightness
    else
    synclient TouchpadOff=0
    echo 0 > /sys/class/leds/asus::touchpad/brightness
    fi

  14. Последний скрипт – да, нужен тем у кого есть светодиод (индикатор) состояния тачпада. У меня его не было, но вы упомянули, что он есть – я его выложил )
    Рад, что у вас заработала функция )