xref: /aosp_15_r20/external/crosvm/docs/book/src/devices/input.md (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker# Input
2*bb4ee6a4SAndroid Build Coastguard Worker
3*bb4ee6a4SAndroid Build Coastguard Workercrosvm supports
4*bb4ee6a4SAndroid Build Coastguard Worker[virtio-input](https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-3850008)
5*bb4ee6a4SAndroid Build Coastguard Workerdevices that provide human input devices like multi-touch devices, trackpads, keyboards, and mice.
6*bb4ee6a4SAndroid Build Coastguard Worker
7*bb4ee6a4SAndroid Build Coastguard WorkerEvents may be sent to the input device via a socket carrying `virtio_input_event` structures. On
8*bb4ee6a4SAndroid Build Coastguard WorkerUnix-like platforms, this socket must be a UNIX domain socket in stream mode (`AF_UNIX`/`AF_LOCAL`,
9*bb4ee6a4SAndroid Build Coastguard Worker`SOCK_STREAM`). Typically this will be created by a separate program that listens and accepts a
10*bb4ee6a4SAndroid Build Coastguard Workerconnection on this socket and sends the desired events.
11*bb4ee6a4SAndroid Build Coastguard Worker
12*bb4ee6a4SAndroid Build Coastguard WorkerOn Linux, it is also possible to grab an `evdev` device and forward its events to the guest.
13*bb4ee6a4SAndroid Build Coastguard Worker
14*bb4ee6a4SAndroid Build Coastguard WorkerThe general syntax of the input option is as follows:
15*bb4ee6a4SAndroid Build Coastguard Worker
16*bb4ee6a4SAndroid Build Coastguard Worker```
17*bb4ee6a4SAndroid Build Coastguard Worker--input DEVICE-TYPE[KEY=VALUE,KEY=VALUE,...]
18*bb4ee6a4SAndroid Build Coastguard Worker```
19*bb4ee6a4SAndroid Build Coastguard Worker
20*bb4ee6a4SAndroid Build Coastguard WorkerFor example, to create a 1920x1080 multi-touch device reading data from `/tmp/multi-touch-socket`:
21*bb4ee6a4SAndroid Build Coastguard Worker
22*bb4ee6a4SAndroid Build Coastguard Worker```sh
23*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
24*bb4ee6a4SAndroid Build Coastguard Worker  ...
25*bb4ee6a4SAndroid Build Coastguard Worker  --input multi-touch[path=/tmp/multi-touch-socket,width=1920,height=1080]
26*bb4ee6a4SAndroid Build Coastguard Worker  ...
27*bb4ee6a4SAndroid Build Coastguard Worker```
28*bb4ee6a4SAndroid Build Coastguard Worker
29*bb4ee6a4SAndroid Build Coastguard WorkerThe available device types and their specific options are listed below.
30*bb4ee6a4SAndroid Build Coastguard Worker
31*bb4ee6a4SAndroid Build Coastguard Worker## Input device types
32*bb4ee6a4SAndroid Build Coastguard Worker
33*bb4ee6a4SAndroid Build Coastguard Worker### Evdev
34*bb4ee6a4SAndroid Build Coastguard Worker
35*bb4ee6a4SAndroid Build Coastguard WorkerLinux only.
36*bb4ee6a4SAndroid Build Coastguard Worker
37*bb4ee6a4SAndroid Build Coastguard WorkerPasses an [event device](https://docs.kernel.org/input/input.html#evdev) node into the VM. The
38*bb4ee6a4SAndroid Build Coastguard Workerdevice will be grabbed (unusable from the host) and made available to the guest with the same
39*bb4ee6a4SAndroid Build Coastguard Workerconfiguration it shows on the host.
40*bb4ee6a4SAndroid Build Coastguard Worker
41*bb4ee6a4SAndroid Build Coastguard WorkerOptions:
42*bb4ee6a4SAndroid Build Coastguard Worker
43*bb4ee6a4SAndroid Build Coastguard Worker- `path` (required): path to `evdev` device, e.g. `/dev/input/event0`
44*bb4ee6a4SAndroid Build Coastguard Worker
45*bb4ee6a4SAndroid Build Coastguard WorkerExample:
46*bb4ee6a4SAndroid Build Coastguard Worker
47*bb4ee6a4SAndroid Build Coastguard Worker```sh
48*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
49*bb4ee6a4SAndroid Build Coastguard Worker  --input evdev[path=/dev/input/event0] \
50*bb4ee6a4SAndroid Build Coastguard Worker  ...
51*bb4ee6a4SAndroid Build Coastguard Worker```
52*bb4ee6a4SAndroid Build Coastguard Worker
53*bb4ee6a4SAndroid Build Coastguard Worker### Keyboard
54*bb4ee6a4SAndroid Build Coastguard Worker
55*bb4ee6a4SAndroid Build Coastguard WorkerAdd a keyboard virtio-input device.
56*bb4ee6a4SAndroid Build Coastguard Worker
57*bb4ee6a4SAndroid Build Coastguard WorkerOptions:
58*bb4ee6a4SAndroid Build Coastguard Worker
59*bb4ee6a4SAndroid Build Coastguard Worker- `path` (required): path to event source socket
60*bb4ee6a4SAndroid Build Coastguard Worker
61*bb4ee6a4SAndroid Build Coastguard WorkerExample:
62*bb4ee6a4SAndroid Build Coastguard Worker
63*bb4ee6a4SAndroid Build Coastguard Worker```sh
64*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
65*bb4ee6a4SAndroid Build Coastguard Worker  --input keyboard[path=/tmp/keyboard-socket] \
66*bb4ee6a4SAndroid Build Coastguard Worker  ...
67*bb4ee6a4SAndroid Build Coastguard Worker```
68*bb4ee6a4SAndroid Build Coastguard Worker
69*bb4ee6a4SAndroid Build Coastguard Worker### Mouse
70*bb4ee6a4SAndroid Build Coastguard Worker
71*bb4ee6a4SAndroid Build Coastguard WorkerAdd a mouse virtio-input device.
72*bb4ee6a4SAndroid Build Coastguard Worker
73*bb4ee6a4SAndroid Build Coastguard WorkerOptions:
74*bb4ee6a4SAndroid Build Coastguard Worker
75*bb4ee6a4SAndroid Build Coastguard Worker- `path` (required): path to event source socket
76*bb4ee6a4SAndroid Build Coastguard Worker
77*bb4ee6a4SAndroid Build Coastguard WorkerExample:
78*bb4ee6a4SAndroid Build Coastguard Worker
79*bb4ee6a4SAndroid Build Coastguard Worker```sh
80*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
81*bb4ee6a4SAndroid Build Coastguard Worker  --input mouse[path=/tmp/mouse-socket] \
82*bb4ee6a4SAndroid Build Coastguard Worker  ...
83*bb4ee6a4SAndroid Build Coastguard Worker```
84*bb4ee6a4SAndroid Build Coastguard Worker
85*bb4ee6a4SAndroid Build Coastguard Worker### Multi-Touch
86*bb4ee6a4SAndroid Build Coastguard Worker
87*bb4ee6a4SAndroid Build Coastguard WorkerAdd a multi-touch touchscreen virtio-input device.
88*bb4ee6a4SAndroid Build Coastguard Worker
89*bb4ee6a4SAndroid Build Coastguard WorkerOptions:
90*bb4ee6a4SAndroid Build Coastguard Worker
91*bb4ee6a4SAndroid Build Coastguard Worker- `path` (required): path to event source socket
92*bb4ee6a4SAndroid Build Coastguard Worker- `width` (optional): width of the touchscreen in pixels (default: 1280)
93*bb4ee6a4SAndroid Build Coastguard Worker- `height` (optional): height of the touchscreen in pixels (default: 1024)
94*bb4ee6a4SAndroid Build Coastguard Worker- `name` (optional): device name string
95*bb4ee6a4SAndroid Build Coastguard Worker
96*bb4ee6a4SAndroid Build Coastguard WorkerIf `width` and `height` are not specified, the first multi-touch input device is sized to match the
97*bb4ee6a4SAndroid Build Coastguard WorkerGPU display size, if specified.
98*bb4ee6a4SAndroid Build Coastguard Worker
99*bb4ee6a4SAndroid Build Coastguard WorkerExample:
100*bb4ee6a4SAndroid Build Coastguard Worker
101*bb4ee6a4SAndroid Build Coastguard Worker```sh
102*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
103*bb4ee6a4SAndroid Build Coastguard Worker  ...
104*bb4ee6a4SAndroid Build Coastguard Worker  --input multi-touch[path=/tmp/multi-touch-socket,width=1920,height=1080,name=mytouch2]
105*bb4ee6a4SAndroid Build Coastguard Worker  ...
106*bb4ee6a4SAndroid Build Coastguard Worker```
107*bb4ee6a4SAndroid Build Coastguard Worker
108*bb4ee6a4SAndroid Build Coastguard Worker### Rotary
109*bb4ee6a4SAndroid Build Coastguard Worker
110*bb4ee6a4SAndroid Build Coastguard WorkerAdd a rotating side button/wheel virtio-input device.
111*bb4ee6a4SAndroid Build Coastguard Worker
112*bb4ee6a4SAndroid Build Coastguard WorkerOptions:
113*bb4ee6a4SAndroid Build Coastguard Worker
114*bb4ee6a4SAndroid Build Coastguard Worker- `path` (required): path to event source socket
115*bb4ee6a4SAndroid Build Coastguard Worker
116*bb4ee6a4SAndroid Build Coastguard WorkerExample:
117*bb4ee6a4SAndroid Build Coastguard Worker
118*bb4ee6a4SAndroid Build Coastguard Worker```sh
119*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
120*bb4ee6a4SAndroid Build Coastguard Worker  --input rotary[path=/tmp/rotary-socket] \
121*bb4ee6a4SAndroid Build Coastguard Worker  ...
122*bb4ee6a4SAndroid Build Coastguard Worker```
123*bb4ee6a4SAndroid Build Coastguard Worker
124*bb4ee6a4SAndroid Build Coastguard Worker### Single-Touch
125*bb4ee6a4SAndroid Build Coastguard Worker
126*bb4ee6a4SAndroid Build Coastguard WorkerAdd a single-touch touchscreen virtio-input device.
127*bb4ee6a4SAndroid Build Coastguard Worker
128*bb4ee6a4SAndroid Build Coastguard WorkerOptions:
129*bb4ee6a4SAndroid Build Coastguard Worker
130*bb4ee6a4SAndroid Build Coastguard Worker- `path` (required): path to event source socket
131*bb4ee6a4SAndroid Build Coastguard Worker- `width` (optional): width of the touchscreen in pixels (default: 1280)
132*bb4ee6a4SAndroid Build Coastguard Worker- `height` (optional): height of the touchscreen in pixels (default: 1024)
133*bb4ee6a4SAndroid Build Coastguard Worker- `name` (optional): device name string
134*bb4ee6a4SAndroid Build Coastguard Worker
135*bb4ee6a4SAndroid Build Coastguard WorkerIf `width` and `height` are not specified, the first single-touch input device is sized to match the
136*bb4ee6a4SAndroid Build Coastguard WorkerGPU display size, if specified.
137*bb4ee6a4SAndroid Build Coastguard Worker
138*bb4ee6a4SAndroid Build Coastguard WorkerExample:
139*bb4ee6a4SAndroid Build Coastguard Worker
140*bb4ee6a4SAndroid Build Coastguard Worker```sh
141*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
142*bb4ee6a4SAndroid Build Coastguard Worker  ...
143*bb4ee6a4SAndroid Build Coastguard Worker  --input single-touch[path=/tmp/single-touch-socket,width=1920,height=1080,name=mytouch1]
144*bb4ee6a4SAndroid Build Coastguard Worker  ...
145*bb4ee6a4SAndroid Build Coastguard Worker```
146*bb4ee6a4SAndroid Build Coastguard Worker
147*bb4ee6a4SAndroid Build Coastguard Worker### Switches
148*bb4ee6a4SAndroid Build Coastguard Worker
149*bb4ee6a4SAndroid Build Coastguard WorkerAdd a switches virtio-input device. Switches are often used for accessibility, such as with the
150*bb4ee6a4SAndroid Build Coastguard WorkerAndroid [Switch Access](https://support.google.com/accessibility/android/topic/6151780) feature.
151*bb4ee6a4SAndroid Build Coastguard Worker
152*bb4ee6a4SAndroid Build Coastguard WorkerOptions:
153*bb4ee6a4SAndroid Build Coastguard Worker
154*bb4ee6a4SAndroid Build Coastguard Worker- `path` (required): path to event source socket
155*bb4ee6a4SAndroid Build Coastguard Worker
156*bb4ee6a4SAndroid Build Coastguard WorkerExample:
157*bb4ee6a4SAndroid Build Coastguard Worker
158*bb4ee6a4SAndroid Build Coastguard Worker```sh
159*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
160*bb4ee6a4SAndroid Build Coastguard Worker  --input switches[path=/tmp/switches-socket] \
161*bb4ee6a4SAndroid Build Coastguard Worker  ...
162*bb4ee6a4SAndroid Build Coastguard Worker```
163*bb4ee6a4SAndroid Build Coastguard Worker
164*bb4ee6a4SAndroid Build Coastguard Worker### Trackpad
165*bb4ee6a4SAndroid Build Coastguard Worker
166*bb4ee6a4SAndroid Build Coastguard WorkerAdd a trackpad virtio-input device.
167*bb4ee6a4SAndroid Build Coastguard Worker
168*bb4ee6a4SAndroid Build Coastguard WorkerOptions:
169*bb4ee6a4SAndroid Build Coastguard Worker
170*bb4ee6a4SAndroid Build Coastguard Worker- `path` (required): path to event source socket
171*bb4ee6a4SAndroid Build Coastguard Worker- `width` (optional): width of the touchscreen in pixels (default: 1280)
172*bb4ee6a4SAndroid Build Coastguard Worker- `height` (optional): height of the touchscreen in pixels (default: 1024)
173*bb4ee6a4SAndroid Build Coastguard Worker- `name` (optional): device name string
174*bb4ee6a4SAndroid Build Coastguard Worker
175*bb4ee6a4SAndroid Build Coastguard WorkerExample:
176*bb4ee6a4SAndroid Build Coastguard Worker
177*bb4ee6a4SAndroid Build Coastguard Worker```sh
178*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
179*bb4ee6a4SAndroid Build Coastguard Worker  ...
180*bb4ee6a4SAndroid Build Coastguard Worker  --input trackpad[path=/tmp/trackpad-socket,width=1920,height=1080,name=mytouch1]
181*bb4ee6a4SAndroid Build Coastguard Worker  ...
182*bb4ee6a4SAndroid Build Coastguard Worker```
183*bb4ee6a4SAndroid Build Coastguard Worker
184*bb4ee6a4SAndroid Build Coastguard Worker### Custom
185*bb4ee6a4SAndroid Build Coastguard Worker
186*bb4ee6a4SAndroid Build Coastguard WorkerAdd a custom virtio-input device.
187*bb4ee6a4SAndroid Build Coastguard Worker
188*bb4ee6a4SAndroid Build Coastguard Worker- `path` (required): path to event source socket
189*bb4ee6a4SAndroid Build Coastguard Worker- `config_path` (required): path to file configuring device
190*bb4ee6a4SAndroid Build Coastguard Worker
191*bb4ee6a4SAndroid Build Coastguard Worker```sh
192*bb4ee6a4SAndroid Build Coastguard Workercrosvm run \
193*bb4ee6a4SAndroid Build Coastguard Worker  --input custom[path=/tmp/keyboard-socket,config-path=/tmp/custom-keyboard-config.json] \
194*bb4ee6a4SAndroid Build Coastguard Worker  ...
195*bb4ee6a4SAndroid Build Coastguard Worker```
196*bb4ee6a4SAndroid Build Coastguard Worker
197*bb4ee6a4SAndroid Build Coastguard WorkerThis config_path requires a JSON-formatted configuration file. "events" configures the supported
198*bb4ee6a4SAndroid Build Coastguard Workerevents. "name" defines the customized device name, "serial" defines customized serial name. The
199*bb4ee6a4SAndroid Build Coastguard Workerproperties and axis info are yet to be supported.
200*bb4ee6a4SAndroid Build Coastguard Worker
201*bb4ee6a4SAndroid Build Coastguard WorkerHere is an example of event config file:
202*bb4ee6a4SAndroid Build Coastguard Worker
203*bb4ee6a4SAndroid Build Coastguard Worker```
204*bb4ee6a4SAndroid Build Coastguard Worker{
205*bb4ee6a4SAndroid Build Coastguard Worker  "name": "Virtio Custom",
206*bb4ee6a4SAndroid Build Coastguard Worker  "serial_name": "virtio-custom",
207*bb4ee6a4SAndroid Build Coastguard Worker  "events": [
208*bb4ee6a4SAndroid Build Coastguard Worker    {
209*bb4ee6a4SAndroid Build Coastguard Worker      "event_type": "EV_KEY",
210*bb4ee6a4SAndroid Build Coastguard Worker      "event_type_code": 1,
211*bb4ee6a4SAndroid Build Coastguard Worker      "supported_events": {
212*bb4ee6a4SAndroid Build Coastguard Worker        "KEY_ESC": 1,
213*bb4ee6a4SAndroid Build Coastguard Worker        "KEY_1": 2,
214*bb4ee6a4SAndroid Build Coastguard Worker        "KEY_2": 3,
215*bb4ee6a4SAndroid Build Coastguard Worker        "KEY_A": 30,
216*bb4ee6a4SAndroid Build Coastguard Worker        "KEY_B": 48,
217*bb4ee6a4SAndroid Build Coastguard Worker        "KEY_SPACE": 57
218*bb4ee6a4SAndroid Build Coastguard Worker      }
219*bb4ee6a4SAndroid Build Coastguard Worker    },
220*bb4ee6a4SAndroid Build Coastguard Worker    {
221*bb4ee6a4SAndroid Build Coastguard Worker      "event_type": "EV_REP",
222*bb4ee6a4SAndroid Build Coastguard Worker      "event_type_code": 20,
223*bb4ee6a4SAndroid Build Coastguard Worker      "supported_events": {
224*bb4ee6a4SAndroid Build Coastguard Worker        "REP_DELAY": 0,
225*bb4ee6a4SAndroid Build Coastguard Worker        "REP_PERIOD": 1
226*bb4ee6a4SAndroid Build Coastguard Worker      }
227*bb4ee6a4SAndroid Build Coastguard Worker    },
228*bb4ee6a4SAndroid Build Coastguard Worker    {
229*bb4ee6a4SAndroid Build Coastguard Worker      "event_type": "EV_LED",
230*bb4ee6a4SAndroid Build Coastguard Worker      "event_type_code": 17,
231*bb4ee6a4SAndroid Build Coastguard Worker      "supported_events": {
232*bb4ee6a4SAndroid Build Coastguard Worker        "LED_NUML": 0,
233*bb4ee6a4SAndroid Build Coastguard Worker        "LED_CAPSL": 1,
234*bb4ee6a4SAndroid Build Coastguard Worker        "LED_SCROLLL": 2
235*bb4ee6a4SAndroid Build Coastguard Worker      }
236*bb4ee6a4SAndroid Build Coastguard Worker    }
237*bb4ee6a4SAndroid Build Coastguard Worker  ]
238*bb4ee6a4SAndroid Build Coastguard Worker}
239*bb4ee6a4SAndroid Build Coastguard Worker```
240