Получение Нажатий клавиш в GNU/Linux в C без X11

В большую часть времени я просто иду со Списком путем, поскольку это дает мне всю функциональность, в которой я нуждаюсь в 90% времени, и когда что-то 'дополнительное' необходимо, я наследовался ему, и код что дополнительный бит.

15
задан Chris Stryczynski 9 June 2019 в 09:33
поделиться

3 ответа

Well, without X11 this problem is way more difficult.
For the keystroke part you can use a code similar to this one, but you have to pass as an argument the device that you are reading (keyboard, usually /dev/input/event0 )

#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    int fd;
    if(argc < 2) {
        printf("usage: %s <device>\n", argv[0]);
        return 1;
    }
    fd = open(argv[1], O_RDONLY);
    struct input_event ev;

    while (1)
    {
    read(fd, &ev, sizeof(struct input_event));

    if(ev.type == 1)
        printf("key %i state %i\n", ev.code, ev.value);

    }
}

Credits do not go to me, this code is taken from the Ventriloctrl hack to get keystrokes. http://public.callutheran.edu/~abarker/ventriloctrl-0.4.tar.gz

Hope I am of some help.

20
ответ дан 1 December 2019 в 02:55
поделиться

Вы можете читать данные из одного из файлов в / dev / input. Какой из них зависит от вашей системы. Это может быть / dev / input / event0 или / dev / input / by-path / platform-i8042-serio-0-event-kbd или что-то еще. Формат указан в заголовке ядра input.h. Это

struct input_event {
        struct timeval time;
        __u16 type;
        __u16 code;
        __s32 value;
};

. Вы можете запустить

od -tx2 FILENAME

и ввести что-нибудь, чтобы увидеть, что произойдет.

Что касается определения того, какое приложение получило ключевое событие, я не уверен. Вы можете попробовать проверить, какой из них читает с главного tty.

3
ответ дан 1 December 2019 в 02:55
поделиться

Одна возможность: найти и изучить исходный код « sudosh », «оболочки sudo» (или одной из ее замен, поскольку она не была изменена в некоторое время,. Google является вашим другом)

Она мур с псевдоконсолями и отслеживают все входные и выходные устройства также путем записи информации в файл

Независимо от того, что является достаточно точной для вас, возможно, более спорны. он будет регистрировать все нажатия клавиш для всех приложений. Я также не уверен, как это работает с X11 - работает ли он с X11.

1
ответ дан 1 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

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