• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Input
2
3crosvm supports
4[virtio-input](https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-3850008)
5devices that provide human input devices like multi-touch devices, trackpads, keyboards, and mice.
6
7Events may be sent to the input device via a socket carrying `virtio_input_event` structures. On
8Unix-like platforms, this socket must be a UNIX domain socket in stream mode (`AF_UNIX`/`AF_LOCAL`,
9`SOCK_STREAM`). Typically this will be created by a separate program that listens and accepts a
10connection on this socket and sends the desired events.
11
12On Linux, it is also possible to grab an `evdev` device and forward its events to the guest.
13
14The general syntax of the input option is as follows:
15
16```
17--input DEVICE-TYPE[KEY=VALUE,KEY=VALUE,...]
18```
19
20For example, to create a 1920x1080 multi-touch device reading data from `/tmp/multi-touch-socket`:
21
22```sh
23crosvm run \
24  ...
25  --input multi-touch[path=/tmp/multi-touch-socket,width=1920,height=1080]
26  ...
27```
28
29The available device types and their specific options are listed below.
30
31## Input device types
32
33### Evdev
34
35Linux only.
36
37Passes an [event device](https://docs.kernel.org/input/input.html#evdev) node into the VM. The
38device will be grabbed (unusable from the host) and made available to the guest with the same
39configuration it shows on the host.
40
41Options:
42
43- `path` (required): path to `evdev` device, e.g. `/dev/input/event0`
44
45Example:
46
47```sh
48crosvm run \
49  --input evdev[path=/dev/input/event0] \
50  ...
51```
52
53### Keyboard
54
55Add a keyboard virtio-input device.
56
57Options:
58
59- `path` (required): path to event source socket
60
61Example:
62
63```sh
64crosvm run \
65  --input keyboard[path=/tmp/keyboard-socket] \
66  ...
67```
68
69### Mouse
70
71Add a mouse virtio-input device.
72
73Options:
74
75- `path` (required): path to event source socket
76
77Example:
78
79```sh
80crosvm run \
81  --input mouse[path=/tmp/mouse-socket] \
82  ...
83```
84
85### Multi-Touch
86
87Add a multi-touch touchscreen virtio-input device.
88
89Options:
90
91- `path` (required): path to event source socket
92- `width` (optional): width of the touchscreen in pixels (default: 1280)
93- `height` (optional): height of the touchscreen in pixels (default: 1024)
94- `name` (optional): device name string
95
96If `width` and `height` are not specified, the first multi-touch input device is sized to match the
97GPU display size, if specified.
98
99Example:
100
101```sh
102crosvm run \
103  ...
104  --input multi-touch[path=/tmp/multi-touch-socket,width=1920,height=1080,name=mytouch2]
105  ...
106```
107
108### Rotary
109
110Add a rotating side button/wheel virtio-input device.
111
112Options:
113
114- `path` (required): path to event source socket
115
116Example:
117
118```sh
119crosvm run \
120  --input rotary[path=/tmp/rotary-socket] \
121  ...
122```
123
124### Single-Touch
125
126Add a single-touch touchscreen virtio-input device.
127
128Options:
129
130- `path` (required): path to event source socket
131- `width` (optional): width of the touchscreen in pixels (default: 1280)
132- `height` (optional): height of the touchscreen in pixels (default: 1024)
133- `name` (optional): device name string
134
135If `width` and `height` are not specified, the first single-touch input device is sized to match the
136GPU display size, if specified.
137
138Example:
139
140```sh
141crosvm run \
142  ...
143  --input single-touch[path=/tmp/single-touch-socket,width=1920,height=1080,name=mytouch1]
144  ...
145```
146
147### Switches
148
149Add a switches virtio-input device. Switches are often used for accessibility, such as with the
150Android [Switch Access](https://support.google.com/accessibility/android/topic/6151780) feature.
151
152Options:
153
154- `path` (required): path to event source socket
155
156Example:
157
158```sh
159crosvm run \
160  --input switches[path=/tmp/switches-socket] \
161  ...
162```
163
164### Trackpad
165
166Add a trackpad virtio-input device.
167
168Options:
169
170- `path` (required): path to event source socket
171- `width` (optional): width of the touchscreen in pixels (default: 1280)
172- `height` (optional): height of the touchscreen in pixels (default: 1024)
173- `name` (optional): device name string
174
175Example:
176
177```sh
178crosvm run \
179  ...
180  --input trackpad[path=/tmp/trackpad-socket,width=1920,height=1080,name=mytouch1]
181  ...
182```
183