#!/bin/bash type emergency_shell >/dev/null 2>&1 || . /lib/dracut-lib.sh detect_nvidia_cards() { # hard check on nvidia graphic cards local cards="$( lspci -n | grep -o ' 03..: 10de:....' | awk '{print $2}' )" if ! [ -d "/drm.cfg.d" ] && [ -n "$cards" ]; then warn "Failed to find '/drm.cfg.d', but have nvidia cards - will try nouveau." return 1 fi for card in $cards; do local driver="$(awk '$1 = /'"$card"'/ {print $2; exit}' /drm.cfg.d/*)" [ -z "$driver" ] && continue driver="${driver#'@'}" driver="${driver//-/\/}" local driver_dir="/lib/modules/${driver}" [ -d "$driver_dir" ] || continue local driver_target="/lib/modules/$(uname -r)/kernel/drivers/gpu/drm/nvidia" if [ -d "$driver_target" ]; then warn "'$driver_target' exists, will not overwrite!" return 1 fi # all good, move it over if ! mv "$driver_dir" "$driver_target" 2>&1; then warn "Failed to move '$driver_dir' to '$driver_target'." return 1 fi # finally run depmod to make it visible to udev if ! depmod -a 2>&1 ; then warn "Failed to run depmod, udev won't see the nvidia modules." return 1 fi # blacklist nouveau echo 'blacklist nouveau' > "/lib/modprobe.d/disable-nouveau.conf" info "Initialized nvidia drivers." return 0 done } detect_nvidia_cards :