从外部媒体启动时使用不同的显卡驱动程序

从外部媒体启动时使用不同的显卡驱动程序

我正在从外部硬盘启动我的某个系统,其中装有 ubuntu 9.10。我对设置很满意,它运行良好,但我想修改它,以便我可以选择在启动时加载哪些显卡驱动程序。具体来说,我想在以下两者之间进行选择:

  • nvidia 专有驱动程序
  • ati 专有驱动程序
  • 通用驱动程序

目前,如果我正在使用专有驱动程序,则不要启动到 X,删除 xorg.conf,启动 gdm 并使用 jockey 重新配置系统(用于硬件驱动程序)。

什么步骤可以使其(半)自动化并避免重新启动 X?

哪里可以找到此类脚本的示例?

答案1

  1. 为每个内核创建 3 个不同的 grub 条目driver1,并使用 、 driver2driver3作为选项。
  2. 制作 3 个不同的 xorg.conf(每个都包含三个驱动程序之一)并将它们命名为xorg.conf1xorg.conf2xorg.conf2
  3. 编写在 X 之前执行的启动脚本,/proc/cmdline用于查找oder以及符号链接,或者driver1driver2driver3xorg.conf1xorg.conf2xorg.conf2xorg.conf

在 xrandr 出现之前,我曾做过类似的事情来在双头和非双头屏幕设置之间切换。不幸的是,脚本和文档早已不见了。

可能的改进:

  • 使用 udev 规则
  • 让启动脚本自动检测当前显卡

答案2

您可以随时编写一个 shell 脚本来自动执行该过程。

答案3

下面的内容可能会提供一些通过 grub 实现您想要的操作的提示:

http://en.gentoo-wiki.com/wiki/Framebuffer

答案4

根据您想要的内容创建不同版本的 xorg.conf。例如:

/etc/X11/xorg.conf.nvidia
/etc/X11/xorg.conf.ati
/etc/X11/xorg.conf.generic

然后在 /boot/grub/grub.cfg 中配置多个启动配置,并在指定内核的每一行中放置不同的内核参数(例如 xconfig=myconfig)。类似于以下内容:

menuentry "Ubuntu, Linux 2.6.31-17 nvidia" {
  ...
  linux   /vmlinuz-2.6.31-17 root=UUID=885a6a07-fd6c-4638-aa17-d38997d477e1 xconfig=nvidia ro single
 ...
} 

menuentry "Ubuntu, Linux 2.6.31-17 ati" {
  ...
  linux   /vmlinuz-2.6.31-17 root=UUID=885a6a07-fd6c-4638-aa17-d38997d477e1 xconfig=ati ro single
 ...
}

menuentry "Ubuntu, Linux 2.6.31-17 generic" {
  ...
  linux   /vmlinuz-2.6.31-17 root=UUID=885a6a07-fd6c-4638-aa17-d38997d477e1 xconfig=generic ro single
 ...
}

无法识别的内核参数将被忽略,但仍可在 /proc/cmdline 中使用。基于此,您可以编写一个小型 shell 脚本来选择正确的配置文件:

#!/bin/bash
rm -f /etc/X11/xorg.conf
config=`cat /proc/cmdline |sed -e 's/.*xconfig=\([a-z]*\).*/\1/g'
ln -s /etc/X11/xonfig.conf.$config /etc/X11/xconfig.conf

然后在 gdm 启动之前,将其放在你的启动顺序中的某个位置。

相关内容