#!/bin/bash #set -x #SET DISPLAYRES to force Xres, ENV takes precendent over cmdline LOGFILE=/tmp/xconfig.log 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" . /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" 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" fi else echo "Video card type forced to $VGACARDTYPE" VGAFORCED=1 CARDID="NOT_DETECTED" fi VGACARDTYPE=${VGACARDTYPE,,} #make lowercase } function presetupX { if [ "$XIgnoreConfig" = 1 ] then echo "Using User Supplied X" if [ -f "$MYTHHOME/templates/xorg.user" ] then cp -f "$MYTHHOME/templates/xorg.user" "$XORG_CONF" else echo "Didn't find the file" echo "Copy your config file to $MYTHHOME/templates/xorg.user" > "$XORG_CONF" fi else setupX fi } function nvidia_prepare { for i in libva-intel-driver mesa-libgl nvidia nvidia-utils nvidia-libgl opencl-nvidia 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" pacman --noconfirm -Sw $1 >> $LOGFILE 2>&1 rc=$? if [ $rc != 0 ] then echo " Couldn't find $1 for install, aborting" echo " Couldn't find $1 for install, aborting" >> $LOGFILE 2>&1 exit 1 fi } function nvidia_driver_install { cp "$TEMPLATES/xorg/xorg.nvidia" $BASE/etc/X11/xorg.conf.d/20-automv.conf INSTALLED=0 grep -qi "$CARDID" "$NVIDIA_SUPPORTED" if [[ $? = 0 || $VGAFORCED -eq 1 && $VGACARDTYPE == "nvidia" ]] then LIST="nvidia nvidia-libgl nvidia-utils opencl-nvidia" for i in `echo ${LIST}` do pkg_check $i done echo "Installing current nvidia driver" echo "Installing current nvidia driver" >> $LOGFILE 2>&1 nvidia_prepare pacman --noconfirm -S ${LIST} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install current nvidia driver" echo "ERROR: Unable to install current nvidia driver" >> $LOGFILE 2>&1 else INSTALLED=1 fi fi if [ $INSTALLED -eq 0 ] then grep -qi "$CARDID" "$NVIDIA_340xx" if [[ $? = 0 || $VGAFORCED -eq 1 && $VGACARDTYPE == "nvidia-340xx" ]] then LIST="nvidia-340xx nvidia-340xx-libgl nvidia-340xx-utils opencl-nvidia-340xx" for i in `echo ${LIST}` do pkg_check $i done echo "Installing nvidia-340xx driver" echo "Installing nvidia-340xx driver" >> $LOGFILE 2>&1 nvidia_prepare pacman --noconfirm -S ${LIST} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install nvidia-340xx driver" echo "ERROR: Unable to install nvidia-340xx driver" >> $LOGFILE 2>&1 else INSTALLED=1 fi fi fi if [ $INSTALLED -eq 0 ] then grep -qi "$CARDID" "$NVIDIA_304xx" if [[ $? = 0 || $VGAFORCED -eq 1 && $VGACARDTYPE == "nvidia-304xx" ]] then LIST="nvidia-304xx nvidia-304xx-libgl nvidia-304xx-utils opencl-nvidia-304xx" for i in `echo ${LIST}` do pkg_check $i done echo "Installing nvidia-304xx driver" echo "Installing nvidia-304xx driver" >> $LOGFILE 2>&1 nvidia_prepare pacman --noconfirm -S ${LIST} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install nvidia-304xx driver" echo "ERROR: Unable to install nvidia-304xx driver" >> $LOGFILE 2>&1 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" echo " Couldn't find the card id in any list" >> $LOGFILE 2>&1 LIST="nvidia nvidia-libgl nvidia-utils opencl-nvidia" for i in `echo ${LIST}` do pkg_check $i done echo "Installing current nvidia driver" echo "Installing current nvidia driver" >> $LOGFILE 2>&1 nvidia_prepare pacman --noconfirm -S ${LIST} >> $LOGFILE 2>&1 if [[ $? != 0 ]] then echo "ERROR: Unable to install current nvidia driver" echo "ERROR: Unable to install current nvidia driver" >> $LOGFILE 2>&1 else INSTALLED=1 fi fi echo "/usr/lib/libXvMCNVIDIA_dynamic.so.1" > "$XVMC_CONFIG" } function vmware_driver_install { LIST="xf86-input-vmmouse xf86-video-vmware xf86-video-vesa svga-dri mesa-libgl" for i in `echo ${LIST}` do pkg_check $i done echo "Installing VMware driver" echo "Installing VMware driver" >> $LOGFILE 2>&1 #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 mesa-libgl echo "Installing Vesa driver" echo "Installing Vesa driver" >> $LOGFILE 2>&1 #this is used to remove nvidia nvidia_prepare pacman -S --noconfirm xf86-video-vesa mesa-libgl >> $LOGFILE 2>&1 } function intel_driver_install { pkg_check xf86-video-intel pkg_check mesa-libgl echo "Installing Intel driver" echo "Installing Intel driver" >> $LOGFILE 2>&1 #this is used to remove nvidia nvidia_prepare pacman -S --noconfirm xf86-video-intel libva-intel-driver mesa-libgl >> $LOGFILE 2>&1 echo "/usr/lib/libIntelXvMC.so.1" > "$XVMC_CONFIG" } function set_res { echo " Setting modeline to ${Xres}" echo " Setting modeline to ${Xres}" >> $LOGFILE 2>&1 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 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 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." fi vesa_driver_install cp $TEMPLATES/xorg/xorg.vesa /etc/X11/xorg.conf.d/20-automv.conf if [ ${Xres} != "Auto" ] then set_res else 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" 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." echo " Waiting for pacman to quit..." 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" exit 1 fi if [ -f /etc/sysconfig/IGNORE_X ] then echo "** Will not run xconfig.sh due to presence of /etc/sysconfig/IGNORE_X" exit 1 fi if [ -f /etc/systemconfig ] then . /etc/systemconfig else #Xres="800x600" Xres="Auto" echo " Setting modeline to ${Xres}" echo " Setting modeline to ${Xres}" >> $LOGFILE 2>&1 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 fi if [ ! x$DISPLAYRES = x ] then Xres=$DISPLAYRES fi XORG_CONF="/etc/X11/xorg.conf" XVMC_CONFIG="/etc/X11/XvMCConfig" pacman_wait presetupX