Имитация нажатия клавиш 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 или нет.

Читайте также:  Windows не находить iphone

uinput

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

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

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

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

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

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

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

Итого

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 (операционные системы упорядочены по времени, потраченному на поиск решения). Представленный в статье материал может быть отправной точкой к дальнейшему изучению вопроса кроссплатформенной отправки событий в цикл обработки системных сообщений.

Читайте также:  Vmware player linux удаление

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

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

Так как 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. в файле проекта добавил подключение необходимых фреймворков, в частности:

Читайте также:  Оформление линукс для windows

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

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

Источник

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