Как ввести нажатия клавиш с помощью сценария оболочки?

Это не липко - Вы просто пишете в файл, чтобы заставить его отбросить кэши, и затем это сразу начинает кэшироваться снова.

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

27
13.06.2011, 02:26
4 ответа

Если Вы действуете на X уровнях (как в вопросе Gilles), то используйте xdotool как так:

xdotool key KEYSTROKE_SPECIFIER

Где KEYSTROKE_SPECIFIER может быть чем-то как "a" или "F2" или "control+j"

Править: Я пропустил Ваш ответ на вопрос Gilles, извините. Я оставлю этот ответ здесь как решение для X-случая.

23
27.01.2020, 19:39
  • 1
    я думаю xte работает на том же уровне. –  Cascabel 13.06.2011, 06:40

Используйте uinput драйвер. Я не думаю, что существует утилита для этого; Вы оказываетесь перед необходимостью писать или адаптировать немного кода C. Вкратце:

#include <fcntl.h>
#include <ioctl.h>
#include <unistd.h>
#include <linux/input.h>
#include <linux/uinput.h>
/* Set up a fake keyboard device */
fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK); // or /dev/input/uinput
ioctl(fd, UI_SET_EVBIT, EV_KEY);
struct uinput_user_dev uidev = …;
write(fd, &uidev, sizeof(uidev));
ioctl(fd, UI_DEV_CREATE);
/* Send an event */
struct input_event ev = …;
write(fd, &ev, sizeof(ev));
/* Clean up */
ioctl(fd, UI_DEV_DESTROY);
close(fd);

Больше полных ссылок:

24
27.01.2020, 19:39
  • 1
    Связь на einfochips.com была разорвана. Я заменил его снимком из archive.org. –  phunehehe 25.03.2014, 08:21
  • 2
    Вы думаете, что это могло помочь на решении этого вопроса? unix.stackexchange.com/questions/156985 / …, я думал, когда я нажимаю клавишу, эта программа отправила бы другой ключ, который проблематичное приложение на самом деле распознает (даже если одновременно)? –  Aquarius Power 25.09.2014, 03:07
  • 3
    Thiemonge для того, чтобы создать и переместить мышь работы, не может выяснить, как сделать нажатия клавиш из него хотя, даже если он, предположительно, преподает это. –  Cestarian 01.03.2016, 20:13
  • 4
    @Cestarian Это походит на вопрос для Переполнения стека. Отправьте свой код, объясните, что Вы ожидали и что Вы видите и предоставляете любые соответствующие сообщения об ошибках, записи в журнале и т.д. –  Gilles 'SO- stop being evil' 01.03.2016, 20:38
  • 5
    @Gilles хорошо, я хотел бы, но он говорит, что я достиг своего предела вопроса... Для получения слишком многих downvotes по 2 вопросам я спросил некоторое время назад; и вероятно еще немного по вопросам значительно старше я удалил. Черт, я даже не знаю, почему я добрался, столько downvotes здесь stackoverflow.com/questions/20619023 / … (получил довольно хороший ответ, хотя), было это, потому что я не отправил ошибку, которую я получал, возможно? Во всяком случае, вне темы. В основном я был бы, но не может. :( –  Cestarian 01.03.2016, 21:20

Если Вы НЕ работаете с X программами с окнами, которые могут быть отправлены ключи, Вы, вероятно, ищете expect, удобная и очень настраиваемая программа для выполнения других интерактивных программных оболочек, как будто пользователь управлял терминалом. Можно установить программные ответы для ответа на различный вывод с различными исходными данными.

9
27.01.2020, 19:39

Я написал некоторый код Python, который делает это. Можно найти его в моем проекте с открытым исходным кодом.

http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py

При выполнении того модуля как сценария как корень, Вы видите демонстрацию в действии.

Эта основная функциональность была расширена для другого проекта, powerdroid, который обеспечивает более конкретную реализацию для встроенной системы (Android).

http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py

7
27.01.2020, 19:39

Теги

Похожие вопросы