Fix nvidia load

master v2.110
Dmitry Razumov 6 months ago
parent 7acc3d97ad
commit 3341211024
Signed by: asmeron
GPG Key ID: 50BC1DB583B79706

@ -1530,6 +1530,13 @@ ubconfig_exec_system(){
*) NO_FIND_EXCUTE=1 ;;
esac
;;
"[${SYSCONF}/mount]"|"[mount]")
case "${NAME_VAR}" in
AUTOMOUNT_SHARE\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/09-automount exec_mount_direct ;;
PUBLICDIR) ${ROOTFS}/usr/lib/ublinux/rc.post.d/23-publicdir ;;
*) NO_FIND_EXCUTE=1 ;;
esac
;;
"[${SYSCONF}/boot]"|"[boot]")
case "${NAME_VAR}" in
GRUB_TIMEOUT) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/20-grub exec_grub_timeout ;;
@ -1598,6 +1605,17 @@ ubconfig_exec_system(){
*) NO_FIND_EXCUTE=1 ;;
esac
;;
"[${SYSCONF}/video]"|"[video]")
case "${NAME_VAR}" in
VGADRV_AUTO) ${ROOTFS}/usr/lib/ublinux/rc.post.d/11-xorg exec_vgadrv_auto ;;
VGADRV_NOFREE) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/50-xorg ;;
XORG_MONITOR\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/11-xorg exec_xorg_monitor ;;
XORG_EXT) ${ROOTFS}/usr/lib/ublinux/rc.post.d/11-xorg exec_xorg_ext;;
XORG_DPI) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/63-xorg-dpi
${ROOTFS}/usr/lib/ublinux/rc.xorg/20-video-xorg-dpi ;;
*) NO_FIND_EXCUTE=1 ;;
esac
;;
"[${SYSCONF}/save]"|"[save]")
case "${NAME_VAR}" in
SAVE_ALL_CACHE) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/85-save-cache ;;

@ -0,0 +1,112 @@
#!/usr/bin/env bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# Extended pattern matching: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching
shopt -s extglob
ENABLED=yes
[[ ${ENABLED} == yes ]] || exit 0
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/logging; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/network; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
# https://github.com/openSUSE/cepces
# TODO:
# Не сделано
# Делаем настройку cepces и запрос сертификата машины после авторизации в домене с действительным ключом Kerberos
# Заполнение конфигурационного файла параметрами в файл: /etc/cepces/conf.d/ubconfig.conf
# При disable удаление файла /etc/cepces/conf.d/ubconfig.conf
# Проверить нужен ли запуск от root или достаточно под правами пользователя
# Выполнять после авторизации, т.к. клиент должен быть членом домена Windows с действительным ключом Kerberos
# Разобраться с созданием:
# /etc/pki/tls/private/machine.key
# /etc/pki/tls/certs/machine.crt
# Что-то похожее https://wiki.archlinux.org/title/Easy-RSA
# Скорее всего выполнять один раз добавлении CA в certmonger после ввода в домен:
# getcert add-ca -c CA-name -e '/usr/libexec/certmonger/cepces-submit --server=ca-dns-name.suse.de --keytab=/etc/krb5.keytab --principals=MY-HOST$@SUSE.DE'
# Настройки CA:
# getcert list-cas
# Выпуска и отслеживания нового сертификата:
# getcert request -c cepces -T Machine -I MachineCertificate -k /etc/pki/tls/private/machine.key -f /etc/pki/tls/certs/machine.crt
# Проверить ход выполнения:
# getcert list
## Регистрации сертификатов через CEP и CES c службами сертификатов Microsoft Active Directory
## Клиент должен быть членом домена Windows с действительным ключом Kerberos
## CERTMONGER_CEPCES=enable|disable
## CERTMONGER_CEPCES[<PARAM>]=<VALUE>
## <PARAM>
## global:server # Hostname of the issuing certification authority
## global:type
## global:auth=Anonymous|Kerberos|UsernamePassword|Certificate
## # Authentication mechanism used for connecting to the service, default=Kerberos
## global:endpoint # Default: https://%s/ADPolicyProvider_CEP_%s/service.svc/CEP
## global:cas
## global:poll_interval # Time in seconds before re-checking if the certificate has been issued
## global:openssl_seclevel # The openssl security level
## kerberos:keytab # Use the specified keytab
## kerberos:realm
## kerberos:ccache
## kerberos:principals # A list of principals to try when requesting a ticket
## kerberos:enctypes
## kerberos:delegate
## certificate:certfile
## certificate:keyfile
## CERTMONGER_CEPCES[global:server]=ca-dns-server.win.com
## CERTMONGER_CEPCES[kerberos:keytab]=/etc/krb5.keytab
## CERTMONGER_CEPCES[kerberos:principals]=MYHOST$@WIN.COM
## CERTMONGER_CEPCES=enable
exec_01_certmonger_cepces(){
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && local COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || local COMMAND="set="
[[ $(declare -p CERTMONGER_CEPCES 2>/dev/null) =~ ^"declare -A" ]] || declare -gA CERTMONGER_CEPCES
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
local CERTMONGER_CEPCES=
declare -A CERTMONGER_CEPCES=()
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#CERTMONGER_CEPCES[@]} -ne 0 ]]; then
true
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' && ${BASH_REMATCH[1]} == @("*"|"**"|"/"|"//") ]]; then
PARAM_VALUE="${PARAM#*=}"
CERTMONGER_CEPCES+="${PARAM_VALUE// /,}"
fi
true
fi
}
ubconfig_certmonger_cepces_live(){
true
}
################
##### MAIN #####
################
# Если файл подключен как ресурс с функциями, то выйти
return 0 2>/dev/null && return 0
if [[ -z $@ ]]; then
while read -r FUNCTION; do
$"${FUNCTION##* }"
done < <(declare -F | grep "declare -f exec_")
else
FUNCTION=
while [[ $# -gt 0 ]]; do
#[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; }
# Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] ||
declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"
shift
done
eval ${FUNCTION#*; }
fi
true

@ -19,40 +19,58 @@ SOURCE=${SYSCONF}/keyboard; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
[[ ${DISPLAYMANAGER} == "none" ]] && exit
[[ -n ${VGADRV_AUTO} || -n ${XORG_EXT} || -n ${XORG_MONITOR[@]} ]] && mkdir -p /etc/X11/xorg.conf.d
rm -f /etc/X11/xorg.conf.d/*-*-ubconfig.conf
#[ ! -z "$VGAID" ] && grep -q $VGAID /usr/share/ublinux/hwdata/deleteconf && rm -f /etc/X11/xorg.conf
[[ -n "${DELETE_XORG_CONF}" ]] && rm -f /etc/X11/xorg.conf
exec_vgadrv_auto(){
# Auto VGA driver loader
FILE_LIGHTDM_CONF="/etc/lightdm/lightdm.conf.d/01-vgadrv-auto-ubconfig.conf"
FILE_SRC_NVIDIA_CONF="/usr/lib/ublinux/xorg.conf.d/20-nvidia-ubconfig.conf"
FILE_TARG_NVIDIA_CONF="/etc/X11/xorg.conf.d/20-vgadrv-auto-ubconfig.conf"
FILE_SRC_NVIDIA_RULES="/usr/lib/ublinux/udev/70-nvidia-ubconfig.rules"
FILE_TARG_NVIDIA_RULES="/etc/udev/rules.d/70-vgadrv-auto-ubconfig.rules"
if [[ -n ${VGADRV_AUTO} ]]; then
[[ -d /etc/X11/xorg.conf.d ]] || install -Dm755 /etc/X11/xorg.conf.d
while read LSPCI_DEVICE; do
while read KERNEL_MODULE; do
[[ ${KERNEL_MODULE} != "nouveau" ]] && modprobe ${KERNEL_MODULE} 2>/dev/null && break
done < <(lspci -ks ${LSPCI_DEVICE%% *} | grep 'Kernel modules:' | cut -d: -f2 | tr ',' '\n' | tac)
done < <(lspci | grep -Ei 'vga|3d')
if lsmod | grep nvidia &>/dev/null; then
#[[ -f /usr/bin/nvidia-xconfig ]] && nvidia-xconfig -s --no-logo --no-composite --no-dynamic-twinview --force-generate --output-xconfig=/etc/X11/xorg.conf
[[ -e /etc/X11/xorg.conf.d/20-nvidia-ubconfig.conf ]] || ln -sf /usr/lib/ublinux/xorg.conf.d/20-nvidia-ubconfig.conf /etc/X11/xorg.conf.d/
#[[ -e /etc/udev/rules.d/70-nvidia-ubconfig.rules ]] || ln -sf /usr/lib/ublinux/udev/70-nvidia-ubconfig.rules /etc/udev/rules.d/
#[[ -f /usr/bin/nvidia-xconfig ]] && nvidia-xconfig -s --no-logo --no-composite --no-dynamic-twinview --force-generate --output-xconfig=${FILE_TARG_NVIDIA_CONF}
[[ -e ${FILE_TARG_NVIDIA_CONF} ]] || ln -sf "${FILE_SRC_NVIDIA_CONF}" "${FILE_TARG_NVIDIA_CONF}"
#[[ -e ${FILE_TARG_NVIDIA_RULES} ]] || ln -sf "${FILE_SRC_NVIDIA_RULES}" "${FILE_TARG_NVIDIA_RULES}"
/usr/bin/nvidia-modprobe -c0 -umsl
modprobe nvidia_drm
modprobe nvidia_uvm
modprobe nvidia_modeset
#modprobe drm_kms_helper
#modprobe drm
modprobe -q --show nvidia_drm && modprobe nvidia_drm
modprobe -q --show nvidia_uvm && modprobe nvidia_uvm
modprobe -q --show nvidia_modeset && modprobe nvidia_modeset
#modprobe -q --show drm_kms_helper && modprobe drm_kms_helper
#modprobe -q --show modprobe drm && modprobe drm
#echo -e nvidia_drm\\nvidia_uvm\\nnvidia_modeset > usr/lib/modules-load.d/nvidia-dkms.conf
fi
# else
#rm -f /etc/udev/rules.d/70-nvidia-ubconfig.rules
if [[ -d /etc/lightdm ]]; then
install -Dm644 /dev/stdin ${FILE_LIGHTDM_CONF} <<-EOF
[LightDM]
logind-check-graphical=false
EOF
fi
else
#rm -f "${FILE_TARG_NVIDIA_RULES}"
rm -f "${FILE_TARG_NVIDIA_CONF}"
rm -f "${FILE_LIGHTDM_CONF}"
fi
}
exec_xorg_ext(){
#[ ! -z "$VGAID" ] && grep -q $VGAID /usr/share/ublinux/hwdata/deleteconf && rm -f /etc/X11/xorg.conf
[[ -n "${DELETE_XORG_CONF}" ]] && rm -f /etc/X11/xorg.conf
rm -f /etc/X11/xorg.conf.d/110-xorg-ext-*-ubconfig.conf
## Управление дополнительными возможностями XORG
if [[ -n ${XORG_EXT} ]]; then
[[ -d /etc/X11/xorg.conf.d ]] || install -Dm755 /etc/X11/xorg.conf.d
while read I_EXT; do
XORG_FILE_EXT="/etc/X11/xorg.conf.d/110-${I_EXT}-ubconfig.conf"
XORG_FILE_EXT="/etc/X11/xorg.conf.d/110-xorg-ext-${I_EXT}-ubconfig.conf"
if grep -Eiq "^nodpms$" <<< "${I_EXT}"; then
cat > ${XORG_FILE_EXT} <<EOF
Section "Extensions"
@ -75,14 +93,18 @@ EOF
fi
done < <(tr ',' '\n' <<< "${XORG_EXT}")
fi
}
exec_xorg_monitor(){
## Parametrs:
## cvt | gtf | reduced|r | dpms | nodpms | enable | disable | ignore | primary |
## lo|LeftOf:{name} | ro|RightOf:{name} | ab|Above:{name} | be|Below:{name} |
## rotate:normal | rotate:left | rotate:right | rotate:invert
XORG_FILE_MONITOR="/etc/X11/xorg.conf.d/120-xorg-monitor-ubconfig.conf"
rm -f "${XORG_FILE_MONITOR}"
grep -q xres= /proc/cmdline && XORG_MONITOR=$(cat /proc/cmdline | awk -F xres= '{print $2}' | awk '{print $1}')
if [[ "${SETXORGRES}" != "no" ]] && [[ -n "${XORG_MONITOR[@]}" ]]; then
XORG_FILE_MONITOR="/etc/X11/xorg.conf.d/120-monitor-ubconfig.conf"
[[ -d /etc/X11/xorg.conf.d ]] || install -Dm755 /etc/X11/xorg.conf.d
for VIDEO_PORT in "${!XORG_MONITOR[@]}"; do
SOFT_MODELINE="gtf"
SOFT_MODELINE_R=
@ -143,10 +165,13 @@ EOF
done
[[ -n ${XORG_STR} ]] && echo -e "${XORG_STR}" > "${XORG_FILE_MONITOR}"
fi
}
exec_mkkbdfxorg(){
XORG_FILE_KEYBOARD="/etc/X11/xorg.conf.d/130-mkkbdfxorg-ubconfig.conf"
rm -f "${XORG_FILE_KEYBOARD}"
if [[ ${MKKBDFXORG} != "no" ]] ;then
XORG_FILE_KEYBOARD="/etc/X11/xorg.conf.d/130-keyboard-ubconfig.conf"
[[ -d /etc/X11/xorg.conf.d ]] || install -Dm755 /etc/X11/xorg.conf.d
if ! grep -sqi XkbOptions /etc/X11/xorg.conf; then
cat > ${XORG_FILE_KEYBOARD} <<EOF
Section "InputClass"
@ -160,3 +185,26 @@ EndSection
EOF
fi
fi
}
################
##### MAIN #####
################
# Если файл подключен как ресурс с функциями, то выйти
return 0 2>/dev/null && return 0
if [[ -z $@ ]]; then
while read -r FUNCTION; do
$"${FUNCTION##* }"
done < <(declare -F | grep "declare -f exec_")
else
FUNCTION=
while [[ $# -gt 0 ]]; do
#[[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; }
# Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] ||
declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"
shift
done
eval ${FUNCTION#*; }
fi
true

@ -25,9 +25,9 @@ SOURCE=${SYSCONF}/security; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
exec_access_denied_vtx11(){
## Отключить виртуальные терминалы и запретить переключение на них из X11
FILE_XORGDONTVTSWITCH_CONF="${ROOTFS}/etc/X11/xorg.conf.d/disable-vt-ubconfig.conf"
FILE_SYSTEMDLOGIND_CONF="${ROOTFS}/etc/systemd/logind.conf.d/disable-vt-ubconfig.conf"
FILE_LIGHTDM_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/disable-vt-ubconfig.conf"
FILE_XORGDONTVTSWITCH_CONF="${ROOTFS}/etc/X11/xorg.conf.d/access-denied-vtx11-ubconfig.conf"
FILE_SYSTEMDLOGIND_CONF="${ROOTFS}/etc/systemd/logind.conf.d/access-denied-vtx11-ubconfig.conf"
FILE_LIGHTDM_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/access-denied-vtx11-ubconfig.conf"
if [[ ${ACCESS_DENIED_VTX11,,} == @(y|yes|enable) ]]; then
mkdir -p ${FILE_XORGDONTVTSWITCH_CONF%/*}
cat <<-EOF | sed 's/^\s*\t*//' > "${FILE_XORGDONTVTSWITCH_CONF}"
@ -50,7 +50,7 @@ EOF
logind-check-graphical=true
EOF
fi
elif [[ ${ACCESS_DENIED_VTX11,,} == @(n|no|disable) ]]; then
else
rm -f "${FILE_SYSTEMDLOGIND_CONF}" "${FILE_XORGDONTVTSWITCH_CONF}" "${FILE_LIGHTDM_CONF}"
fi
}

@ -88,7 +88,7 @@ exec_lightdm_greeter(){
[[ ${PARAM} =~ ^[[:alnum:]_]+("="|"[".*"]=") ]] && eval "${PARAM%%=*}=\${PARAM#*=}"
fi
FILE_LIGHTDM_CONF="${ROOTFS}/etc/lightdm/lightdm.conf"
FILE_LIGHTDM_GREETER_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/99-greeter-ubconfig.conf"
FILE_LIGHTDM_GREETER_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/99-lightdm-greeter-ubconfig.conf"
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#LIGHTDM_GREETER[@]} -ne 0 ]]; then
[[ -d ${ROOTFS}/etc/lightdm/${FILE_LIGHTDM_GREETER_CONF%/*} ]] || mkdir -p ${FILE_LIGHTDM_GREETER_CONF%/*}
cat <<-EOF | sed 's/^\s*\t*//' > "${FILE_LIGHTDM_GREETER_CONF}"

@ -1225,6 +1225,32 @@ VERSION=
## Включить поддержку OpenSSL алгоритмов ГОСТ GOST2012-GOST8912-GOST8912 GOST2001-GOST89-GOST89
## OPENSSL_ENGINE=gost
## Регистрации сертификатов через CEP и CES c службами сертификатов Microsoft Active Directory
## Клиент должен быть членом домена Windows с действительным ключом Kerberos
## CERTMONGER_CEPCES=enable|disable
## CERTMONGER_CEPCES[<PARAM>]=<VALUE>
## <PARAM>
## global:server # Hostname of the issuing certification authority
## global:type
## global:auth=Anonymous|Kerberos|UsernamePassword|Certificate
## # Authentication mechanism used for connecting to the service, default=Kerberos
## global:endpoint # Default: https://%s/ADPolicyProvider_CEP_%s/service.svc/CEP
## global:cas
## global:poll_interval # Time in seconds before re-checking if the certificate has been issued
## global:openssl_seclevel # The openssl security level
## kerberos:keytab # Use the specified keytab
## kerberos:realm
## kerberos:ccache
## kerberos:principals # A list of principals to try when requesting a ticket
## kerberos:enctypes
## kerberos:delegate
## certificate:certfile
## certificate:keyfile
## CERTMONGER_CEPCES[global:server]=ca-dns-server.win.com
## CERTMONGER_CEPCES[kerberos:keytab]=/etc/krb5.keytab
## CERTMONGER_CEPCES[kerberos:principals]=MYHOST$@WIN.COM
## CERTMONGER_CEPCES=enable
## Отключить виртуальные терминалы и запретить переключение на них из X11
## ACCESS_DENIED_VTX11=yes|no*|enable|disable|y|n
## ACCESS_DENIED_VTX11=yes

Loading…
Cancel
Save