61 lines
1.3 KiB
Bash
Executable file
61 lines
1.3 KiB
Bash
Executable file
#!/run/current-system/sw/bin/bash
|
|
|
|
echo "qemu-hook: ${1} ${2}" >> /tmp/qemu-hook.log
|
|
|
|
set -x
|
|
|
|
readonly GUEST_NAME="$1"
|
|
readonly HOOK_NAME="$2"
|
|
readonly STATE_NAME="$3"
|
|
|
|
function start_hook() {
|
|
# Stops GUI
|
|
systemctl isolate multi-user.target
|
|
|
|
# Avoids race condition
|
|
sleep 2
|
|
|
|
# Unloads the NVIDIA drivers
|
|
modprobe -r nvidia_drm
|
|
modprobe -r nvidia_uvm
|
|
modprobe -r nvidia_modeset
|
|
modprobe -r nvidia
|
|
|
|
# Other code you might want to run
|
|
}
|
|
|
|
function revert_hook() {
|
|
virsh nodedev-reattach pci_0000_0a_00_0
|
|
virsh nodedev-reattach pci_0000_0a_00_1
|
|
virsh nodedev-reattach pci_0000_06_00_1
|
|
virsh nodedev-reattach pci_0000_06_00_3
|
|
virsh nodedev-reattach pci_0000_0c_00_3
|
|
|
|
modprobe -r vfio-pci
|
|
|
|
# Loads the NVIDIA drivers
|
|
modprobe nvidia_modeset
|
|
modprobe nvidia_uvm
|
|
modprobe nvidia_drm
|
|
modprobe nvidia
|
|
|
|
modprobe -r xhci_pci
|
|
modprobe xhci_pci
|
|
|
|
# Starts the UI again
|
|
systemctl restart display-manager
|
|
systemctl isolate graphical.target
|
|
}
|
|
|
|
# I am not using the script from Passthrough-Post
|
|
# because hooks option saves it to /var/lib/libvirt/hooks/qemu.d.
|
|
# It's simpler to just rewrite it for NixOS.
|
|
if [[ "$GUEST_NAME" != "win11" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
if [[ "$HOOK_NAME" == "prepare" && "$STATE_NAME" == "begin" ]]; then
|
|
start_hook
|
|
elif [[ "$HOOK_NAME" == "release" && "$STATE_NAME" == "end" ]]; then
|
|
revert_hook
|
|
fi
|