页次: 1
我的nvidia显卡是通过扩展坞连接至电脑的,所以我想能否在线卸载nvidia驱动模块,以达到热拔插n卡的效果。
我在arch wiki上看到相关介绍:https://wiki.archlinux.org/title/Extern … vidia_eGPU。然而,尽管我已经设置了__EGL_VENDOR_LIBRARY_FILENAMES环境变量,并且nvidia-smi也显示no process running,当我执行 rmmod nvidia_drm 时仍然提示module in use,并且我可以在nvidia-smi里面看到有1MiB的显存占用。我可以用 rmmod -f nvidia_drm 强制卸载,但是这有时候会导致gnome崩溃。即使有时候当时看上去很完美,事后关机的时候也会发现无法关机,关机时或者提示systemd-shutdown: waiting for process xxxx gnome-shell,或者就是显示很多杂乱的、互相重叠的代码,似乎显示没有正常工作。
我也根据https://www.reddit.com/r/Fedora/comment … ntel_igpu/尝试了设置nvidia_drm.modeset=0,无效。
我想问一下有没有办法可以比较完美地在线卸载nvidia驱动模块?
我的桌面环境是Gnome,显卡扩展坞通过雷电接口连接至电脑,电脑是intel核显。
离线
我尝试了一下在卸载内核模块前使用
# systemctl stop gdm
然后nvidia_drm内核模块就可以正常卸载了。看来是gdm占用了该内核模块。
不过在停止gdm之后,tty1会变成一个光标不停闪烁的界面,不能正常进入字符控制台,这是为什么呢?
离线
alt+f2 试试。
在线
alt+f2 试试。
切换到tty2是一种可行方案。
我现在采用的方案如下,首先在gnome里面注销,然后ctrl+alt+f2切换到tty2,然后source以下脚本(用source的原因是为了让logout语句生效,logout是为了避免之后关机的时候提示有其它用户未登出):
#!/usr/bin/zsh
sudo systemctl stop gdm
sudo rmmod nvidia_uvm
while true; do
sudo rmmod nvidia_drm
if [ $? -eq 0 ]; then
break
fi
sleep 1
done
sudo rmmod nvidia_modeset
sudo rmmod nvidia
sudo systemctl start gdm
logout
之后gdm会在tty1启动,此时就可以移除外接显卡了。gnome现在支持自动热加载外接显卡,所以如果想要接回外接显卡,可以随时连接。可惜移除看起来还是需要经过一次注销,不过比起重启还是要快不少的。
离线
页次: 1