Управление курсором мыши с клавиатуры

Логотип ratpoison как бы намекает Без всяких лирических отступления — ключевое слово xdotool.
xdotool умеет многое, но сейчас нас интересует её возможность нажатия кнопок мыши или изменения положения курсора:
  • xdotool mousemove 50 100 — переместит курсор на точку с координатами 50.100
  • xdotool mousemove_relative 10 0 — переместит курсор на 10 вправо
  • xdotool click 1 — нажмет левую кнопку мыши
Ну и так далее, опций достаточно много — начиная от передвижения и заканчивая отпусканием кнопки мыши (а помимо работы с мышью есть ещё много чего что умеет xdotool)

Посему если есть желание управлять мышью, то просто вешаем на хоткеи на желаемые манипуляции с мышью.
К примеру, мне хватает малого, и в конфиге xchainkeys (а это для меня поудобнее чем xbindkeys) имеются строки
W-p Up :group xdotool mousemove_relative -- 0 -15
W-p Down :group xdotool mousemove_relative 0 15
W-p Right :group xdotool mousemove_relative 15 0
W-p Left :group xdotool mousemove_relative -- -15 0
W-p Return :group xdotool click 1

После нажания Win+p стрелками можно управлять курсором, а клавиша Enter будет равносильна нажатию левой кнопки мыши.

И всё это независимо от wm…

PS. В некоторых DE управление курсором мыши с нампада это штатная функция (ищите да обрящите)
sash-kan 12-04-2012
> В некоторых DE управление курсором мыши с нампада это штатная функция (ищите да обрящите)

это штатная функция x-сервера·
подробнее можно прочитать, например, в моих «заметках на полях клавиатуры» (заметка номер три): http://unixforum.org/index.php?showtopic=49203
Vyacheslav 12-04-2012
Действительно, это стандартная функция XKB. Повесить "режим мыши" на Shift+Num_Lock можно указав в xorg.conf в секции InputClass для клавиатуры следующую опцию:
Option "XkbOptions" "keypad:pointerkeys"

Если активацию режима хочется повесить на что-то другое, то нужно редактировать символы. Готовый символ, реализующий данную магию, называется Pointer_EnableKeys. Если хочется использовать другие клавиши для перемещения курсора, или задать другие приращения, то нужно задавать действия: MovePtr(x=[+-]X,y=[+-]Y) для абсолютного и относительного перемещения курсора и LockPointerButton(button=X) для эмуляции нажатия кнопок мыши.

@sasha-kan
Хороший материал! Я всё никак не решусь написать о своём опыте настройки XKB...
Vyacheslav 12-04-2012
Забыл сказать, для awesome существует плагин Rodentbane [1], который рекурсивно делит экран на части, пользователь каждый раз выбирает подходящую, и та делится снова, и так до тех пор, пока область не будет подходящей для клика.

[1] http://awesome.naquadah.org/wiki/Rodentbane
Vyacheslav 12-04-2012
А пройдя по ссылке, которую я сам привёл, я узнал (☺), что Rodentbane — это клон keynav¹, а автор keynav'а — тот же, что и xdotool...

¹ http://www.semicomplete.com/projects/keynav/
muhas 12-04-2012
Спасибо, всё же иксы чудесные

@sash-kan отдельное спасибо за заметки
"Там и делать-то нечего, а они, понимаешь,
развели работу. . ."
virens 12-04-2012
Спасибо за интересный пост, весьма познавательно.

Пользуясь случаем, задам вопрос зрительному залу :-)
В старой винде 3.1 была такая чудовищно удобная программа как Macro Recorder - позволяла записывать последовательность действий (перемещений и кликов мыши) и воспроизводить их. Под линуксами я такого не нашёл (xnee работает криво и не для всех программ). Судя по форумам, ищу не я один. Есть у кого соображения по этому поводу?
sash-kan 12-04-2012
2 muhas
оповещения в почту приходят в ужасном нечитабельном виде·
sash-kan 12-04-2012
что-то не вижу предыдущего своего комментария, повторяю:
2 virens
xmacro тоже не подошёл?
theg4sh 12-05-2012
Решил такую же задачу неделю назад, когда на работе мыша померла, только через xbindkeys. Не знал что можно относительное смещение указывать для мыши, накатал скриптик по этому случаю. Благодарствую за совет, жаль поздно, мышь уже заменил. :)
dimaursu16 12-06-2012
харошии блог, он мне нравилсеа (sorry for mistakes, I don't know russian that much, I can't write it properly) btw, I use arch too
Bariska 12-08-2012
А по русски где нибудь внятно написано про xdotool?
muhas 12-08-2012
Думаю ни где.