如何在窗口管理器启动之前以管理员身份运行 virsh 命令?

如何在窗口管理器启动之前以管理员身份运行 virsh 命令?

我需要在窗口管理器启动之前运行以下命令

sudo virsh nodedev-detach pci_0000_05_00_0

它必须以管理员身份运行,并且必须在窗口管理器加载之前运行。

我目前正在使用以下脚本在 Kubuntu 20.04 操作系统的终端视图中实现我的目标:

#!/bin/sh
systemctl stop sddm.service
virsh nodedev-detach pci_0000_05_00_0
systemctl start sddm.service

这样,vfio-pci 驱动程序就可以取代 nvidia,成为我的 kvm vfio 设置中的第二个 GPU,因为我尝试过的其他方法都没有奏效。切换到终端并运行这三个命令很不方便,而且在重新加载后,经常会导致我的窗口管理器出现问题。

如何在桌面环境加载之前以管理权限运行脚本?

答案1

我解决了我的问题。

为了在窗口管理器启动之前强制 VFIO 驱动程序与 nvidia 解除绑定,您必须编辑 Xsetup 脚本(对我来说,它位于 /usr/share/sddm/scripts/Xsetup)并将以下内容添加到文件末尾:

virsh nodedev-detach pci_0000_05_00_0

它运行得非常完美。然而,在启动时,程序没有将 vfio-pci 绑定到设备,因此必须手动进行绑定。

但是,我发现解决我的问题的一个更简单的方法是下载 driverctl 并运行

sudo driverctl set-override 0000:05:00.0 vfio-pci

这最终迫使内核将我的第二个 GPU 绑定到 vfio-pci 驱动程序,而不是我的 nvidia 驱动程序。该命令必须在终端模式下运行(CTRL + AlT + 2),并且必须停止窗口管理器(对于 KUBUNTU sudo systemctl stop sddm.service)。不用费心重新打开它,只需重新启动即可。这可防止 nvidia 绑定到设备,并迫使 vfio-pci 绑定。

相关内容