/ dev / input - Что это такое?

Имя вторичного приглашения точно такое же - вторичное приглашение. Как указано на странице руководства bash:

PS2 Значение этого параметра раскрывается , как в случае с PS1, и используется в качестве дополнительной строки приглашения . По умолчанию это ``> ''.

10
28.01.2017, 02:11
2 ответа

Я отвечу на вопрос в обратном порядке:

  1. Почему их так много?

Это устройства, которые соответствуют большинству входов, имеющихся на машине (есть и другие, например, микрофон не будет управляется в / dev / input ). Вопреки предположению, что одна клавиатура плюс одна мышь дает 2 устройства, даже самая простая клавиатура и самая простая мышь все равно дают 6 из них.

Почему 6? Поскольку Xorg создаст тестовую клавиатуру ввода и мышь тестового ввода (обе виртуальные) во время своего запуска. Кроме того, он объединит тестовую клавиатуру с реальной клавиатурой в основное виртуальное устройство. т.е. он будет выполнять мультиплексирование ввода. То же самое произойдет с тестовой и реальной мышью.

Кроме того, на обычном компьютере (настольном или портативном) помимо клавиатуры есть и другие кнопки: кнопка питания, кнопка сна.

Устройства eventN там - это устройства для вещей, которые создает Xorg, и для того, что есть у компьютера. N поступает из последовательных идентификаторов и аналогичен идентификаторам в xinput . Например, на моей машине:

[~]# ls -l /dev/input/
total 0
drwxr-xr-x 2 root root     100 Jan 26 16:01 by-id
drwxr-xr-x 2 root root     140 Jan 26 16:01 by-path
crw-rw---- 1 root input 13, 64 Jan 26 16:01 event0
crw-rw---- 1 root input 13, 65 Jan 26 16:01 event1
crw-rw---- 1 root input 13, 74 Jan 26 16:01 event10
crw-rw---- 1 root input 13, 75 Jan 26 16:01 event11
crw-rw---- 1 root input 13, 76 Jan 26 16:01 event12
crw-rw---- 1 root input 13, 77 Jan 26 16:01 event13
crw-rw---- 1 root input 13, 66 Jan 26 16:01 event2
crw-rw---- 1 root input 13, 67 Jan 26 16:01 event3
crw-rw---- 1 root input 13, 68 Jan 26 16:01 event4
crw-rw---- 1 root input 13, 69 Jan 26 16:01 event5
crw-rw---- 1 root input 13, 70 Jan 26 16:01 event6
crw-rw---- 1 root input 13, 71 Jan 26 16:01 event7
crw-rw---- 1 root input 13, 72 Jan 26 16:01 event8
crw-rw---- 1 root input 13, 73 Jan 26 16:01 event9
crw-rw---- 1 root input 13, 63 Jan 26 16:01 mice
crw-rw---- 1 root input 13, 32 Jan 26 16:01 mouse0
crw-rw---- 1 root input 13, 33 Jan 26 16:01 mouse1

И xinput дает мне аналогичные идентификаторы:

[~]$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Optical Mouse                id=10   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ USB 2.0 Camera                            id=11   [slave  keyboard (3)]
    ↳ Asus Laptop extra buttons                 id=12   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]

(Посмотрите, что eventN соответствует id = N )

Без Xorg

1.1 Какова цель этого файла?

Обратите внимание, что все случайные входы (включая мою USB-камеру!) Воспринимаются Xorg как часть виртуальной клавиатуры. Это позволяет мультиплексировать и демультиплексировать вход. Например, я могу перемещать мышь через USB-мышь или через трекпад, и приложению не нужно знать разницу.

(USB-камера является частью виртуальной клавиатуры, потому что у нее есть кнопка для ее включения и выключения. А поскольку это кнопка, она становится частью подсистемы клавиатуры. Фактический видеовход обрабатывается в / sys / class / video4linux .)

Другими словами, для приложения действительно есть только одна клавиатура и только одна мышь. Но и Xorg, и ядро ​​должны знать различия. И это приводит к последней части:

1.2 Почему бы просто не отправить его прямо из ядра на X-сервер?

Потому что Xorg должен знать разницу.

И есть ситуации, в которых это полезно. Вы можете переназначить ключи в Xorg на каждое подчиненное устройство ввода по-разному. Например, у меня есть игровой набор с педалями, при использовании в гоночной игре он выводит a , b и c для каждой из своих педалей. Тем не менее, при программировании я переназначаю эти клавиши на Esc , Ctrl и Alt , без переназначения клавиш на самой клавиатуре.

Кроме того, не обязательно, чтобы машина запускала Xorg. Например, на безголовом сервере я могу получить следующий вывод:

[~]$ ls -l /dev/input/
total 0
drwxr-xr-x 2 root root      80 Nov  8 02:36 by-path
crw-rw---- 1 root input 13, 64 Nov  8 02:36 event0
crw-rw---- 1 root input 13, 65 Nov  8 02:36 event1
crw-rw---- 1 root input 13, 66 Nov  8 02:36 event2

Где устройства ввода соответствуют последовательным портам (особенно в этом случае они соответствуют) вместо клавиатуры или мыши.

20
27.01.2020, 20:01

Не существует такой вещи, как «отправить напрямую». У приложений должен быть какой-то метод чтения данных, и в unix это делается так же, как они читают обычные файлы, создавая узел устройства, который работает с обычными системными вызовами файлового ввода-вывода, чтобы позволить приложениям открывать и читать их.

Помимо мыши и клавиатуры, существуют и другие источники ввода. Вы можете узнать, что это за каждый, заглянув в / sys / class / input . Там вы найдете файлы с теми же именами inputNN, которые являются символическими ссылками на другой узел в sysfs, который описывает устройство, которое они представляют. Другие распространенные источники включают звуковые карты (которые сигнализируют, когда что-то подключено и отключено) и физическая кнопка питания на компьютере.

3
27.01.2020, 20:01

Теги

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