#!/bin/bash #set -x #SET DISPLAYRES to force Xres, ENV takes precendent over cmdline #SET VGACARDTYPE to force card type: #VGACARDTYPE="ati" xconfig.sh #VGACARDTYPE="intel" xconfig.sh #VGACARDTYPE="nvidia" xconfig.sh #VGACARDTYPE="nvidia-390xx" xconfig.sh #VGACARDTYPE="nvidia-340xx" xconfig.sh #VGACARDTYPE="nvidia-304xx" xconfig.sh #VGACARDTYPE="vesa" xconfig.sh #VGACARDTYPE="VMware" xconfig.sh LOGFILE=/tmp/xconfig.log echo -e "\n\n--------------------------------------------------------------------------------" >> $LOGFILE 2>&1 echo -e `date`"\n" >> $LOGFILE 2>&1 #libxnvctrl is needed as a dep of mythtv so must be installed for every driver ATI_PKGS="xf86-video-ati libva-mesa-driver libva-utils libglvnd libxnvctrl" INTEL_PKGS="xf86-video-intel libva-intel-driver libva-utils libglvnd libxnvctrl" NVIDIA_PKGS="nvidia nvidia-utils opencl-nvidia nvidia-settings libglvnd libxnvctrl" NVIDIA_390xx_PKGS="nvidia-390xx nvidia-390xx-utils opencl-nvidia-390xx nvidia-390xx-settings libglvnd libxnvctrl-390xx" NVIDIA_340xx_PKGS="nvidia-340xx nvidia-340xx-utils opencl-nvidia-340xx nvidia-340xx-settings libglvnd libxnvctrl-340xx" NVIDIA_304xx_PKGS="nvidia-304xx nvidia-304xx-utils opencl-nvidia-304xx libglvnd libxnvctrl-340xx" NVIDIA_ALL_PKGS=`echo $NVIDIA_PKGS $NVIDIA_390xx_PKGS $NVIDIA_340xx_PKGS $NVIDIA_304xx_PKGS|xargs -n1|sort -u` VESA_PKGS="xf86-video-vesa libglvnd libxnvctrl" VMWARE_PKGS="xf86-input-vmmouse xf86-video-vmware xf86-video-vesa libglvnd libxnvctrl" for i in ati intel mga savage sis unichrome vmware do templist=`echo $i-dri xf86-video-$i` OTHER_PKGS=`echo $OTHER_PKGS $templist` done BASE="" MYTH_RUN_STATUS="1" . /etc/profile NVIDIA_304xx_SUPPORTED="$TEMPLATES/xorg/304xx_supported.txt" NVIDIA_340xx_SUPPORTED="$TEMPLATES/xorg/340xx_supported.txt" NVIDIA_390xx_SUPPORTED="$TEMPLATES/xorg/390xx_supported.txt" NVIDIA_SUPPORTED="$TEMPLATES/xorg/nvidia_supported.txt" NVIDIA_DISABLE_MSI="$TEMPLATES/xorg/nvidia_disable_msi.txt" NVIDIA_MSI_MODPROBE="$BASE/etc/modprobe.d/nvidia_msi.conf" . /usr/MythVantage/bin/install_functions.sh home_check function Xvalues { #echo $VGACARDTYPE VGAFORCED=0 if [ "x$VGACARDTYPE" = "x" ] then CMDLINE=$(cat /proc/cmdline) echo "$CMDLINE" | grep -q forceXvesa if [ $? = 0 ] then echo "Forcing driver to vesa from kernel cmdline" | tee -a $LOGFILE VGACARDTYPE=vesa Xcardtype=$VGACARDTYPE else VGACARDTYPE=`lspci | grep -i vga | grep -vi non-vga| sort -r | head -n 1 | cut -d: -f3 | cut -d" " -f2` VGAPCIID=`lspci | grep -i vga |grep -vi non-vga| sort -r | head -n 1 | cut -d" " -f1` CARDID=`lspci -n | grep "$VGAPCIID" | grep 10de | cut -d" " -f3 | cut -d: -f2` VENDORID=`lspci -n | grep "$VGAPCIID" | grep 10de | cut -d" " -f3 | cut -d: -f1` echo "Detected $VGACARDTYPE as the video card type" | tee -a $LOGFILE fi else echo "Video card type forced to $VGACARDTYPE" | tee -a $LOGFILE VGAFORCED=1 CARDID="NOT_DETECTED" fi VGACARDTYPE=${VGACARDTYPE,,} #make lowercase } function presetupX { if [ "$XIgnoreConfig" = 1 ] then echo "Using User Supplied X" | tee -a $LOGFILE if [ -f "$MYTHHOME/templates/xorg.user" ] then cp -f "$MYTHHOME/templates/xorg.user" "$XORG_CONF" else echo "Didn't find the file" | tee -a $LOGFILE echo "Copy your config file to $MYTHHOME/templates/xorg.user" > "$XORG_CONF" fi else setupX fi } function nvidia_prepare { [[ -f "$NVIDIA_MSI_MODPROBE" ]] && rm -f "$NVIDIA_MSI_MODPROBE" echo "Remove all nvidia pkgs" >> $LOGFILE 2>&1 for i in ${NVIDIA_ALL_PKGS} do pacman --noconfirm -Rdd $i >> $LOGFILE 2>&1 done for i in ${OTHER_PKGS} do pacman --noconfirm -Rc $i >> $LOGFILE 2>&1 done } function pkg_check () { echo " Checking for $1 in cache or online" | tee -a $LOGFILE pacman --noconfirm -Sw $1 >> $LOGFILE 2>&1 rc=$? if [ $rc != 0 ] then echo " Couldn't find $1 for install, aborting" | tee -a $LOGFILE exit 1 fi } function nvidia_driver_install { cp "$TEMPLATES/xorg/xorg.nvidia" $BASE/etc/X11/xorg.conf.d/20-automv.conf INSTALLED=0 CARDNAME=`grep -i "$CARDID" "$NVIDIA_SUPPORTED"` if [[ $? = 0 || $VGAFORCED -eq 1 && $VGACARDTYPE == "nvidia" ]] then echo "$CARDNAME" | tee -a $LOGFILE for i in ${NVIDIA_PKGS} do pkg_check $i done echo "Installing current nvidia driver" | tee -a $LOGFILE nvidia_prepare pacman --noconfirm -S ${NVIDIA_PKGS} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install current nvidia driver" | tee -a $LOGFILE else echo " Successfully Installed" | tee -a $LOGFILE INSTALLED=1 fi fi if [ $INSTALLED -eq 0 ] then CARDNAME=`grep -i "$CARDID" "$NVIDIA_390xx_SUPPORTED"` if [[ $? = 0 || $VGAFORCED -eq 1 && $VGACARDTYPE == "nvidia-390xx" ]] then echo "$CARDNAME" | tee -a $LOGFILE for i in ${NVIDIA_390xx_PKGS} do pkg_check $i done echo "Installing nvidia-390xx driver" | tee -a $LOGFILE nvidia_prepare pacman --noconfirm -S ${NVIDIA_390xx_PKGS} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install nvidia-390xx driver" | tee -a $LOGFILE else echo " Successfully Installed" | tee -a $LOGFILE INSTALLED=1 fi fi fi if [ $INSTALLED -eq 0 ] then CARDNAME=`grep -i "$CARDID" "$NVIDIA_340xx_SUPPORTED"` if [[ $? = 0 || $VGAFORCED -eq 1 && $VGACARDTYPE == "nvidia-340xx" ]] then echo "$CARDNAME" | tee -a $LOGFILE for i in ${NVIDIA_340xx_PKGS} do pkg_check $i done echo "Installing nvidia-340xx driver" | tee -a $LOGFILE nvidia_prepare pacman --noconfirm -S ${NVIDIA_340xx_PKGS} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install nvidia-340xx driver" | tee -a $LOGFILE else echo " Successfully Installed" | tee -a $LOGFILE INSTALLED=1 fi fi fi if [ $INSTALLED -eq 0 ] then CARDNAME=`grep -i "$CARDID" "$NVIDIA_304xx_SUPPORTED"` if [[ $? = 0 || $VGAFORCED -eq 1 && $VGACARDTYPE == "nvidia-304xx" ]] then echo "$CARDNAME" | tee -a $LOGFILE for i in ${NVIDIA_304xx_PKGS} do pkg_check $i done echo "Installing nvidia-304xx driver" | tee -a $LOGFILE nvidia_prepare pacman --noconfirm -S ${NVIDIA_304xx_PKGS} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install nvidia-304xx driver" | tee -a $LOGFILE else echo " Successfully Installed" | tee -a $LOGFILE INSTALLED=1 fi fi fi if [ $INSTALLED -eq 0 ] then #this is a failsafe, can't find the right driver, then use the latest' echo "Couldn't find the card ID. Installing current nvidia driver" | tee -a $LOGFILE for i in ${NVIDIA_PKGS} do pkg_check $i done echo "Installing current nvidia driver" | tee -a $LOGFILE nvidia_prepare pacman --noconfirm -S ${NVIDIA_PKGS} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install current nvidia driver" | tee -a $LOGFILE else echo " Successfully Installed" | tee -a $LOGFILE INSTALLED=1 fi fi if [ $INSTALLED -eq 1 ] then grep -qi "$CARDID" "$NVIDIA_DISABLE_MSI" if [[ $? = 0 ]] then echo "Disabling MSI interrupts" | tee -a $LOGFILE echo "options nvidia NVreg_EnableMSI=0" > "$NVIDIA_MSI_MODPROBE" fi fi } function vmware_driver_install { for i in ${VMWARE_PKGS} do pkg_check $i done echo "Installing VMware driver" | tee -a $LOGFILE #this is used to remove nvidia nvidia_prepare pacman --noconfirm -S ${VMWARE_PKGS} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install VMware driver" | tee -a $LOGFILE else echo " Successfully Installed" | tee -a $LOGFILE fi } function vesa_driver_install { for i in ${VESA_PKGS} do pkg_check $i done echo "Installing Vesa driver" | tee -a $LOGFILE #this is used to remove nvidia nvidia_prepare pacman --noconfirm -S ${VESA_PKGS} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install vesa driver" | tee -a $LOGFILE else echo " Successfully Installed" | tee -a $LOGFILE fi } function intel_driver_install { for i in ${INTEL_PKGS} do pkg_check $i done echo "Installing Intel driver" | tee -a $LOGFILE #this is used to remove nvidia nvidia_prepare pacman --noconfirm -S ${INTEL_PKGS} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install Intel driver" | tee -a $LOGFILE else echo " Successfully Installed" | tee -a $LOGFILE fi } function ati_driver_install { for i in ${ATI_PKGS} do pkg_check $i done echo "Installing ATI driver" | tee -a $LOGFILE #this is used to remove nvidia nvidia_prepare pacman --noconfirm -S ${ATI_PKGS} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install ATI driver" | tee -a $LOGFILE else echo " Successfully Installed" | tee -a $LOGFILE fi } function set_res { echo "Setting resolution to ${Xres}" | tee -a $LOGFILE cat > /etc/X11/xorg.conf.d/30-screen.conf <> $LOGFILE 2>&1 mkdir -p /etc/X11/autostart >> $LOGFILE 2>&1 echo "#!/bin/bash" > /etc/X11/autostart/vmware.sh echo "/usr/bin/vmware-user-suid-wrapper" >> /etc/X11/autostart/vmware.sh chmod 755 /etc/X11/autostart/vmware.sh if [[ $Xres != "Auto" ]] then set_res else echo "Setting resolution to ${Xres}" | tee -a $LOGFILE rm -f /etc/X11/xorg.conf.d/30-screen.conf fi ;; intel) intel_driver_install cp $TEMPLATES/xorg/xorg.intel /etc/X11/xorg.conf.d/20-automv.conf if [[ $Xres != "Auto" ]] then set_res else echo "Setting resolution to ${Xres}" | tee -a $LOGFILE rm -f /etc/X11/xorg.conf.d/30-screen.conf fi ;; ati) ati_driver_install #cp $TEMPLATES/xorg/xorg.ati /etc/X11/xorg.conf.d/20-automv.conf if [[ $Xres != "Auto" ]] then set_res else echo "Setting resolution to ${Xres}" | tee -a $LOGFILE rm -f /etc/X11/xorg.conf.d/30-screen.conf fi ;; vesa|innotek|*) #leaving this as * and vesa for no real reason other then it's explicit to catch vesa if [[ $VGACARDTYPE != "vesa" && $VGACARDTYPE != "innotek" ]] then echo "Unknown card type, using Vesa." | tee -a $LOGFILE fi vesa_driver_install cp $TEMPLATES/xorg/xorg.vesa /etc/X11/xorg.conf.d/20-automv.conf if [[ $Xres != "Auto" ]] then set_res else echo "Setting resolution to ${Xres}" | tee -a $LOGFILE rm -f /etc/X11/xorg.conf.d/30-screen.conf fi ;; esac #configure the ramdisk for kms if [ x$RUNP != "x1" ] then echo "Running plymouth_config" | tee -a $LOGFILE plymouth_config.py >> $LOGFILE 2>&1 fi fi } function pacman_wait { if [ -f /var/lib/pacman/db.lck ] then echo "Pacman is running and must quit before xconfig.sh can continue." | tee -a $LOGFILE echo " Waiting for pacman to quit..." | tee -a $LOGFILE while [ -f /var/lib/pacman/db.lck ] do sleep 5 done fi } #--------------------------------------------------------------------------------- #MAIN LINE=`grep -i xorg /etc/mythvantage.cfg|grep -q False` rc=$? if [ $rc = 0 ] then echo "** xorg configuration disabled in /etc/mythvantage.cfg" | tee -a $LOGFILE exit 1 fi if [ -f /etc/sysconfig/IGNORE_X ] then echo "** Will not run xconfig.sh due to presence of /etc/sysconfig/IGNORE_X" | tee -a $LOGFILE exit 1 fi if [ -f /etc/systemconfig ] then . /etc/systemconfig else echo " systemconfig not found." | tee -a $LOGFILE fi CMDLINE=$(cat /proc/cmdline) echo $CMDLINE | grep -q displayres if [ $? = 0 ] then TEMPVAR=${CMDLINE#*displayres=} DSR=${TEMPVAR%% *} fi if [ ! x$DSR = x ] then Xres=$DSR echo " Setting resolution to ${Xres} from kernel cmdline" | tee -a $LOGFILE fi if [ ! x$DISPLAYRES = x ] then Xres=$DISPLAYRES echo "Resolution forced to ${Xres}" | tee -a $LOGFILE fi if [ x$Xres = x ] then Xres="Auto" echo "Resolution not set. Setting to ${Xres}" | tee -a $LOGFILE fi XORG_CONF="/etc/X11/xorg.conf" pacman_wait presetupX