Saya akan menjawab pertanyaan dengan urutan terbalik:
- Mengapa ada begitu banyak?
Itu adalah perangkat yang mendukung sebagian besar input yang ada pada mesin (ada yang lain, mikrofon misalnya tidak akan dikelola /dev/input
). Bertentangan dengan asumsi bahwa satu keyboard plus satu mouse akan memberikan 2 perangkat, bahkan keyboard yang paling sederhana dan mouse yang paling sederhana pun akan tetap memberikan 6 perangkat.
Mengapa 6? Karena Xorg akan membuat keyboard input uji dan mouse input uji (keduanya virtual) selama startup-nya. Selain itu, ini akan menggabungkan keyboard uji dengan keyboard yang sebenarnya menjadi perangkat virtual utama. yaitu akan melakukan muxing dari input. Hal yang sama akan terjadi pada tes dan mouse sebenarnya.
Ditambah komputer biasa (desktop atau laptop) memiliki tombol lain selain dari keyboard: tombol power, tombol sleep.
The eventN
perangkat dalam ada perangkat untuk hal-hal yang Xorg menciptakan dan untuk apa memiliki komputer. Itu N
berasal dari ID berurutan dan analog dengan ID di xinput
. Misalnya pada mesin saya, saya punya:
[~]# 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
Dan xinput
memberi saya ID analog:
[~]$ 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)]
(Terlihat eventN
sesuai dengan id=N
)
Tanpa Xorg
1.1 Apa tujuan dari file ini?
Perhatikan bahwa semua input acak (termasuk kamera USB saya!) Dilihat oleh Xorg sebagai bagian dari keyboard virtual. Ini memungkinkan untuk muxing dan demuxing input. Sebagai contoh, saya dapat memindahkan mouse saya melalui mouse USB atau trackpad saya dan aplikasi tidak perlu tahu bedanya.
(Fakta bahwa kamera USB adalah bagian dari keyboard virtual adalah karena ia memiliki tombol untuk menghidupkan dan mematikannya. Dan karena itu adalah tombol, itu menjadi bagian dari subsistem keyboard. Input video yang sebenarnya ditangani /sys/class/video4linux
. )
Dengan kata lain, untuk suatu aplikasi hanya ada satu keyboard dan hanya satu mouse. Tetapi Xorg dan kernel perlu mengetahui perbedaannya. Dan ini mengarah ke bagian terakhir:
1.2 Mengapa tidak langsung mengirimnya dari kernel ke server X?
Karena Xorg perlu tahu bedanya.
Dan ada situasi di mana itu berguna. Anda dapat memetakan kembali kunci di Xorg untuk setiap perangkat input budak secara berbeda. Sebagai contoh, saya memiliki set permainan dengan pedal, ketika digunakan dalam game balap yang dihasilkannya a, bdan cuntuk masing-masing pedalnya. Namun, ketika pemrograman saya memetakan kembali tombol-tombol ini untuk Esc, Ctrldan Alt, tanpa memetakan kembali tombol pada keyboard itu sendiri.
Juga, tidak perlu mesin menjalankan Xorg. Misalnya, pada server tanpa kepala saya bisa mendapatkan output berikut:
[~]$ 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
Di mana perangkat input sesuai dengan port serial (terutama dalam hal ini mereka lakukan), bukan keyboard atau mouse.
gpm
).gpm
Daemon, atau GTK2 pada framebuffer.Tidak ada yang namanya "kirim langsung". Aplikasi harus memiliki beberapa metode membaca data, dan dalam unix yang dilakukan dengan cara yang sama mereka membaca file biasa dengan membuat simpul perangkat yang berfungsi dengan file normal IO system call untuk memungkinkan aplikasi membuka dan membacanya.
Ada sumber input lain selain mouse dan keyboard. Anda dapat mengetahui apa masing-masing dengan melihat
/sys/class/input
. Di sana Anda akan mendenda file dengan nama inputNN yang sama yang merupakan tautan simbolik ke node lain di sysf yang menggambarkan perangkat yang diwakilinya. Sumber umum lainnya termasuk kartu suara (yang memberi sinyal ketika semuanya dicolokkan dan dicabut) dan tombol daya fisik pada komputer.sumber