Почему мой код не может создавать простое устройство ввода с помощью UINPUT? -- linux поле с участием uinput пол Связанный проблема

Why my code is not able to create simple input device using uinput?


1
vote

проблема

русский

Я пытаюсь научиться использовать / dev / uinput в Linux и скопировал простой код из kernel.org/doc/html/v4.12/input/uinput.html который ниже:

 <код> xmlns:vms="clr-namespace:VersionManagementSystem" <vms:SignOffProjectListing Margin="5"/> 1  

Он компилируется и работает успешно без ошибок. Но я не могу найти любое устройство, созданное с помощью этой команды <код> xmlns:vms="clr-namespace:VersionManagementSystem" <vms:SignOffProjectListing Margin="5"/> 2 в терминале. Я также проверил внутри / dev / input / , но никакие изменения не найдены после выполнения моей этой программы.

Я попробовал это на Убунту, Кали. Что мне не хватает?

Английский оригинал

I am trying to learn using /dev/uinput in linux and copied simple code from kernel.org/doc/html/v4.12/input/uinput.html which is below:

#include <linux/uinput.h>  void emit(int fd, int type, int code, int val) {    struct input_event ie;     ie.type = type;    ie.code = code;    ie.value = val;    /* timestamp values below are ignored */    ie.time.tv_sec = 0;    ie.time.tv_usec = 0;     write(fd, &ie, sizeof(ie)); }  int main(void) {    struct uinput_setup usetup;     int fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);      /*     * The ioctls below will enable the device that is about to be     * created, to pass key events, in this case the space key.     */    ioctl(fd, UI_SET_EVBIT, EV_KEY);    ioctl(fd, UI_SET_KEYBIT, KEY_SPACE);     memset(&usetup, 0, sizeof(usetup));    usetup.id.bustype = BUS_USB;    usetup.id.vendor = 0x1234; /* sample vendor */    usetup.id.product = 0x5678; /* sample product */    strcpy(usetup.name, "Example device");     ioctl(fd, UI_DEV_SETUP, &usetup);    ioctl(fd, UI_DEV_CREATE);     /*     * On UI_DEV_CREATE the kernel will create the device node for this     * device. We are inserting a pause here so that userspace has time     * to detect, initialize the new device, and can start listening to     * the event, otherwise it will not notice the event we are about     * to send. This pause is only needed in our example code!     */    sleep(1);     /* Key press, report the event, send key release, and report again */    emit(fd, EV_KEY, KEY_SPACE, 1);    emit(fd, EV_SYN, SYN_REPORT, 0);    emit(fd, EV_KEY, KEY_SPACE, 0);    emit(fd, EV_SYN, SYN_REPORT, 0);     /*     * Give userspace some time to read the events before we destroy the     * device with UI_DEV_DESTOY.     */    sleep(1);     //ioctl(fd, UI_DEV_DESTROY);    close(fd);     return 0; } 

It compiles and run successfully without error. But i can't found any device created using this command xinput in terminal. I also checked inside /dev/input/ , but no changes found after executing my that program.

I tried it on Ubuntu, Kali. What i am missing ?

</div
     
   
   

Список ответов

0
 
vote

Может быть, это помогает другим.

 <код> int i=0; while(i<100){ i++; sleep(1);    emit(fd, EV_KEY, KEY_SPACE, 1);    emit(fd, EV_SYN, SYN_REPORT, 0);    emit(fd, EV_KEY, KEY_SPACE, 0);    emit(fd, EV_SYN, SYN_REPORT, 0); }   

Я обнаружил, что во время программы в петле создается устройство. Во время этого вы можете проверить <код> xinput командой. После окончания программы устройство уничтожено, даже если я не звоню <код> ioctl(fd,UI_DEV_DESTROY) .

 

May be it help others.

int i=0; while(i<100){ i++; sleep(1);    emit(fd, EV_KEY, KEY_SPACE, 1);    emit(fd, EV_SYN, SYN_REPORT, 0);    emit(fd, EV_KEY, KEY_SPACE, 0);    emit(fd, EV_SYN, SYN_REPORT, 0); } 

I found that while program in loop, device is created. During that you can check with xinput command. After program ends, device get destroyed even if i don't call ioctl(fd,UI_DEV_DESTROY).

</div
 
 

Связанный проблема

3  Blast не может создать единицу считать контейнер  ( Blast could not create a unit counts container ) 
Я строю локальную базу данных Blast. Однако, когда я запускаю команду BLASTN, я получил это сообщение об ошибке: t0 "/home/coremake/Release_build/build/pre...

0  Конвертировать GNOME-HELP (YELP) XML в статический HTML с XSLT  ( Convert gnome help yelp xml to static html with xslt ) 
Некоторые из приложений GNOME на Linux используют браузер справки под названием <код> yelp . Например, Gnome-Calculator, <Код> gcalctool , имеет свои файлы сп...

0  пс -ef + fourfield от PS -ef вывода  ( Ps ef fourfield from ps ef output ) 
<Р> Я должен объяснить о четырех местах (4 или 0) ПС -ef команды, в чем смысл этого числа THX Яэль <Р> корень 27116 27112 4 15:25 PTS / 0 00:00:00 Grep -qsRw ...

9  Компиляция FFMPEG 2.3 с Android NDK R10  ( Compiling ffmpeg 2 3 with android ndk r10 ) 
Я хочу компилировать FFMPEG 2.3 с Android NDK R10, следуя в этом руководстве: http://www.roman10.net/how-to-build-ffmpeg-for-android/ После получения неск...

10  Данные в SIGINFO заслуживают доверия?  ( Is the data in siginfo trustworthy ) 
Я обнаружил, что на Linux, сделав свой собственный звонок в rt_sigqueue syscall, я могу поставить все, что мне нравится в <код> si_uid и <код> si_pid / Код...

90  Linux Процесс состояний  ( Linux process states ) 
в Linux, что происходит с состоянием процесса, когда ему нужно читать блоки с диска? Это заблокировано? Если это так, как выберите другой процесс, выбранный д...

7  Утилита графического патча  ( Graphical patch utility ) 
У меня есть патч ядра для слегка другой версии ядра, то тот, который я пытаюсь исправить. Излишне говорить, что патч частично терпит неудачу. Я, безусловно, м...

1  Ошибка установки Ta-lib  ( Ta lib install error ) 
Я пытаюсь установить Ta-lib на Debian Jessie, используя PIP. Однако я сталкиваюсь с следующей ошибкой: <код> #include "ta-lib/ta_defs.h" ...

1954  Как изменить выходной цвет echo в Linux  ( How to change the output color of echo in linux ) 
Я пытаюсь распечатать текст в терминале, используя команду echo. Я хочу распечатать текст в красном цвете. Как я могу это сделать? ...

0  Python / django - Начало Apache с mod_wsgi  ( Python django starting apache with mod wsgi ) 
пытается запустить mod_wsgi. Получение опорной ошибки связанной с FMOD. <код> [root@host]# mod_wsgi-express start-server wsgi.py --port=80 > --user www...

2  Перечислите все процессы и потоки под процессами из Dump Linux Core с использованием GDB  ( List all processes threads under processes from linux core dump using gdb ) 
Я разрабатываю инструмент сценариев для дамп GDB / Linux, где, если я указываю скрипт в Core Bump, он перечисляет все следы стека всех нитей в процессе, т. Е....

14  Прошивка на основе Linux, как реализовать хороший способ обновления?  ( Linux based firmware how to implement a good way to update ) 
Я разрабатываю прибор на основе Linux, используя Alix 2D13. У меня разработал скрипт, который заботится о создании файла изображения, создавая разделы, уста...

20  Переименование набора файлов до 001, 002, ... на Linux  ( Renaming a set of files to 001 002 on linux ) 
Я изначально имел набор изображений формы Image_001.jpg, image_002.jpg, ... Я прошел через них и удалил несколько. Теперь я хотел бы переименовать оставшиес...

1  Форматирование вывода в Python  ( Formatting output in python ) 
Это мой код: <код> import commands mount = commands.getoutput('mount -v') lines = mount.splitlines() points = map(lambda line: line.split()[2], lines) perm...

1  Функция оболочки и истории Unix  ( Unix shell and history feature ) 
Как добавить функцию истории в оболочке Unix, чтобы пользователю получить доступ к последнему введенным Команда, пользователь сможет получить доступ до 10 ком...