Имитация нажатия клавиши linux

имитация нажатия клавиш в консоли

Ребята подскажите пожалуйста прогу для имитации нажатия клавиш в консоли. xdotool не подходит так как для неё нужны иксы.

Лучше скажи, что хочешь добиться.

copy your-file.txt CON: ?

спрашивале на форуме Маза — «как стереть файлы, не нажимая кнопок, в определённый день и время ?»

получилось, тремя .bat файлами

интересно, ради эксперимента. на практике — отстой и фанаберия.

> Ребята подскажите пожалуйста прогу для имитации нажатия клавиш в консоли

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

Вообще мне это нужно для реализации автоматического входа.
В pam_usb-0.3.2 имя пользователя, если он заведён один, автоматом не пишется. Я хочу сделать что бы вставил флешку и ничего не набирая вошёл.

При помощи cat пробовал не получается.

Вот нафига ты эту хрень пишешь? Ясно же, что человек хочет решить проблему через жопу, и ты ему в этом помогаешь. Для начала надо с задачей определиться.

анониму почему через жопу??
есть новый пакет pam_usb-0.4.2 там по моему если заведён один пользователь то можно настроить что при втыкании флешки сразу произойдёт вход, но для работы этой версии необходим Python
у меня Python не установлен,
так значит удалить старую версию pam_usb-0.3.2 поставить Python и
потом установить новую версию pam_usb-0.4.2 это нормально, а
написать правило для udev что бы при втыкании флешки исполнялся маленький скрипт или программа, которая набирала бы логин и нажимала клавишу ENTER это через жопу, странно как то получается ))))))

anon_666 огромное спасибо за помощь, но мне немного не такая программа нужна, необходимо что бы ей можно было передавать в параметрах командной строки клавишу которую хочу нажать, или строку, и ещё хотелось бы что бы можно было имитировать нажатия ENTER, Ctrl, Alt, Tab, и связки клавиш, например Ctrl+a. Попробую переделать твою программу но наверное у меня не получиться. Если у тебя есть немного свободного времени и тебя не затруднит, переделай её пожалуйста, заранее буду благодарен.

Источник

Эмуляция нажатия мультимедийных клавиш в Windows, Linux и Mac OS X

В перечислении Qt::Key для события QKeyEvent определены 15 типов клавиш управления мультимедиа (см. таблицу в конце статьи). Все они могут быть использованы в фильтре событий (installEventFilter) для обработки нажатия клавиш на мультимедийной клавиатуре (позволяющей управлять аудиоустройством и воспроизведением).
В статье рассмотрена обратная задача — отправка в систему команд управления мультимедиа путем эмуляции нажатия соответствующих клавиш в Windows, Linux и MacOSX (операционные системы упорядочены по времени, потраченному на поиск решения). Представленный в статье материал может быть отправной точкой к дальнейшему изучению вопроса кроссплатформенной отправки событий в цикл обработки системных сообщений.

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

  • создание виджетов управления воспроизведением аудио;
  • эмуляция пользовательского ввода при тестировании приложений;
  • создание приложения для удаленного управления аудиосистемой. В данном случае приложение на компьютере выступает в качестве сервера, а клиентом является смартфон. Такая связка позволит управлять аудио/видео не вставая с дивана или, например, автоматически ставить на паузу воспроизведение при поступлении входящего звонка;
  • создание приложения, «расшаривающего» клавиатуру и мышь на два и более компьютеров по сети (предварительно дополнив представленный код до полного набора клавиш);
  • создание систем «умный дом», новых человеко-машинных интерфейсов (управление голосовыми командами и др.).
Читайте также:  Skype no windows store

Так как QEvent позволяет отправлять сообщение только конкретному объекту «внутри» приложения, то стандартными средствами Qt эмулировать нажатия клавиш не получится. Для этого будем использовать системные вызовы Api (в случае с Windows) или соответствующие библиотеки (X Window System в Linux и ряд фреймворков в Mac OS X).
Для удобства описания почти всю реализацию отправки сообщений разместим в функции sendKeyEventToSystem(Qt::Key qtKey), которой передается код клавиши из перечисления Qt::Key. Данная функция и будет вызываться из слотов, например:
Платформенно-зависимый код будем отделять директивами #ifdef OS_TYPE и #endif (еще часть кода на Objective-C вынесем в отдельный файл macx.mm, но об этом позже).

Эмуляция нажатия клавиатуры в Windows

В данной операционной системе за отправку сообщений отвечает функция SendInput. Она позволяет отправлять сообщения с кодами, полный перечень которых представлен на странице MSDN Virtual-Key Codes.
Для использования этой функции необходимо подключить заголовочный файл .

Примеров использования данной функции в интернете много и ее применение не должно вызвать проблем, поэтому сразу привожу код (в части Windows):
Здесь и далее в примерах будут использоваться всего 3 клавиши. В конце статьи приведена таблица соответствия кодов.

Эмуляция нажатия клавиатуры в Linux

Для эмуляции клавиш в Linux, на мой взгляд, проще всего использовать библиотеку разработчиков libXtst (X11 Record extension library).
Для ее получения из пакетов необходимо выполнить команду:Также будет необходимо подключить библиотеку в файле проекта:

В начале файла подключим необходимые заголовочные файлы и определим ряд констант, соответствующих кодам мультимедийных клавиш (дело в том, что в файле X11/keysymdef.h коды для мультимедийных клавиш отсутствуют).

Код эмуляции в части Linux:

Эмуляция нажатия клавиатуры в Mac OS X

Попытки найти решение для MacOS X не приносили плодов (скупые примеры были написаны на Objective-C), до тех пор, пока в гугле не натолкнулся на статью с хабра Интеграция приложений Qt в среду Mac OS X (с использованием Cocoa и Objective-C++). Мне уже ранее попадалась англоязычная статья, в которой описывалось, как изолировать код C++ для использования в Objective-C приложении. Мне же нужно было совершенно противоположное — изолировать Objective-C код (который выполнял нужные мне функции, но в то же время на который ругался компиллятор). Все оказалось достаточно просто:
1. создал файл macx.mm и разместил в нем Objective-С код (при этом в файле проекта автоматически появилась строка
2. создал файл macx.h и разместил в нем объявление функции из macx.mm (добавив #include «macx.h» в macx.mm).
3. в файле проекта добавил подключение необходимых фреймворков, в частности:

4. Внутри макроса условной компиляции для Mac OS X добавил необходимые хидеры и macx.h.
5. В уже знакомой вам switch-case структуре вставил вызовы новоиспеченной функции.

Таким образом в начале файла у нас появилась конструкция для Mac OS X:

В функцию sendKeyEventToSystem добавляется следующий код:

Cодержимое файла mac.mm:

Заключение:

Для меня было немного странно, что до сих пор не существует открыто доступной кроссплатформенной библиотеки, позволяющей выполнять отправку сообщений (в том числе события клавиатуры, мыши и д.р.). Во всяком случае мне такую библиотеку так и не получилось найти. Представленный код далек от совершенства (представляю, как разрастется switch-case последовательность при добавлении новых клавиш). Но тем не менее пусть это будет небольшой вклад в общую копилку базы знаний о написании кросплатформенных приложений.
В ходе работы над статьей было замечено, что VirtualBox перехватывает нажатия мультимедийных клавиш (проверялось на Ubuntu — c «железа» все работало). Данного недостатка лишена WMWare (проверялось на Mac OS X).

Читайте также:  Как создать нового пользователя через терминал линукс

Приложение: Перечень мультимедийных клавиш и их определений (с помощью #define).

Источник

Простой авто-кликер в Linux c помощью небольшого BASH скрипта

Авто-кликер может понадобиться в разных случаях: если нужно автоматизировать нажатие какой-нибудь кнопки, или фармить печеньки в Cookie Clicker. Что-бы без лишней траты времени это сделать, нам понадобится программа xdotool.

  • Создаём текстовый файл с любым названием, в домашней директории(так будет удобнее в будущем запускать сам авто-кликер).
  • Затем открываем его и вставляем туда такой текст:

Где «2048» в третьей строке — это количество желаемых нажатий, а «1.5» в 5 строке — это интервал в секундах между нажатиями. sleep 5 (2 строка) — это отсчёт в секундах до начала цикла. Ну и ещё прикручено echo для статистики.

Кликать будет левая кнопка мыши. Чтобы эмулировать нажатия правой кнопки мыши, нужно в строке «xdotool click 1» заменить единицу на 3.

  • Сохраняем файл.
  • Затем нужно сделать наш файл исполняемым. Для этого нужно вписать в терминал команду:
    chmod u+x название-файла

Авто-кликер готов! Чтобы его запустить, нужно ввести в терминале команду

Чтобы остановить авто-кликер раньше, чем вписано в файле, нужно просто открыть окно терминала, через которое работает авто-кликер, и нажать сочетание клавиш Сtrl+C.

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

Желаю накликать побольше печенек, надеюсь, чем-то смог помочь.

Источник

как сделать имитацию ввода с клавиатуры в Linux? Готовые программы не интересуют

например, я запустил скрипт, и в bash отправился символ, или даже целая команда

Если в речь идет об иксах, то расширение XTEST и еще вариант XSendEvent, который, однако, не со всеми программами может заработать, но зато сообщения можно посылать конкретному окну (в понимании X11, а не оконного менеджера). Для того, чтобы понять, как оно реализуется, смотри в код xdotool.

kdeconnect использует libfakekey, например.

. которая, к слову, использует все тот же XTEST.

не, обычная Ubuntu , просто какой нибудь скрипт бы изучить на c++ например

наподобие SendKeys в Windows если есть что-то)

Чтобы изучить скрипт на С++, нужно знать хотя бы С++.

Чем готовые программы не подходят? Они ведь тоже часто написаны на С/С++.

мне просто нужен кусок кода как это сделать) далее я хочу разобрать его)

нет, тебе это не нужно. учат от примитивов к абстракциям, а не наоборот, хотя тебе пофиг.

например, я запустил скрипт, и в bash отправился символ, или даже целая команда

uinput. работает в X11, Wayland, vty и далее везде.

емаксом

“eev is a library that adds support for e-scripts to Emacs”

e-scripts — код на elisp, который выполняется по нажатию одной кнопки (как гиперссылки, только на elisp)

почти как коммандеры в Обероне Blackbox Component Pascal. только емакс.

ну а потом запускаешь либо через eshell из емакса, либо через векторный гипертекстовый интерфейс, либо emacs в batch режиме со скриптом.

Re: емаксом

в старой версии eepitch у того же автора была утилита ee, про каналы, которая получает через канал текст и отправляет его в stdin другого процесса

Читайте также:  Windows ж йесіні олданбалы программалары

он так интерпретаторы python, lua запускал

вообще это похоже на plan9 с plumbing и редактором acme

uinput. работает в X11, Wayland, vty и далее везде.

Источник

Удаленное управление компьютером по сети: Передача событий клавиатуры (Linux/X11)

Логика воспроизведения событий клавиатуры на Linux-системах в целом не сильно отличается от того, что мы уже реализовали под Windows. Но есть и отличия, о которых мы поговорим по мере необходимости.

Начнем с карты преобразования кодов клавиш из Qt::Key в специфичные системные коды X11. Займемся классом KeyMapper , добавив файл keymapper_x11.cpp (сокращенная версия):

Отличие этой от Windows-версии заключается в том, что в таблице Qt-кодам клавиш в соответствие ставится не прямой X11-код клавиши, а ее символьный вариант. Нам для заполнения таблицы достаточно специальных клавиш ( Delete , Enter и т.д.), букв латинского алфавита A-Z и цифр 0-9 , для которых в X11/keysymdef.h предусмотрены значения символьных кодов.

Для преобразования символьного кода клавиши в абсолютный используется функция XKeysymToKeycode() . Под абсолютным кодом клавиши имеется в виду код, однозначно присвоенный этой клавише, который не зависит от контекста (раскладки, клавиш-модификаторов и т.д.).

Обратите внимание, что для XKeysymToKeycode() в качестве одного из параметров требуется указатель на текущий дисплей. Его мы получаем с помощью функции XOpenDisplay() .

Переходим к непосредственному воспроизведению действия нажатия/отпускания клавиши. Функция onKeyAction() в файле remotecontrolserver.cpp :

В простейшем случае код клавиши находится в таблице из keyMapper . Этот код мы передаем функции XTestFakeKeyEvent() по аналогии с тем, как делали ранее при воспроизведении событий мыши (функция XTestFakeButtonEvent() ).

Чуть сложнее дела обстоят в ситуации, когда для Qt-кода ничего подходящего найти не удалось. В силу вступает «план Б»: используем текст text , который был получен на клиенте в результате нажатия клавиши.

Основная особенность заключается в том, что мы явно контролируем то, нажат ли Shift . Это связано с тем, что в строке text уже может быть заглавная буква или специальный символ (например, для Shift + цифра). В результате, если явно не «отжимать» клавишу Shift , мы воспроизведем совсем не то, что хотели. Достигается это повторным вызовом функции onKeyAction() :

Сама имитация нажатия сводится к регистрации дополнительного кода клавиши в таблице символьных кодов клавиш на основании первого Unicode-символа строки text :

Функция XStringToKeysym() принимает строку char* в формате UXXXX , где последнее — код печатного символа в таблице Unicode (например, U0411 для Б ), а возвращает числовое значение символьного кода клавиши.

Вся дальнейшая магия основана на использовании функций XGetKeyboardMapping() и XChangeKeyboardMapping() . После представленных манипуляций вызов XKeysymToKeycode() возвращает код клавиши, который можно воспроизводить с помощью знакомой нам функции XTestFakeKeyEvent() .

Выводы

Как и для Windows-версии, реализация под Linux не лишена недостатков. Они выражаются практически в том же самом: возможны «залипания» клавиш, могут некорректно отрабатывать клавиши-модификаторы, проблемы с раскладками. Также наблюдаются возможные проблемы при быстрой печати символами Unicode. Это связано со смешиванием событий нажатия/отпускания клавиш и особенностями X11 API.

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

Реклама

Исходники

Сборка проекта проверялась под Linux и Windows с Qt 4.8.4 и компиляторами gcc (x64) и msvc.2010 (32-bit) соответственно.

Источник

Оцените статью