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