Зачем это нужно и как реализовать программно
Много рассуждений
В предыдущей статье про настройку док-станций, я упоминал как тяжко, в свое время, мне было пользоваться лаптопами «потребительского» сегмента. Отсутствие docking-port'a и необходимость каждый раз по приходу домой или на работу подключать кучу кабелей — все это неприятно и раздражало, но что действительно вызывало страдания, так это отсутствие трекпоинта: той самой «красной пимпочки», которую можно встретить на лаптопах от IBM/Lenovo (синяя или серая в случае HP и DELL). Подробней можно почитать на той же Википедии.
Зачем он нужен? Когда большая часть операций производится с клавиатуры, будь то написание кода, либо работа в командной оболочке, необходимость переместить руку на мышь дабы переместить графический курсор и что-нибудь там кликнуть не вызывает особой радости.
Особую нелюбовь к использованию мыши создает привычка работать на достаточном удалении от монитора (до двух метров), расположив клавиатуру на коленях. Здесь на помощь и приходит замечательный мини-джойстик: для манипуляций графическим курсором, всей кисти нет нужды покидать пределы home row, требуется переместить лишь указательный палец правой или левой руки, а клавиши находятся под большими пальцами. Для наглядности, приведу старый ролик от IBM:
Проблема в том, что на данный момент найти приличную клавиатуру, оснащенную таким устройством становится все тяжелее: серийно их производит только Unicomp, при этом сами клавиатуры весьма громоздкие, с классической 104-key раскладкой.
Существуют модели от Lenovo, в основном ориентированные на использование в серверной стойке (то есть, большую часть времени, валяющиеся там, подключенные к консоли) с довольно низким качеством материалов (дешевый, быстро вытирающийся пластик, хлипкие ножки), плюс все эти клавиатуры мембранные.
Из трех клавиатур производства IBM/Lenovo, самые теплые чувства вызывает модель Space Saver 2: достаточно тяжелая, шероховатый пластик, прочные ножки и резиновые вставки, которые не отклеились за, приблизительно, восемь лет эксплуатации. Недостаток у данной клавиатуры ровно один: она тоже мембранная со всеми вытекающими.
Весьма удобных при использовании в Unix-среде так-называемых 60% клавиатур с трекпоинтом буквально единицы: Tex Yoda и Guru-board, да и те, скорее, являются кастомами, нежели серийно производимыми.
В общем, тяжко нынче любителям трекпоинта: выбор очень мал. Придется либо искать model M раритеты от IBM, либо приобретать Unicomp, либо довольствоваться ножничными мембранками от Lenovo (кстати, тоже весьма не дешевыми).
Таким образом и родилась мысль, что неплохо бы это самый трекпоинт эмулировать. То есть управлять перемещениями графического курсора с клавиатуры.
Мало настроек
Сразу вспомнилось, что в X-системе нужный функционал когда-то имелся: для управления графическим курсором можно использовать нампад (активация по Shift+Numlock).
Правда, клавиатурами с нампадом я давным-давно не пользуюсь, да и опять же туда-сюда дергать кисть — это не дело. Посему, способ этот не годится. Мы пойдем другим путем.
Есть такая утилита: xdotool, позволяющая эмулировать нажатия клавиш и движения мыши. Годится она не только для имитации движений мыши, но и для автоматизации каких-либо мышинно-клавиатурных действий.
И так, сценарий прост: забиндить вызов xdotool с нужными параметрами на хоткеи, либо ввести дополнительный режим клавиатуры.
Устанавливаем:
#apt-get install xdotool
Так как я пользуюсь оконным менеджером i3, покажу на его примере. Создавать режимы клавиатуры, которые могут использоваться как для кейчейнов, так и модифицированного ввода, в этом WM одно удовольствие:
mode "name"{
bindsym <key> action
bindsym <key> mode "default" #для выхода
}
bindsym <key> mode "name" #для вызова режима
Для того, чтобы передвинуть курсор мыши, на заданную позицию относительно текущего местоположения, нужно выполнить следующую команду:
xdotool mousemove_relative x y
Для эмуляции клика:
xdotool click [123]
Где 1 — левая кнопка, 2 — средняя, 3 — правая.
А конфиг для i3 будет выглядеть так:
mode "rat" {
bindsym f exec --no-startup-id xdotool click --delay 100 1
bindsym --release a exec --no-startup-id xdotool click --delay 100 3
bindsym --release i exec --no-startup-id xdotool key --clearmodifiers --delay 20 Shift+Insert
bindsym --release l exec --no-startup-id xdotool mousemove_relative 20 0
bindsym --release h exec --no-startup-id xdotool mousemove_relative -- -20 0
bindsym --release j exec --no-startup-id xdotool mousemove_relative 0 20
bindsym --release k exec --no-startup-id xdotool mousemove_relative 0 -20
bindsym Return exec --no-startup-id xdotool click --delay 100 1; mode "default"
bindsym Escape mode "default"
bindsym Mod1+Escape mode "default"
}
bindsym Mod1+Escape mode "rat"
Думаю, что конфиг в излишних комментариях не нуждается: все, вроде бы, довольно очевидно.
К сожалению, реализовать ускорение курсора навскидку не удалось.
Для тех, кто пользуется другими оконными менеджерами или DE, могу порекомендовать утилиту xbindkeys.
Трекпоинт, безусловно, гораздо удобнее, но это все-таки лучше, чем каждый раз тянуться за мышью.
У кого-то может возникнуть вопрос: если работаем за лаптопом, то почему бы не использовать тачпад? Во-первых, лично мне использовать его тяжело, вплоть до возникновения болевых ощущений: без отрыва пальцев от home row, управление производится большим пальцем сильной руки, вывернутым под тупым углом. В таком положении палец довольно быстро начинает болеть. Если тыкать указательным пальцем, то опять возникает проблема переноса кисти и в этом случае куда проще и логичнее взяться уже, в конце концов, за мышь. Также жутко раздражали ложные срабатывания при наборе текста, отключаться при наборе тачпады научились не так давно, да и то не все.
На этом пока все. Такое решение вполне сгодится как временная мера. А в качестве постоянной, планирую восстановить IBM SpaceSaver 2 и переделать ее в механику.
Автор: WestComp