Systemd no sleep

This commit is contained in:
Ansh Srivastava 2020-10-13 02:07:46 +00:00 committed by Risingprism
parent c3d42f3a01
commit 432715a83c
8 changed files with 54 additions and 29 deletions

View File

@ -2,9 +2,12 @@
Scripts for passing a single GPU from a Linux host to a Windows VM and back.
1. Change PCI ids in the vfio-startup and teardown script.
2. Change the VM name in qemu if not already win10
3. Run the install.sh script as root
1. Change the VM name in qemu if not already win10
2. Run the install_hooks.sh script as root
Note the PCI ids and display manager should be detected automatically. If you are using an unsupported display manager that is not listed in the hooks/vfio-startup.sh script, feel free to contact us on the Discord server and we shall add your display manager.
If using startx, add a line `killall -u user_name` to qemu/vfio-startup.sh script towards the beginning and you can add a line to vfio-teardown.sh to start your window manager/ desktop environment again. Don't just add startx because it will be run as root. Instead add `su -s /bin/bash -c "/usr/bin/startx" -g username username` replacing username with your username to the end of the vfio-teardown.sh script.
For suggestions or support, join us on Discord at: https://discord.gg/bh4maVc

20
hooks/qemu Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
OBJECT="$1"
OPERATION="$2"
if [[ $OBJECT == "win10" ]]; then
case "$OPERATION" in
"prepare")
systemctl start libvirt-nosleep@"$OBJECT" 2>&1 | tee -a /var/log/libvirt/custom_hooks.log
/bin/vfio-startup.sh 2>&1 | tee -a /var/log/libvirt/custom_hooks.log
;;
"release")
systemctl stop libvirt-nosleep@"$OBJECT" 2>&1 | tee -a /var/log/libvirt/custom_hooks.log
/bin/vfio-teardown.sh 2>&1 | tee -a /var/log/libvirt/custom_hooks.log
;;
esac
fi

View File

@ -1,13 +0,0 @@
#!/bin/sh
mv /etc/libvirt/hooks/qemu /etc/libvirt/hooks/qemu_last_backup
mv /bin/vfio-startup.sh /bin/vfio-startup.sh.bkp
mv /bin/vfio-teardown.sh /bin/vfio-teardown.sh.bkp
cp vfio-startup.sh /bin/vfio-startup.sh
cp vfio-teardown.sh /bin/vfio-teardown.sh
cp qemu /etc/libvirt/hooks/qemu
chmod +x /bin/vfio-startup.sh
chmod +x /bin/vfio-teardown.sh
chmod +x /etc/libvirt/hooks/qemu

22
install_hooks.sh Executable file
View File

@ -0,0 +1,22 @@
#!/bin/bash
if test -e /etc/libvirt/hooks/qemu then
mv /etc/libvirt/hooks/qemu /etc/libvirt/hooks/qemu_last_backup
fi
if test -e /bin/vfio-startup.sh then
mv /bin/vfio-startup.sh /bin/vfio-startup.sh.bkp
fi
if test -e /bin/vfio-teardown.sh then
mv /bin/vfio-teardown.sh /bin/vfio-teardown.sh.bkp
fi
if test -e /etc/systemd/system/libvirt-nosleep@.service then
rm /etc/systemd/system/libvirt-nosleep@.service
fi
cp systemd-no-sleep/libvirt-nosleep@.service /etc/systemd/system/libvirt-nosleep@.service
cp hooks/vfio-startup.sh /bin/vfio-startup.sh
cp hooks/vfio-teardown.sh /bin/vfio-teardown.sh
cp hooks/qemu /etc/libvirt/hooks/qemu
chmod +x /bin/vfio-startup.sh
chmod +x /bin/vfio-teardown.sh
chmod +x /etc/libvirt/hooks/qemu

13
qemu
View File

@ -1,13 +0,0 @@
#!/bin/bash
# Script for win10
if [[ $1 == "win10" ]]; then
if [[ $2 == "prepare" ]]; then
/bin/vfio-startup.sh 2>&1 | tee -a /var/log/libvirt/custom_hooks.log
fi
if [[ $2 == "release" ]]; then
/bin/vfio-teardown.sh 2>&1 | tee -a /var/log/libvirt/custom_hooks.log
fi
fi

View File

@ -0,0 +1,6 @@
[Unit]
Description=Preventing sleep while libvirt domain "%i" is running
[Service]
Type=simple
ExecStart=/usr/bin/systemd-inhibit --what=sleep --why="Libvirt domain \"%i\" is running" --who=%U --mode=block sleep infinity