From 51abb471b9ecc6e41e44ac1f5d63cd988cd5cf1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Tue, 6 Jun 2017 20:48:12 +0200 Subject: [PATCH] Instruct qubesd to suspend VMs before going to sleep Move suspend handling into qubesd. --- pm-utils/51qubes-suspend-netvm | 37 -------------------------------- pm-utils/52qubes-pause-vms | 39 +++++++++++----------------------- pm-utils/qubes-suspend.service | 2 -- rpm_spec/core-dom0-linux.spec | 2 -- 4 files changed, 12 insertions(+), 68 deletions(-) delete mode 100755 pm-utils/51qubes-suspend-netvm diff --git a/pm-utils/51qubes-suspend-netvm b/pm-utils/51qubes-suspend-netvm deleted file mode 100755 index c9e3c2d..0000000 --- a/pm-utils/51qubes-suspend-netvm +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh - -get_running_netvms() { - # Actually get running VMs with PCI devices attached - RUNNING_VMS=`xl list | tail -n +3 | cut -f 1 -d " "` - RUNNING_NETVMS="" - for VM in $RUNNING_VMS; do - if [ -n "`xl pci-list $VM|tail -n +2`" ]; then - echo "$VM" - fi - done -} - -suspend_net() -{ - for VM in `get_running_netvms`; do - qvm-run -u root --pass-io $VM 'QUBESRPC qubes.SuspendPre dom0' - done - # Ignore exit status from netvm... - return 0 -} - -resume_net() -{ - for VM in `get_running_netvms`; do - qvm-run -u root --pass-io $VM 'QUBESRPC qubes.SuspendPost dom0' - done - # Ignore exit status from netvm... - return 0 -} - - -case "$1" in - resume) resume_net ;; - suspend) suspend_net ;; - *) exit 0 ;; -esac diff --git a/pm-utils/52qubes-pause-vms b/pm-utils/52qubes-pause-vms index 7877d4e..ce747fc 100755 --- a/pm-utils/52qubes-pause-vms +++ b/pm-utils/52qubes-pause-vms @@ -1,27 +1,12 @@ -#!/usr/bin/python - -from qubes.qubes import QubesVmCollection,QubesException -import sys - -qc = QubesVmCollection() -qc.lock_db_for_reading() -qc.load() -qc.unlock_db() - -if sys.argv[1] in ["suspend", "hibernate"]: - for vm in qc.values(): - if vm.is_running(): - try: - vm.run_service("qubes.SuspendPreAll", user="root") - vm.suspend() - except Exception as e: - print >>sys.stderr, "Failed to suspend VM %s: %s" % (vm.name, e.message) - -elif sys.argv[1] in ["resume", "thaw"]: - for vm in qc.values(): - if vm.get_power_state() in ["Paused", "Suspended"]: - try: - vm.resume() - vm.run_service("qubes.SuspendPostAll", user="root") - except Exception as e: - print >>sys.stderr, "Failed to resume VM %s: %s" % (vm.name, e.message) +#!/bin/sh + +case "$1" in + suspend|hibernate) + qubesd-query -e --fail -c /var/run/qubesd.internal.sock \ + dom0 internal.SuspendPre dom0 + ;; + resume|thaw) + qubesd-query -e --fail -c /var/run/qubesd.internal.sock \ + dom0 internal.SuspendPost dom0 + ;; +esac diff --git a/pm-utils/qubes-suspend.service b/pm-utils/qubes-suspend.service index 763b9aa..f335843 100644 --- a/pm-utils/qubes-suspend.service +++ b/pm-utils/qubes-suspend.service @@ -8,10 +8,8 @@ Type=oneshot RemainAfterExit=yes StandardOutput=syslog ExecStartPre=/usr/lib64/pm-utils/sleep.d/01qubes-sync-vms-clock suspend suspend -ExecStartPre=/usr/lib64/pm-utils/sleep.d/51qubes-suspend-netvm suspend suspend ExecStart=/usr/lib64/pm-utils/sleep.d/52qubes-pause-vms suspend suspend ExecStop=/usr/lib64/pm-utils/sleep.d/52qubes-pause-vms resume suspend -ExecStopPost=/usr/lib64/pm-utils/sleep.d/51qubes-suspend-netvm resume suspend ExecStopPost=/usr/lib64/pm-utils/sleep.d/01qubes-sync-vms-clock resume suspend [Install] diff --git a/rpm_spec/core-dom0-linux.spec b/rpm_spec/core-dom0-linux.spec index 53c8d1e..ed2afe4 100644 --- a/rpm_spec/core-dom0-linux.spec +++ b/rpm_spec/core-dom0-linux.spec @@ -113,7 +113,6 @@ cp qrexec/qubes-rpc-multiplexer $RPM_BUILD_ROOT/usr/lib/qubes ### pm-utils mkdir -p $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d cp pm-utils/01qubes-sync-vms-clock $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/ -cp pm-utils/51qubes-suspend-netvm $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/ cp pm-utils/52qubes-pause-vms $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/ mkdir -p $RPM_BUILD_ROOT/usr/lib/systemd/system cp pm-utils/qubes-suspend.service $RPM_BUILD_ROOT/usr/lib/systemd/system/ @@ -212,7 +211,6 @@ chmod -x /etc/grub.d/10_linux /usr/lib/qubes/qfile-dom0-agent # pm-utils /usr/lib64/pm-utils/sleep.d/01qubes-sync-vms-clock -/usr/lib64/pm-utils/sleep.d/51qubes-suspend-netvm /usr/lib64/pm-utils/sleep.d/52qubes-pause-vms /usr/lib/systemd/system/qubes-suspend.service # Others