# Ideas ## Usability * Docs (tutorial and manpage). * Makefile and debian package. * Patch for spice-client-gtk for menuless windows (spicec usecase). * Systemd service for a single VM. * Shell completions. * Support for other Spice clients such as [Remmina](https://remmina.org). * Support for multiple source/targets pairs (analogous to `shared_folders`) at: * `provision_rsync` * Be more distro-agnostic, making any debian-specific routine as a separate function. ## Virtualization * Config option to [disable networking](https://wiki.qemu.org/Documentation/Networking#How_to_disable_network_completely), passing `-net none`. * [Nested virtualization](http://www.rdoxenham.com/?p=275) ([1](https://wiki.archlinux.org/index.php/KVM#Nested_virtualization), [2](https://ladipro.wordpress.com/2017/02/24/running-hyperv-in-kvm-guest/)). ## Workflow * Continuous Integration script (kvmx-ci): * For schedule jobs (like cron). * Pull from remote repository and check source integrity. * Automatic VM (re-)creation and/or provisioning. * Logging. * Status report. * Test suite for kvmx itself. * Option `provision_always` to provision whenever a guest is started. * A qubes-like behavior: guest configured: * Option 1: * With backing file and a basebox as a TemplateVM, using a `template_vm` config working along with `base` abd `backing_file`. * To reinitialize de backing file at every restart. * Guest won't start if the basebox is running. * Option 2: * Starting the VM using -snapshot param. * Setting the $image to the same as the basebox. * Use `$shared_folders` to mount custom data into the guest, allowing for specific /home/user contents. * KVMX lifecycle enhancements: * kvmx recycle # kvmx stop/destroy/up/provision * kvmx mount # live 9p mounting * kvmx run # uploads a script as a temp file in the guest and runs it * kvmx upgrade # upgrades via SSH using a pre-defined upgrade command in the kvmxfile, # start the VM if needed, skip if no command is set (skip when backing_file=1?) * KVMX disposable enhancements: * kvmx disposable [command] * kvmx disposable-run * kvmx disposable-name * kvmx mat * kvmx pdf-cleaner * kvmx clamav ## Folder sharing * Try to umount all sshfs volumes in the host. * Remount 9p shared folders and reinitialize spice-vdagent upon resume from disk [see possible bug](https://bugzilla.redhat.com/show_bug.cgi?id=1333072). * Alternative folder sharing support: * NFS, SMB. * Or even [SSH to a server](https://superuser.com/questions/831659/mount-a-local-directory-to-a-remote-ssh-server)). ## Image handling * Support for other OSes like Arch Linux, Gentoo, Alpine, CentOS and NixOS. * Integration with [image-bootstrap](https://github.com/hartwork/image-bootstrap). * LVM support at `kvmx-create`, with optional LUKS support for the whole volume. * Non-superuser support for building images on `kvmx-create`, relying on a method like the following: * https://unix.stackexchange.com/questions/32008/how-to-mount-an-image-file-without-root-permission * https://wiki.debian.org/ManipulatingISOs * https://github.com/libfuse/libfuse/wiki/Filesystems * https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=all&keywords=fuse * Additional way to handle missing image on `kvmx up` by spawning `kvmx_install` instead of `kvmx-create`. * Fix isolinux support: * http://www.syslinux.org/wiki/index.php?title=Development/Testing * http://linux-kernel-driver.blogspot.com.br/2009/06/linux-kernel-development-using.html * https://bbs.archlinux.org/viewtopic.php?id=177299 * Image resize action, doing something like this, thanks to https://ahelpme.com/linux/online-resize-of-a-root-ext4-file-system-increase-the-space/ # poweroff kvmx poweroff $guest # resize image qemu-img resize `kvmx list_image $guest` +5G # power up kvmx up $guest # ensure parted is installed sudo apt-get install -y parted # resize virtual machine root fs - while the partition is mounted! # this parted command currently need to be done manually #echo resizepart 2 -1 | kvmx ssh $guest sudo parted /dev/vda # See https://unix.stackexchange.com/questions/190317/gnu-parted-resizepart-in-script#202872 # https://bugs.launchpad.net/ubuntu/+source/parted/+bug/1270203 # https://techtitbits.com/2018/12/using-parteds-resizepart-non-interactively-on-a-busy-partition/ # https://serverfault.com/questions/870594/resize-partition-to-maximum-using-parted-in-non-interactive-mode kvmx ssh $guest sudo parted /dev/vda resizepart 2 -1 Yes kvmx ssh $guest sudo resize2fs /dev/vda2 kvmx ssh $guest sudo touch /forcefsck kvmx ssh $guest sudo poweroff ## Audio fixes to avoid crackling on input Implement an option to reduce crackling on sound input. See: * https://stackoverflow.com/questions/32193050/qemu-pulseaudio-and-bad-quality-of-sound#35998501 * https://www.reddit.com/r/VFIO/comments/542bw1/ha_got_rid_of_the_pulse_audio_crackling/ * https://www.reddit.com/r/VFIO/comments/ibmjs3/finally_fixed_crackling_audio_when_passing/ * https://www.reddit.com/r/VFIO/comments/746t4h/getting_rid_of_audio_crackling_once_and_for_all/ * https://www.reddit.com/r/VFIO/comments/8aqju8/audio_crackling_when_routing_output_to_pulseaudio/ Fix: export QEMU_AUDIO_DRV="pa" export QEMU_PA_SAMPLES="8192" export QEMU_AUDIO_TIMER_PERIOD="99" ## Simultaneous clients connections Implement the following: export SPICE_DEBUG_ALLOW_MC=1 For explanation, check https://www.spice-space.org/multiple-clients.html