无需重启即可在 nvidia-current 和 nouveau 之间切换?

hto*_*que 26 nvidia xorg nouveau

是否可以在 Nvidia 的 BLOB 和 Nouveau 视频驱动程序之间即时切换?

我想我需要能够:

  1. [✓] 卸载 nvidia
  2. [✓] 卸载新派
  3. [✕] 卸载nouveau后恢复控制台*
  4. [✓] 交换 xorg.conf 文件
  5. [✓] 小心列入黑名单
  6. [✓] 处理 libglx.so

*) 在与#nouveau 的人聊了几句之后,使用当前的 Ubuntu 设置(内置 vesafb)似乎很难甚至不可能。我试图让它与 uvesafb 一起工作,但现在答案中的脚本可以满足我的需求。

hto*_*que 13

我现在有两个切换驱动程序的脚本,xorg.conf,负责黑名单和 libglx,所以答案是:是的,这是可能的。

黑名单适用于/etc/modprobe.d/包含blacklist nvidia或 的一个文件blacklist nouveau。我也替换/lib/nvidia-current/modprobe.conf了一个虚拟的,否则 nvidia 驱动程序总是会在/etc/modprobe.d/那个黑名单 nouveau 中创建一个链接。

切换到新潮:

 #!/bin/bash
 stop gdm

 rmmod nvidia

 sed -i "s/nouveau/nvidia/" /etc/modprobe.d/blacklist-nvidia-nouveau.conf

 update-alternatives --set gl_conf /usr/lib/mesa/ld.so.conf
 ldconfig

 modprobe nouveau

 cp /etc/X11/xorg.conf{.nouveau,}

 start gdm
Run Code Online (Sandbox Code Playgroud)

执行之后,我有 nouveau 运行和一个工作控制台(nouveaufb)。

切换到英伟达:

#!/bin/bash
stop gdm

echo 0 > /sys/class/vtconsole/vtcon1/bind
rmmod nouveau
rmmod ttm
rmmod drm_kms_helper
rmmod drm

sed -i "s/nvidia/nouveau/" /etc/modprobe.d/blacklist-nvidia-nouveau.conf

update-alternatives --set gl_conf /usr/lib/nvidia-current/ld.so.conf
ldconfig

modprobe nvidia-current

cp /etc/X11/xorg.conf{.nvidia,}

start gdm
Run Code Online (Sandbox Code Playgroud)

→ Nvidia 驱动程序正在运行,唯一的问题是:卸载 nouveau 驱动程序后,控制台无法使用。我需要一种方法来重置它或加载另一个帧缓冲区,但由于 vesafb 已编译到内核中,我不知道该怎么做。