mironov_orig 28.07.2011 00:52
How-to`s — Как отослать в иксы комбинацию клавиш
Вопрос всплыл в конференции от пользователя Dark_SS. Отвечаю здесь. Для перебежчиков (и не очень) с венды это аналог (с куда меньшими возможностями) функции send из autohotkey. Итакзадача: сэмулировать нажатие ctrl+f2 после старта системы.
Решение: нам понадобиться пакет lineakd, а конкретнее утилита xsendkeys из его состава, которая позволяет отсылать в иксы нажатия клавиш из консоли/скриптов. в данном конкретном случае это выглядит вот так
1 |
|
Чтобы отправить что-то иное, просто передайте это как параметр этой утилите. xsendkes ожидает названия клавишь в иксо-понятном формате, если что-то не работает, вы не знаете как обозвать клавишу (или их комбинацию) обратитесь к xev за помощью. При использовании xev пригодится вот такой однострочник
1 |
xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
|
Ссылки
1. проект на sf
2. убунтовские патчи
3. pkgbuild из AUR'a на всякий случай (автор не я)
4. тарбол тоже на всякий случай
Еще один вариант — использование пакета для автоматизации xdotool.
Примеры:
1) xdotool key F2 — нажатие F2;
2) xdotool key ctrl+l — нажатие ctrl+l.
Примеры:
1) xdotool key F2 — нажатие F2;
2) xdotool key ctrl+l — нажатие ctrl+l.
Фигня в том, что очень немногие приложения реально обращают на эти нажатия внимание.
Недавно пробовал с помощью xdotool научить мультимедийные клавиши на ноутбуке отправлять правильные сигналы в VirtualBox к запущенному там iTunes.. А потом дочитал до раздела "SENDEVENT NOTES" в man xdotool, и бросил это занятие.
PS. Задумку таки реализовал, с помощью конструкции:
"VBoxManage controlvm [имя] keyboardputscancode [код]".
Недавно пробовал с помощью xdotool научить мультимедийные клавиши на ноутбуке отправлять правильные сигналы в VirtualBox к запущенному там iTunes.. А потом дочитал до раздела "SENDEVENT NOTES" в man xdotool, и бросил это занятие.
PS. Задумку таки реализовал, с помощью конструкции:
"VBoxManage controlvm [имя] keyboardputscancode [код]".
На питоне я бы сделал так:
И добавил бы скрипт а автозагрузку.
Но это велосипед =)
$ sudo apt-get install python python-pyatspi
import pyatspi
reg = pyatspi.Registry.generateKeyboardEvent
reg(37, None, pyatspi.KEY_PRESS)
reg(68, None, pyatspi.KEY_PRESSRELEASE)
reg(37, None, pyatspi.KEY_RELEASE)
И добавил бы скрипт а автозагрузку.
Но это велосипед =)
В итоге в автозагрузке нормально отработала только комбинация пары методов mealsforall и IT.Tux.Droid. Ещё раз всем спасибо!
Работает так:
нажатие буквы А: xte 'key a'
нажатие Ctrl+F2: xte 'keydown Ctrl_L' 'key F2' 'keyup Ctrl_L'