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. Попробую переделать твою программу но наверное у меня не получиться. Если у тебя есть немного свободного времени и тебя не затруднит, переделай её пожалуйста, заранее буду благодарен.

Источник

Эмуляция нажатия клавиши на клавиатуре

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

Я подумал в сторону /dev/input/event* , но тут две неприятности:

1. в сети нагуглил только примеры кейлогеров, т.е. RDONLY

И так с любым event*

target ядро (ровесник мамонтов) — 2.4.32

Насколько я понимаю архитектуру (менее чем никак), с юзерспейса эмулировать клавиатуру напрямую нельзя (разве что только через модуль ядра). Можно писать в /dev/tty* , а если в tty запущены иксы — тогда через xdotool/libxdo. Т.е. надо определять запущены иксы в активном tty или нет.

uinput

по крайней мере первое шлет ввод средствами иксов, через XEvent или что-нить типа XTest, а мне нужна клавиатура, а не события иксов

посмотрю, хотя это, похоже, не то

разве что только через модуль ядра

самый очевидный вариант, но я убьюсь писать модуль ведра, еще и под 2.4.32

возвращает 0, и lsmod | grep uinput показывает, что модуль загружен, но файлов в /dev все равно нет

у тебя там udev или всё-таки devfsd? Если последнее — есть мнение что ноды устройств надо создавать вручную. Какой у них major и minor для передачи mknod — хз, надо курить модуль.

Спасибо, не знал.

Читайте также:  Браузеры с vpn mac os

Итого

uinput действительно решил проблему

Предыстория: на таргете в иксах есть баг — раскладка в иксах не переключается до первого события от хардварной клавы, т.е. если использовать только виртуальную клавиатуру на всех этапах, включая логин скрин, то раскладка в иксах не переключается в принципе, не через XkbLockGroup , ни через XTestFakeKeyEvent , ни через XSendEvent , ни через апплет на панели DE. А работать ОС должна, в том числе и совсем без хардварной клавиатуры, и раскладка при этом должна переключаться.

Теперь по решению: модуль на таргете по умолчанию не загружался и файл в /dev тоже не создавался, поэтому в XSetup было добавлено:

где hwkbdhook — почти полная копипаста этого

Господа mironov_ivan и m0rph , благодарю за пинки в нужную сторону

Источник

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

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

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

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

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

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

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

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

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

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

Источник

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

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

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

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

Так как 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 летнее время

Эмуляция нажатия клавиатуры в 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).

Источник

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

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

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

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

Так как 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).

Источник

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