|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 157
|
[C Unix/Linux]
Salve a tutti
Avrei bisogno di leggere gli input da mouse e tastiera direttamente dal sottosistema di input (bypassando il server X), quindi usando la struttura input_event che riempio con una read sul descrittore aperto in /dev/input/eventX; Ho però due problemi: Primo, come faccio a sapere direttamente nel programma qual'è il numero del device /dev/input/eventX da aprire?? Attualmenete sulla mia macchina apro /dev/input/event1 per il mouse e /dev/input/event2 per la tastiera. Ma dubito che sia una cosa standard su tutti i sistemi giusto? Se non sbaglio infatti esiste un file "/proc/bus/input/devices" che permette di conoscere i dispositivi di input. Secondo per poter aprire tali file devo acquisire i privileggi di root. Come bypasso ciò?? Codice:
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/input.h>
#include <string.h>
#include <linux/input.h>
#include <sys/ioctl.h>
#define KEY_RELEASE 0
#define KEY_PRESS 1
#define KEY_KEEPING_PRESSED 2
int main (int argc, char *argv[])
{
int i, fd;
struct input_event ev[64];
if (argc != 2)
{
fprintf(stderr, "usage: %s event-device (/dev/input/eventX)\n", argv[0]);
return 1;
}
if ((fd = open(argv[1], O_RDONLY)) < 0)
{
perror("Couldn't open input device");
return 1;
}
while (1)
{
size_t rb = read(fd, ev, sizeof(ev));
for (i = 0; i < (int) (rb / sizeof(struct input_event)); i++)
{
if(ev[i].type == EV_KEY)
{
if(ev[i].value == KEY_PRESS)
printf("Key press: %d code %d value %d\n", ev[i].type, ev[i].code, ev[i].value);
if(ev[i].value == KEY_RELEASE)
printf("Key release %d code %d value %d\n", ev[i].type, ev[i].code, ev[i].value);
if(ev[i].value == KEY_KEEPING_PRESSED)
printf("Key keeping pressed %d code %d value %d\n", ev[i].type, ev[i].code, ev[i].value);
}
}
}
return 0;
}
Come faccio ad eseguirlo senza privileggi di root? Grazie anticipatamente. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:39.



















