#!/bin/bash #set -x #SET DISPLAYRES to force Xres, ENV takes precendent over cmdline #SET VGACARDTYPE to force card type: #VGACARDTYPE="intel" xconfig.sh #VGACARDTYPE="nvidia" xconfig.sh #VGACARDTYPE="nvidia-340xx" xconfig.sh #VGACARDTYPE="nvidia-304xx" xconfig.sh #VGACARDTYPE="VMware" xconfig.sh #VGACARDTYPE="vesa" xconfig.sh LOGFILE=/tmp/xconfig.log echo -e "\n\n--------------------------------------------------------------------------------" >> $LOGFILE 2>&1 echo -e `date`"\n" >> $LOGFILE 2>&1 for i in ati intel mga savage sis unichrome do templist=`echo $i-dri xf86-video-$i` NVPKGS=`echo $NVPKGS $templist` done BASE="" MYTH_RUN_STATUS="1" . /etc/profile NVIDIA_304xx="$TEMPLATES/xorg/304xx_supported.txt" NVIDIA_340xx="$TEMPLATES/xorg/340xx_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" for i in libva-intel-driver mesa-libgl nvidia nvidia-utils nvidia-libgl opencl-nvidia nvidia-settings libxnvctrl libglvnd nvidia-304xx nvidia-304xx-utils nvidia-304xx-libgl opencl-nvidia-304xx nvidia-340xx nvidia-340xx-utils nvidia-340xx-libgl opencl-nvidia-340xx do pacman --noconfirm -Rdd $i >> $LOGFILE 2>&1 done for i in `echo ${NVPKGS}` 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 LIST="nvidia nvidia-utils opencl-nvidia nvidia-settings libglvnd" for i in `echo ${LIST}` do pkg_check $i done echo "Installing current nvidia driver" | tee -a $LOGFILE nvidia_prepare pacman --noconfirm -S ${LIST} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install current nvidia driver" | tee -a $LOGFILE else INSTALLED=1 fi fi if [ $INSTALLED -eq 0 ] then CARDNAME=`grep -i "$CARDID" "$NVIDIA_340xx"` if [[ $? = 0 || $VGAFORCED -eq 1 && $VGACARDTYPE == "nvidia-340xx" ]] then echo "$CARDNAME" | tee -a $LOGFILE LIST="nvidia-340xx nvidia-340xx-utils opencl-nvidia-340xx libglvnd" for i in `echo ${LIST}` do pkg_check $i done echo "Installing nvidia-340xx driver" | tee -a $LOGFILE nvidia_prepare pacman --noconfirm -S ${LIST} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install nvidia-340xx driver" | tee -a $LOGFILE else INSTALLED=1 fi fi fi if [ $INSTALLED -eq 0 ] then CARDNAME=`grep -i "$CARDID" "$NVIDIA_304xx"` if [[ $? = 0 || $VGAFORCED -eq 1 && $VGACARDTYPE == "nvidia-304xx" ]] then echo "$CARDNAME" | tee -a $LOGFILE LIST="nvidia-304xx nvidia-304xx-utils opencl-nvidia-304xx libglvnd" for i in `echo ${LIST}` do pkg_check $i done echo "Installing nvidia-304xx driver" | tee -a $LOGFILE nvidia_prepare pacman --noconfirm -S ${LIST} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install nvidia-304xx driver" | tee -a $LOGFILE else 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 in any list" | tee -a $LOGFILE LIST="nvidia nvidia-utils opencl-nvidia nvidia-settings libglvnd" for i in `echo ${LIST}` do pkg_check $i done echo "Installing current nvidia driver" | tee -a $LOGFILE nvidia_prepare pacman --noconfirm -S ${LIST} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install current nvidia driver" | tee -a $LOGFILE else INSTALLED=1 fi fi echo "/usr/lib/libXvMCNVIDIA_dynamic.so.1" > "$XVMC_CONFIG" 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 { LIST="xf86-input-vmmouse xf86-video-vmware xf86-video-vesa svga-dri libglvnd" for i in `echo ${LIST}` do pkg_check $i done echo "Installing VMware driver" | tee -a $LOGFILE #this is used to remove nvidia nvidia_prepare for i in `echo ${LIST}` do pacman -S --noconfirm $i >> $LOGFILE 2>&1 done } function vesa_driver_install { pkg_check xf86-video-vesa pkg_check libglvnd echo "Installing Vesa driver" | tee -a $LOGFILE #this is used to remove nvidia nvidia_prepare pacman -S --noconfirm xf86-video-vesa libglvnd >> $LOGFILE 2>&1 } function intel_driver_install { pkg_check xf86-video-intel pkg_check libglvnd echo "Installing Intel driver" | tee -a $LOGFILE #this is used to remove nvidia nvidia_prepare pacman -S --noconfirm xf86-video-intel libva-intel-driver libglvnd >> $LOGFILE 2>&1 echo "/usr/lib/libIntelXvMC.so.1" > "$XVMC_CONFIG" } function set_res { echo "Setting resolution to ${Xres}" | tee -a $LOGFILE cat > /etc/X11/xorg.conf.d/30-screen.conf <<EOF Section "Screen" Identifier "Screen0" #Collapse Monitor and Device section to Screen section Device "Device0" Monitor "Monitor0" DefaultDepth 24 #Choose the depth (16||24) SubSection "Display" Depth 24 Modes "${Xres}" #Choose the resolution EndSubSection EndSection EOF } function setupX { Xvalues if [ x = x ] then case $VGACARDTYPE in nvidia|nvidia-340xx|nvidia-304xx) nvidia_driver_install 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 ;; vmware) vmware_driver_install cp $TEMPLATES/xorg/xorg.vmware /etc/X11/xorg.conf.d/20-automv.conf echo "copy in autostart functions" >> $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 ;; 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" XVMC_CONFIG="/etc/X11/XvMCConfig" pacman_wait presetupX