Как удержать в системе на SysVinit 173-й видеодрайвер nVidia
как дефолтный без постоянного рукоприкладства
Чтобы каждый раз не париться с запуском n173def после dist-upgrade, в довесок к n173def лежащему в '/usr/local/bin/', можно сваять в sysvinit такое на коленках для сугубо личного пользования.
Примечание по термину'
для сугубо личного пользования'
Для сугубо личного потому, что это не из пакета официального репозитория, - это хак сваяный на коленках для по-быстрому, здесь и сейчас. Но если что, это GPL, - хочется переделать и опакетить, берите и делайте.
Название, где лежит и права на файл:
# ls -l /etc/rc.d/init.d/nvidia-drv-select
-rwxr-xr-x 1 root root 983 ноя 7 04:20 /etc/rc.d/init.d/nvidia-drv-select
Собсно сам сервис:
# cat /etc/rc.d/init.d/nvidia-drv-select
#!/bin/bash
#
# chkconfig: 2345 43 07
# description: Select nvidia_glx_173.xx.xx driver as default
# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi
DRVSEL=nvidia-drv-select
start() {
echo -n $"Start $DRVSEL service: "
/usr/local/bin/n173def
echo
}
stop() {
echo
}
restart() {
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start}"
exit 1
esac
exit 0
Здесь можно вообще не поддерживать даблстарт, в смысле старт_сервис/старт_скрипт, а вставить строку из n173def не используя и удалив n173def. Т.е. избавиться от двухуровневости и при необходимости запускать через '/etc/init.d/nvidia-drv-select start'.
Как делать лучше, так или эдак, вопрос риторический.
Озвученное в листинге позволяет пользоваться любым из двух вариантов в зависимости от удобства и настроения.
В наличии, но пока использоваться не будет:
# chkconfig --list nvidia-drv-select
сервис nvidia-drv-select поддерживает chkconfig,
но не используется ни на одном уровне выполнения
(запустите 'chkconfig --add nvidia-drv-select')
# ls -l $(find /etc/rc.d/ -name *select)
-rwxr-xr-x 1 root root 983 ноя 7 04:20 /etc/rc.d/init.d/nvidia-drv-select
Добавить сервис:
# chkconfig --add nvidia-drv-select
Проверка что/где, на каких уровнях старт/стоп:
# chkconfig --list nvidia-drv-select
nvidia-drv-select 0:выкл 1:выкл 2:вкл 3:вкл 4:вкл 5:вкл 6:выкл
# ls -l $(find /etc/rc.d/ -name *select)
lrwxrwxrwx 1 root root 27 ноя 7 04:53 /etc/rc.d/rc2.d/S43nvidia-drv-select -> ../init.d/nvidia-drv-select
lrwxrwxrwx 1 root root 27 ноя 7 04:53 /etc/rc.d/rc3.d/S43nvidia-drv-select -> ../init.d/nvidia-drv-select
lrwxrwxrwx 1 root root 27 ноя 7 04:53 /etc/rc.d/rc4.d/S43nvidia-drv-select -> ../init.d/nvidia-drv-select
lrwxrwxrwx 1 root root 27 ноя 7 04:53 /etc/rc.d/rc5.d/S43nvidia-drv-select -> ../init.d/nvidia-drv-select
# ls -lR /etc/rc.d/|grep S4|tail -n 3
lrwxrwxrwx 1 root root 17 ноя 4 14:02 S41krb5kdc -> ../init.d/krb5kdc
lrwxrwxrwx 1 root root 27 ноя 7 04:55 S43nvidia-drv-select -> ../init.d/nvidia-drv-select
lrwxrwxrwx 1 root root 12 ноя 4 14:03 S45dm -> ../init.d/dm
Включить, если симлинки Snumber* отсутствуют:
# chkconfig nvidia-drv-select on
Имеется нежелательный nvidia-319.60.xinf мешающий драйверу 173-ей версии стать дефолтным:
# ls -1 /usr/share/hwdatabase/videoaliases/
cirrus-kms.xinf
nvidia-173.14.37.xinf
nvidia-319.60.xinf
Что можно делать с сервисом (а большего здесь и не нужно: после старта процесс отработав умрёт в любом случае):
# /etc/init.d/nvidia-drv-select *
Usage: /etc/init.d/nvidia-drv-select {start}
# /etc/init.d/nvidia-drv-select start
Start nvidia-drv-select service:
Теперь при старте системы или старте X после смены runlevel подниматься будет только драйвер 173-ей версии:
# ls -1 /usr/share/hwdatabase/videoaliases/
cirrus-kms.xinf
nvidia-173.14.37.xinf
Сервис всегда будет отрабатывать при переходе на 'runlevel 5' исключая тем самым на старте Х подмену дефолтного 173-го любым другим драйвером.
Сервис отработает, покилив все не nvidia-173*.xinf оставив дефолтным драйвер nvidia_glx_173.14.37, сделает своё чёрное дело, умрёт и никому мешать не будет:
# ps -eo args|grep n173def
grep --color=auto n173def
Чем хорош нештатный и нестандартный даблстарт: сервис+скрипт n173def ?
Учитывая, что '/usr/local/bin' есть в переменной $PATH, имя исполняемого скрипта проще и быстрее в наборе, учитывая, что имени файла с таким сочетанием как '^n1' (n173def) не существует - только четыре нажатия клавиш:
n+1+Tab+Enter.
Плюс его можно запускать отдельно в любое время.
Но если после обновления свежий драйвер влетел, а скрипт не был выполнен и операционная система разгружена, ничего страшного:
сервис отработает на старте системы запустив скрипт, который и убьёт "лишние" симлинки до взлёта подсистемы X.
Т.о. количество ручных вмешательств пользователя сводится к минимуму.