blob: b6da8b9c28e8810c9e87e3cafd8f3a0f843edbcf [file] [view] [edit]
# Custom VM
## Headless VMs
If your VM is headless (i.e. console in/out is the primary way of interacting
with it), you can spawn it by passing a JSON config file to the
VirtualizationService via the `vm` tool on a rooted AVF-enabled device. If your
device is attached over ADB, you can run:
```shell
cat > vm_config.json <<EOF
{
"kernel": "/data/local/tmp/kernel",
"initrd": "/data/local/tmp/ramdisk",
"params": "rdinit=/bin/init"
}
EOF
adb root
adb push <kernel> /data/local/tmp/kernel
adb push <ramdisk> /data/local/tmp/ramdisk
adb push vm_config.json /data/local/tmp/vm_config.json
adb shell "/apex/com.android.virt/bin/vm run /data/local/tmp/vm_config.json"
```
The `vm` command also has other subcommands for debugging; run
`/apex/com.android.virt/bin/vm help` for details.
# Terminal app
## Run GUI apps
Click Display button above to enable display.
And then, go back to the terminal, and run GUI apps.
## Mouse passthrough
There is a button for mouse passthrough in a display activity. With that, external
mouse event is directly delivered to a VM instance.
## Hardware acceleration
If a device supports gfxstream, a user can enable hardware acceleration in Terminal
app's settings menu. If you want to test in the userdebug device, create
`/sdcard/linux/gfxstream` file, which enables gfxstream for VM. Note: on HSUM
(Headless System User Mode) devices like some tablets and laptops, use the path
`/mnt/user/10/emulated/10/linux/gfxstream` instead.
## Connect to console via ADB
Run `adb shell vm console` which returns the command to attach console of an existing
VM instance.
## (Experimental) Use other desktop environment
We recommend a user to use weston with kiosk mode for single-app experience.
If you want to experiment with other desktop environment, please remove the line
including `systemctl --user start weston` in `/usr/local/bin/enable_display` and
`usr/local/bin/enable_gfxstream` to avoid conflict with newly installed display
manager with existing weston.
## Connect to host Android device with ADB
To establish ADB connection from the VM at terminal app to the host Android
device, check if `adbd` of the host Android device is listening to any vsock
ports in advance.
There are some properties to make `adbd` listening to the vsock port. To check
whether those properties exist or not, connect your Android device with USB by
following instruction at https://developer.android.com/tools/adb#Enabling, and
execute `adb shell getprop | grep adb` on your computer. If execution result
contains one or more lines below, continue to the later steps with the first
`PORT_NUMBER` ordered below.
1. `[service.adb.listen_addrs]: [vsock:<PORT_NUMBER>]`
1. `[service.adb.tcp.port]: [<PORT_NUMBER>]`
1. `[persist.adb.tcp.port]: [<PORT_NUMBER>]`
If none of the properties above is set, execute `adb tcpip <PORT_NUMBER>` on
your computer with picking any new `PORT_NUMBER`, to set the property with that
`PORT_NUMBER` and restart `adbd` with that property.
Then, execute commands below at terminal app to install `adb` and establish ADB
connection.
```bash
sudo apt update
sudo apt install adb
adb connect vsock:2:<PORT_NUMBER> # 2 is CID of the host Android device
```