aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.md9
-rw-r--r--TODO.md14
-rwxr-xr-xkvmx20
-rw-r--r--kvmxfile13
-rwxr-xr-xshare/provision/debian/desktop-basic5
-rwxr-xr-xshare/provision/debian/web-full2
6 files changed, 61 insertions, 2 deletions
diff --git a/ChangeLog.md b/ChangeLog.md
index a95f824..5f75806 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,14 @@
# ChangeLog
+## 0.5.0 - 2025-11-14
+
+* Persistent SSH sessions, to speed up connections, especially clipboard
+ copy and paste between the host and the guests:
+ * Enabled by default.
+
+ * Configurable with `ssh_persist`, `ssh_control_master`, `ssh_control_path`
+ and `ssh_control_persist` variables.
+
## 0.4.1 - 2024-12-17
* Fixes the case when the virtual machine guest is registered under a
diff --git a/TODO.md b/TODO.md
index 06674f4..d6950ec 100644
--- a/TODO.md
+++ b/TODO.md
@@ -11,6 +11,11 @@
## Usability
+* [ ] Add a `cryptdisks` action to handle unlocking of encrypted volumes used
+ by a guest VM. The specific unlocking procedure should be configurable,
+ and the action must test whether the volume is available and not already
+ unlocked.
+
* [ ] Hard pause VM (--hard): besides pausing the process, also try to pause it
in the QEMU monitor.
@@ -39,6 +44,15 @@
* [ ] Support for per-guest `known_hosts` for SSH logins.
+* [ ] Support for storing guest VMs in (remote) repositories, with supporing
+ actions such as `repo`, `push`, `pull` etc.
+
+* [ ] Commands to run when the machine comes back from sleep.
+ But how to detect that the host (like a laptop) came out from
+ a sleep state? Maybe track the time lapses and run a command
+ if the interval is too high? Both the interval and the command
+ could be configurable.
+
## Virtualization
* [ ] Config option to [disable
diff --git a/kvmx b/kvmx
index 2f20346..2c04c22 100755
--- a/kvmx
+++ b/kvmx
@@ -67,6 +67,25 @@ function __kvmx_ssh_command {
# See http://blog.djm.net.au/2013/11/chacha20-and-poly1305-in-openssh.html
SSH_OPTS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=FATAL -o ProxyCommand=none -o Ciphers=chacha20-poly1305@openssh.com $ssh_key_param"
+
+ # Persist SSH sessions, to speed up connections, especially clipboard copy
+ # and paste between the host and the guests
+ if [ "$ssh_persist" != "n" ]; then
+ if [ -z "$ssh_control_master" ]; then
+ ssh_control_master="auto"
+ fi
+
+ if [ -z "$ssh_control_persist" ]; then
+ ssh_control_persist="0"
+ fi
+
+ if [ -z "$ssh_control_path" ]; then
+ ssh_control_path="$HOME/.ssh/kvmx-${VM}-%r@%h:%p"
+ fi
+
+ SSH_OPTS="$SSH_OPTS -o ControlMaster=$ssh_control_master -o ControlPath=$ssh_control_path -o ControlPersist=$ssh_control_persist"
+ fi
+
SSH_COMMAND="ssh $SSH_OPTS -o User=$SSH_LOGIN"
SCP_COMMAND="scp $SSH_OPTS -o User=$SSH_LOGIN"
}
@@ -1258,6 +1277,7 @@ function kvmx_poweroff {
fi
echo "Rsyncing from guest: $poweroff_rsync_from_guest ($id)..."
+ mkdir -p $poweroff_rsync_from_guest_dest
kvmx_rsync_from $poweroff_rsync_from_guest_orig $poweroff_rsync_from_guest_dest
unset poweroff_rsync_from_guest_orig
diff --git a/kvmxfile b/kvmxfile
index dab6f2d..2a10e1e 100644
--- a/kvmxfile
+++ b/kvmxfile
@@ -238,6 +238,19 @@ ssh_custom="y"
#ssh_custom_pubkey="/home/myhostuser/.ssh/id_rsa.pub"
#ssh_custom_pubkey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDVFmJ2UDn2dK3nHHAkHzt8F4AfrXTFiGa+guem92S/pztMGAUDjEZBYEW3mZ8ATyo4GoPZ92tkjmra0Fgv6ETIox+SPWbzzjhzbv2CQUTWvF6PEVwJbT1PTzaIVRiDYf+yX7e3Y8HcmkAi60Cxs5Xr3HLkqdi2jYKFofCm58R+HGnRv1WSurPnf7C7KQBSW7E1S2CafW9VFHhGCzezyThjN+n3bJjgYFzPxdTlWyfW1T7Yv61/fqfuara0kpZx1l5pblpgbCTT7WKRIhwj1x0QTo/qDQ6k52tffiCVyMGJKvires9yp5qT5Y+ldssBKDa8muRF/dh7/UCyxvcm3HTDjWG24Sr4r9JWbhkqF89UePlOw5j73qw4gzT7YQ38tzz2XI5weAL1OXM6qhCbOwfPXwYbB5xM4g62WZugtcCLan6Iy8hvoiRIJ1MU2ar73wunghQQ84oNIrEVezJsuZxwxVbe45ulnM7x4Hqeu6jmOutWFkdkAHsqd1E3zTOS1RURwi0TpnD+iWwD7FOA9c8B6AWP4i9XVW6BLi1waARrS3bVnOh3djc20fVsClfEDDXFg2KiTeQaAWfjLguyUmxysSiUC2pnibd1bEDtdfPlkA2jaE2nAn6Tw7Vp5zd8P1d1trLMx3YkRq5uQSPqnfQDKoYH5FPMlNTbMINLC56ijw== user@kvmx"
+# Enable SSH connection persistence by using ControlMaster, ControlPath and
+# ControlPersist options, as documented at ssh_config(5)
+ssh_persist="y"
+
+# Sets SSH's ControlMaster as documented at ssh_config(5)
+ssh_control_master="auto"
+
+# Sets SSH's ControlPath as documented at ssh_config(5)
+ssh_control_path="$HOME/.ssh/kvmx-${VM}-%r@%h:%p"
+
+# Sets SSH's ControlPersist value as documented at ssh_config(5)
+ssh_persist_seconds="0"
+
# Bootloader (used only during bootstrapping by kvmx-create).
bootloader="grub"
diff --git a/share/provision/debian/desktop-basic b/share/provision/debian/desktop-basic
index 2eeaf5d..2c5ea6d 100755
--- a/share/provision/debian/desktop-basic
+++ b/share/provision/debian/desktop-basic
@@ -46,7 +46,10 @@ apps/metadot/metadot deps-bundle desktop-basic
# Additional packages
echo "Installing additional desktop-basic packages..."
-$APT_INSTALL xpra lightdm firejail xsel tigervnc-viewer alsa-utils pulseaudio
+$APT_INSTALL lightdm firejail xsel alsa-utils pulseaudio
+
+# For host-guest interfacing
+$APT_INSTALL xpra tigervnc-viewer
# Tor Browser launcher
# Deprecated in favor of https://git.fluxo.info/utils-tor
diff --git a/share/provision/debian/web-full b/share/provision/debian/web-full
index 040d862..cb8f3c2 100755
--- a/share/provision/debian/web-full
+++ b/share/provision/debian/web-full
@@ -30,7 +30,7 @@ APT_INSTALL="sudo LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -y"
$DIRNAME/web-basic $HOSTNAME $DOMAIN $MIRROR
# Office Suite
-$APT_INSTALL libreoffice libreoffice-gtk3 gimp inkscape mat
+$APT_INSTALL libreoffice libreoffice-gtk3 gimp inkscape mat2
# Luakit using stowpkg
#if [ ! -x "$HOME/apps/stowpkg/tree/`uname -m`/bin/luakit" ]; then