我正在从外部硬盘启动我的某个系统,其中装有 ubuntu 9.10。我对设置很满意,它运行良好,但我想修改它,以便我可以选择在启动时加载哪些显卡驱动程序。具体来说,我想在以下两者之间进行选择:
- nvidia 专有驱动程序
- ati 专有驱动程序
- 通用驱动程序
目前,如果我正在使用专有驱动程序,则不要启动到 X,删除 xorg.conf,启动 gdm 并使用 jockey 重新配置系统(用于硬件驱动程序)。
什么步骤可以使其(半)自动化并避免重新启动 X?
哪里可以找到此类脚本的示例?
答案1
- 为每个内核创建 3 个不同的 grub 条目
driver1
,并使用 、driver2
、driver3
作为选项。 - 制作 3 个不同的 xorg.conf(每个都包含三个驱动程序之一)并将它们命名为
xorg.conf1
、xorg.conf2
、xorg.conf2
。 - 编写在 X 之前执行的启动脚本,
/proc/cmdline
用于查找oder以及符号链接,或者driver1
driver2
driver3
xorg.conf1
xorg.conf2
xorg.conf2
xorg.conf
在 xrandr 出现之前,我曾做过类似的事情来在双头和非双头屏幕设置之间切换。不幸的是,脚本和文档早已不见了。
可能的改进:
- 使用 udev 规则
- 让启动脚本自动检测当前显卡
答案2
您可以随时编写一个 shell 脚本来自动执行该过程。
答案3
下面的内容可能会提供一些通过 grub 实现您想要的操作的提示:
答案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 启动之前,将其放在你的启动顺序中的某个位置。