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:
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.
By installing Wayland compositor and VNC backend, you can enable graphical environment. One of the options is sway, wayvnc and xwayland(if necessary).
sudo apt install sway wayvnc xwayland WLR_BACKENDS=headless WLR_LIBINPUT_NO_DEVICES=1 sway WAYLAND_DISPLAY=wayland-1 wayvnc 0.0.0.0 # or use port forwarding
And then, connect to 192.168.0.2:5900(or localhost:5900) with arbitrary VNC client. Or, novnc(https://github.com/novnc/noVNC/releases). For novnc you need to install novnc, and run <novnc_path>/utils/novnc_proxy, and then connect to http://192.168.0.2:6080/vnc.html (or localhost:6080 if port forwarding is enabled.)
weston with VNC backend might be another option, but it isn't available in Debian package repository for bookworm.
If the file /sdcard/linux/virglrenderer exists on the device, it enables VirGL for VM. This requires enabling ANGLE for the Terminal app. (https://chromium.googlesource.com/angle/angle.git/+/HEAD/doc/DevSetupAndroid.md)