Tôi sẽ đi với câu hỏi theo thứ tự ngược lại:
- Tại sao có nhiều như vậy?
Đó là những thiết bị đại diện cho hầu hết các đầu vào có trên máy (có những thiết bị khác, ví dụ như micrô sẽ không được quản lý /dev/input
). Trái ngược với giả định rằng một bàn phím cộng với một con chuột sẽ cho 2 thiết bị, ngay cả bàn phím đơn giản nhất và chuột đơn giản nhất vẫn sẽ cung cấp cho 6 người trong số họ.
Tại sao 6? Bởi vì Xorg sẽ tạo ra một bàn phím đầu vào thử nghiệm và một con chuột đầu vào thử nghiệm (cả ảo) trong quá trình khởi động. Ngoài ra, nó sẽ tổng hợp bàn phím thử nghiệm với bàn phím thực tế thành một thiết bị ảo chính. tức là nó sẽ thực hiện muxing của đầu vào. Điều tương tự sẽ xảy ra với thử nghiệm và chuột thực tế.
Cộng với một máy tính thông thường (máy tính để bàn hoặc máy tính xách tay) có các nút khác ngoài bàn phím: nút nguồn, nút ngủ.
Các eventN
thiết bị trong đó có các thiết bị cho những thứ mà Xorg tạo ra và cho những gì máy tính có. Xuất N
phát từ ID tuần tự và tương tự như ID trong xinput
. Ví dụ trên máy của tôi, tôi có:
[~]# 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
Và xinput
cung cấp cho tôi ID tương tự:
[~]$ 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)]
(Nhìn eventN
tương ứng với id=N
)
Không có Xorg
1.1 Mục đích của tập tin này là gì?
Lưu ý rằng tất cả các đầu vào ngẫu nhiên (bao gồm cả camera USB của tôi!) Được Xorg xem như một phần của bàn phím ảo. Điều này cho phép muxing và demuxing đầu vào. Ví dụ: tôi có thể di chuyển chuột qua chuột USB hoặc qua bàn di chuột của mình và một ứng dụng không cần biết sự khác biệt.
(Thực tế là camera USB là một phần của bàn phím ảo là do nó có nút bật và tắt. Và vì nó là nút nên nó trở thành một phần của hệ thống con bàn phím. Đầu vào video thực tế được xử lý /sys/class/video4linux
. )
Nói cách khác, đối với một ứng dụng thực sự chỉ có một bàn phím và chỉ có một con chuột. Nhưng cả Xorg và kernel đều cần biết sự khác biệt. Và điều này dẫn đến phần cuối cùng:
1.2 Tại sao không gửi nó trực tiếp từ kernel đến máy chủ X?
Bởi vì Xorg cần biết sự khác biệt.
Và có những tình huống trong đó nó hữu ích. Bạn có thể sắp xếp lại các phím trong Xorg cho mỗi thiết bị nhập nô lệ khác nhau. Ví dụ, tôi có một bộ chơi game với bàn đạp, khi được sử dụng trong một trò chơi đua xe nó ra a, bvà ccho mỗi bàn đạp của nó. Tuy nhiên, khi lập trình tôi remap các phím để Esc, Ctrlvà Alt, không Remapping các phím trên bàn phím riêng của mình.
Ngoài ra, không cần thiết phải chạy máy Xorg. Ví dụ: trên máy chủ không đầu tôi có thể nhận đầu ra sau:
[~]$ 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
Trong đó các thiết bị đầu vào tương ứng với các cổng nối tiếp (đáng chú ý là trong trường hợp này chúng làm) thay vì bàn phím hoặc chuột.