Буквально на глазах родилось решение, которое обязано было родиться. Речь о ноутбучной проблеме, которая лично меня порядком запарила - проблеме случайного касания тачпада во время набора текста. Как правило при таком касании курсор летит к чертям, и, если вовремя это не пропалить, можно напечатать огромную простыню куда-нибудь не туда, или вообще не напечатать. Героем дня объявляю товарища
dikiy_mujchina, который написал простой, но гениальный
скрипт, по своему вызову отрубающий или врубающий обратно это злобное ноутбучное творение.
Для совсем начинающих и не особо понимающих инглиш поясню:
1. Стандартным движением руки (для дебиана и *бунт):
sudo aptitude update
sudo aptitude install perl-Tk
инсталлируем пакет perl-Tk, необходимый для работы скрипта.
2. Редактируем файл /etc/X11/xorg.conf, находя секцию Synaptics Touchpad и добавляя в неё строку:
Option "SHMConfig" "true"
Как и всякий файл в /etc, /etc/X11/xorg.conf должен редактироваться от root'а, стало быть в консоли для его редактирования пишем что-то вроде:
sudo gedit /etc/X11/xorg.conf
или:
sudo kate /etc/X11/xorg.conf
или, что мне ближе:
sudo nano /etc/X11/xorg.conf
ну или вписываем любой другой ваш любимый редактор =)
ВАЖНО! Вписать все правильно, именно в названную секцию и ничего не поломав =). Выглядеть должно примерно так:
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
Далее перезагружаемся, или нажатием Ctrl+Alt+Backspace просто перезапускаем x-server. Приготовления окончены.
3. Сохраняем нижеприведенный скрипт в файлик названный, допустим, touchpad_switcher.sh. Кидаем его в ~/bin (если каталога bin в вашем домашнем каталоге нет - можно создать) и в свойствах указываем что он исполняемый. Теперь из консоли уже можно выполнить команду
touchpad_switcher.sh
и тачпад послушно отрубится. А повторное выполнение заведет его обратно =)
4. Однако консоль это хорошо, а хоткей удобнее. Поэтому нажимаем Alt+F2 и запускаем kcontrol, починенный в прошлом посте =). Раскрыв группу Региональные и специальные возможности, выбираем Действия. Кнопочкой создаем новое, тип действия указываем Комбинация клавиш > Команда или адрес. На этой же вкладке как-то обзываем действие, на второй - задаем хоткей (я поставил Alt+=), на третьей указываем команду touchpad_switcher.sh (если назвали именно так и положили именно в ~/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=;
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=;
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;