
Я загружаю определенную мою систему с Ubuntu 9.10 с внешнего HDD. Я доволен настройкой, и она отлично работает, однако я хотел бы изменить ее так, чтобы я мог выбирать, какие драйверы графической карты загружать во время загрузки. В частности, я хотел бы выбрать между:
- фирменный драйвер nvidia
- фирменный драйвер ati
- универсальный драйвер
В настоящее время, если я использую проприетарные драйверы, то не загружайте X, удалите xorg.conf, запустите gdm и перенастройте систему с помощью jockey (для драйверов оборудования).
Какие шаги необходимо предпринять, чтобы сделать этот процесс (полу)автоматическим и избежать перезапуска X?
Где можно найти примеры таких сценариев?
решение1
- Создайте 3 разные записи grub для каждого ядра с параметрами
driver1
,driver2
, .driver3
- Создайте 3 разных файла xorg.conf (каждый с одним из трех драйверов) и назовите их
xorg.conf1
,xorg.conf2
,xorg.conf2
. - Напишите initscript, который выполняется перед X, который выполняет поиск
/proc/cmdline
поdriver1
,driver2
oderdriver3
и затем создает символические ссылкиxorg.conf1
,xorg.conf2
илиxorg.conf2
наxorg.conf
Я делал что-то похожее для переключения между двухголовым и не-двухголовым screensetup во времена до xrandr. К сожалению, скрипты и документация давно утеряны.
Возможные улучшения:
- использовать udev-правила
- позвольте initscript автоматически определить текущую видеокарту
решение2
Вы всегда можете создать скрипт, который автоматизирует этот процесс.
решение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. На основе этого можно написать небольшой скрипт оболочки, который выбирает правильный файл конфигурации:
#!/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.