Create a boot option for easy nvidia or nouveau display driver switching

Все те кто сталкиваются с проблемой выбора между модулем nvidia или nouveau знают достоинства и недостатки каждого из них. Итак если вы хотите совместить достоинства обоих модулей - вам под кат.

Сразу стоит предупредить увы одноврмеменно, на данном этапе, nvidia и nouveau неуживаются. Поэтому выход один.

Предполагается что у вас уже стоит и настроен nvidia либоnouveau.

Во первых в переменную VIDEO_CARDS файла /etc/make.conf
добавляем

VIDEO_CARDS="nvidia nouveau"

Предполагается что вы умеете пересобирать мир и настраивать ядро и систему и под nvidia и под nouveau.

Если в системе одновременно присутствуют и nvidia и nouveau и, к примеру, нам надо загрузить nvidia надо сделать минимум - заблокировать при загрузке модуль nouveau и безусловно в файле /etc/X11/xorg.conf.d/10-monitor.conf должна быть конфигурация под молуль nvidia.

В файле /boot/grub/grub.cfg должно быть два пункта меню

menuentry "Funtoo Linux - vmlinuz-2.6.<*> [nvidia]" {
(cut)
linux /vmlinuz-2.6.<*> (cut) vga=<*> nouveau.blacklist=true
(cut)
}

menuentry "Funtoo Linux - vmlinuz-2.6.<*> [nouveau]" {
(cut)
linux /vmlinuz-2.6.<*> nvidia.blacklist=true
(cut)
}

Приведены только основные моменты и надеюсь понятно что вместо нужно
подставить свое по вкусу.

Первая часть проблемы решена. Далее нужно подсовывать правильный конфиг
в /etc/X11/xorg.conf.d/10-monitor.conf в зависимости от того какой
модуль выключен.

В /etc/X11/video/10-monitor.conf.nouveau и
/etc/X11/video/10-monitor.conf.nvidia помещаем настроенные конфиги
под соответствующий модуль. Ну и завершающий аккорд

cat /etc/init.d/xcfgmaker
#!/sbin/runscript

# by
http://wiki.sabayon.org/index.php?title=HOWTO:_Create_a_boot_option_for_easy_dual_to_single_display_switching
# To be placed in /etc/init.d/
# Run Command: rc-update add xcfgmaker boot

depend()
{
need localmount
before xdm-setup
before xdm
before alsasound
}

start()
{

cmdline_display_mode_exist=$(cat /proc/cmdline | grep -e "nouveau.blacklist=" -e "nvidia.blacklist=")
display_mode_nvidia_exist=$(ls /etc/X11/video/ | grep "10-monitor.conf.nvidia")
display_mode_nouveau_exist=$(ls /etc/X11/video/ | grep "10-monitor.conf.nouveau")
cmdline_display_mode=$(cat /proc/cmdline | awk -Fnvidia.blacklist='{print $2}' | awk '{print $1}')
if [ -n "$cmdline_display_mode_exist" ]; then
if [ -n "$display_mode_nvidia_exist" ] && [ -n "$display_mode_nouveau_exist" ]; then #Choose the xorg file to be copied over
if [ "$cmdline_display_mode" == "true" ]; then
ebegin "Configuring X display with nouveau"
cp /etc/X11/video/10-monitor.conf.nouveau
/etc/X11/xorg.conf.d/10-monitor.conf
eselect opengl set xorg-x11 >/dev/null 2>&1;
else
ebegin "Configuring X display with nvidia"
cp /etc/X11/video/10-monitor.conf.nvidia
/etc/X11/xorg.conf.d/10-monitor.conf
eselect opengl set nvidia >/dev/null 2>&1;
fi
sleep 5
eend 0
else
ebegin "Xorg file missing. Exitting"
eend 0
fi
fi

}

Спасибо за внимание.
``

Comments