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