gpu_pass.sh (4003B)
1 #!/bin/sh 2 set -e 3 WRKDIR=$PWD 4 5 if [ "$(id -u)" -ne 0 ] 6 then printf "The script has to be run as root.\n" 7 exit 8 fi 9 10 if [ -x "$(command -v doas)" ]; then 11 PERMUSER=$DOAS_USER 12 evalcommand="doas -u $PERMUSER" 13 else 14 PERMUSER=$SUDO_USER 15 evalcommand="sudo -u $PERMUSER" 16 fi 17 18 run_as_user() { 19 $evalcommand "$@" 20 } 21 22 run_as_user mkdir -p /home/"$PERMUSER"/.local/share/vgabios 23 run_as_user cp "$WRKDIR"/Hooks/patch.rom /home/"$PERMUSER"/.local/share/vgabios 24 25 pacman -Sy --noconfirm 26 pacman -S qemu-desktop libvirt edk2-ovmf virt-manager dnsmasq wget --noconfirm 27 28 29 mkdir /etc/libvirt/hooks 30 31 # Online version 32 #wget 'https://raw.githubusercontent.com/PassthroughPOST/VFIO-Tools/master/libvirt_hooks/qemu' \ 33 # -O /etc/libvirt/hooks/qemu 34 35 cp "$WRKDIR"/Hooks/qemu /etc/libvirt/hooks/ 36 37 chmod +x /etc/libvirt/hooks/qemu 38 39 mkdir -p /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin 40 mkdir -p /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end 41 42 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/start.sh 43 #!/bin/bash 44 set -x 45 46 source "/etc/libvirt/hooks/kvm.conf" 47 48 #systemctl stop sddm.service 49 killall Hyprland 50 51 echo 0 > /sys/class/vtconsole/vtcon0/bind 52 echo 0 > /sys/class/vtconsole/vtcon1/bind 53 echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind 54 sleep 10 55 modprobe -r nvidia_drm 56 modprobe -r nvidia_modeset 57 modprobe -r drm_kms_helper 58 modprobe -r nvidia 59 modprobe -r i2c_nvidia_gpu 60 modprobe -r drm 61 modprobe -r nvidia_uvm 62 63 virsh nodedev-detach $VIRSH_GPU_VIDEO 64 virsh nodedev-detach $VIRSH_GPU_AUDIO 65 66 modprobe vfio 67 modprobe vfio_pci 68 modprobe vfio_iommu_type1 69 70 #./usr/share/UnbindUSB/vfio-usb.sh 0000:00:14.0 71 EOL 72 73 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/revert.sh 74 #!/bin/bash 75 set -x 76 source "/etc/libvirt/hooks/kvm.conf" 77 78 modprobe -r vfio_pci 79 modprobe -r vfio_iommu_type1 80 modprobe -r vfio 81 82 virsh nodedev-reattach $VIRSH_GPU_VIDEO 83 virsh nodedev-reattach $VIRSH_GPU_AUDIO 84 85 echo 1 > /sys/class/vtconsole/vtcon0/bind 86 echo 0 > /sys/class/vtconsole/vtcon1/bind 87 88 nvidia-xconfig --query-gpu-info > /dev/null 2>&1 89 90 echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind 91 92 modprobe nvidia_drm 93 modprobe nvidia_modeset 94 modprobe drm_kms_helper 95 modprobe nvidia 96 modprobe drm 97 modprobe nvidia_uvm 98 99 #systemctl start sddm.service 100 101 #echo 0000:00:14.0 > /sys/bus/pci/drivers/vfio-pci/unbind 102 #echo 0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/bind 103 EOL 104 105 chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/start.sh 106 chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/revert.sh 107 108 case "$(readlink -f /sbin/init)" in 109 *systemd*) 110 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/cpuisolation.sh 111 #!/bin/sh 112 systemctl set-property --runtime -- user.slice AllowedCPUs=0,6 113 systemctl set-property --runtime -- system.slice AllowedCPUs=0,6 114 systemctl set-property --runtime -- init.scope AllowedCPUs=0,6 115 EOL 116 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/cpurevert.sh 117 #!/bin/sh 118 systemctl set-property --runtime -- user.slice AllowedCPUs=0-11 119 systemctl set-property --runtime -- system.slice AllowedCPUs=0-11 120 systemctl set-property --runtime -- init.scope AllowedCPUs=0-11 121 EOL 122 ;; 123 *dinit*) 124 pacman --noconfirm -S libvirt-dinit 125 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/cpuisolation.sh 126 #!/bin/sh 127 echo "+cpuset" > /sys/fs/cgroup/cgroup.subtree_control 128 echo "0,6" > /sys/fs/cgroup/1/cpuset.cpus 129 EOL 130 cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/cpurevert.sh 131 #!/bin/sh 132 echo "0-11" > /sys/fs/cgroup/1/cpuset.cpus 133 echo "+cpuset" > /sys/fs/cgroup/cgroup.subtree_control 134 EOL 135 ;; 136 esac 137 138 chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/cpuisolation.sh 139 chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/cpurevert.sh 140 141 142 cat <<EOL >> /etc/libvirt/hooks/kvm.conf 143 VIRSH_GPU_VIDEO=pci_0000_01_00_0 144 VIRSH_GPU_AUDIO=pci_0000_01_00_1 145 EOL 146 147 # usermod -aG libvirt,kvm,input,audio,video "$PERMUSER" 148 usermod -aG libvirt,input "$PERMUSER"