#!/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="" . /etc/profile NVIDIA_96XX="$TEMPLATES/xorg/96xx_supported.txt" NVIDIA_173="$TEMPLATES/xorg/173_supported.txt" NVIDIA_SUPPORTED="$TEMPLATES/xorg/nvidia_supported.txt" MYTHHOME=$BASE/home/mythtv function Xvalues { 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 | sort -r | head -n 1 | cut -d: -f3 | cut -d" " -f2` VGAPCIID=`lspci | grep -i 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` fi echo "Detected $VGACARDTYPE as the video card type" #currentmode=`cat "$BASE/etc/X11/xorg.conf" | grep Modes | awk -Fs '{ print $2 }'` } function presetupX { if [ -f /etc/sysconfig/IGNORE_X ] then echo "Will not run xconfig.sh due to presence of /etc/sysconfig/IGNORE_X" return 1 else 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 #if [ "$XUseAdvanced" = 1 ] #then # setupAdvancedX #else setupX #fi fi fi } function setupAdvancedX { echo "#Doing the advanced X setup" >> $LOGFILE #Xcategory=`echo "$Xresadvanced" | cut -d_ -f1` #Xres=`echo "$Xresadvanced" | cut -d_ -f2` Xcategory=`echo "$Xresadvanced" | cut -d_ -f1` Xres=${Xres} #echo "$Xcategory" #echo $Xres if [ "$Xcategory" = "Nvidia" ] then #Xres="" if [ "$XnVidia1080p" = "1" ] then Xres="${Xres} 1920x1080_60" fi if [ "$XnVidia1080i" = "1" ] then Xres="${Xres} 1920x1080_60i" fi if [ "$XnVidia720p" = "1" ] then Xres="${Xres} 1280x720_60" fi if [ "$XnVidia480p" = "1" ] then Xres="${Xres} 720x480_60" fi #ML="\t Modes ${Xres}" # else # ML="\t Modes \"${Xres}\"" fi case $Xcardtype in NVIDIA|nVidia|nvidia) nvidia_driver_install case $Xconnection in DVI) ConnectedMonitor=DFP ;; vga) ConnectedMonitor=CRT;; Auto) ConnectedMonitor=Auto;; TV) ConnectedMonitor=TV nvidia-xconfig -c /etc/X11/xorg.conf.d/20-automv.conf --tv-standard="$XTVstandard" nvidia-xconfig -c /etc/X11/xorg.conf.d/20-automv.conf --tv-out-format="$XTVconnection" # echo "Option \"TVStandard\" \"$XTVstandard\"" >>/tmp/options # echo "Option \"TVOutFormat\" \"$XTVconnection\"" >> /tmp/options ;; *) ConnectedMonitor=Auto;; esac if [ "$ConnectedMonitor" = Auto ] then echo "auto connection" else nvidia-xconfig -c /etc/X11/xorg.conf.d/20-automv.conf --connected-monitor="$ConnectedMonitor" #echo "Option \"ConnectedMonitor\" \"$ConnectedMonitor\"" >> /tmp/options #echo "Option \"FlatPanelProperties\" \"Scaling = centered, Dithering = enabled\"" >> /tmp/options #echo "Option \"DigitalVibrance\" \"0\"" >> /tmp/options fi # # if [ "$XignoreEDID" = 1 ] # then # EDIDvalue=true # EDIDFREQ=false # DS=" DisplaySize $XDisplaysize" # HS=" HorizSync $XHsync" # VR=" VertRefresh $XVrefresh" # else # EDIDvalue=false # EDIDFREQ=true # DS="# Display size edid used " # HS="# Hsync edid used " # VR="# Vertrefresh edid used " # fi # echo "Option \"UseEdidFreqs\" \"$EDIDFREQ\"" >> /tmp/options # echo "Option \"IgnoreEDID\" \"$EDIDvalue\"" >> /tmp/options # # # sed -e "s/^.*Modes.*$/${ML}/" \ # -e "/INSERT MODELINE/r $TEMPLATES/xorg/modeline.$Xcategory" \ # -e "s/^.*DisplaySize.*$/ $DS/" \ # -e "s/^#.*HorizSync.*$/ $HS/g" \ # -e "s/^#.*VertRefresh.*$/ $VR/g" \ # -e "/INSERT HERE/r /tmp/options" "$TEMPLATES/xorg/xorg.conf.nvidia" > "$XORG_CONF" #nvidia-xconfig -c /etc/X11/xorg.conf.d/20-automv.conf --mode-list=\"${Xres}\" eval nvidia-xconfig -c /etc/X11/xorg.conf.d/20-automv.conf --mode-list=\"${Xres}\" ;; ati|ATI) case $Xconnection in DVI) ConnectedMonitor="tmds1,nocrt1,notv";; VGA) ConnectedMonitor="crt1,notmds1,notv" ;; TV) ConnectedMonitor="tv,nocrt1,notmds1" echo "Option \"TVStandard\" \"$XTVstandard\"" >>/tmp/options echo "Option \"TVFormat\" \"$XTVconnection\"" >> /tmp/options ;; esac if [ "$XignoreEDID" = 1 ] then DS=" DisplaySize $XDisplaysize" HS=" HorizSync $XHsync" VR=" VertRefresh $XVrefresh" else DS="# Display size edid used " HS="# Hsync edid used " VR="# Vertrefresh edid used " fi echo "Option \"ForceMonitors\" \"$ConnectedMonitor\"" >> /tmp/options sed -e "s/^.*Modes.*$/\t $ML/" \ -e "/INSERT MODELINE/r $TEMPLATES/xorg/modeline.$Xcategory" \ -e "s/^.*DisplaySize.*$/ $DS/" \ -e "s/^#.*HorizSync.*$/ $HS/g" \ -e "s/^#.*VertRefresh.*$/ $VR/g" \ -e "/INSERT HERE/r /tmp/options" "$TEMPLATES/xorg/xorg.conf.ati" > "$XORG_CONF" ;; *) echo "unknown card type" ;; esac } function nvidia_prepare { for i in libgl nvidia nvidia-utils nvidia-173xx nvidia-173xx-utils nvidia-96xx nvidia-96xx-utils do pacman --noconfirm -Rdd $i >> $LOGFILE 2>&1 done for i in `echo ${NVPKGS}` do pacman --noconfirm -Rc $i >> $LOGFILE 2>&1 done } function nvidia_driver_install { cp "$TEMPLATES/xorg/xorg.conf.nvidia" $BASE/etc/X11/xorg.conf.d/20-automv.conf installed=0 if [ "$TESTMODE" != "test" ] then grep -qi "$CARDID" "$NVIDIA_SUPPORTED" if [ $? = 0 ] then #install latest drivers echo "Installing current nvidia drivers" nvidia_prepare pacman --noconfirm -S nvidia nvidia-utils >> $LOGFILE 2>&1 installed=1 fi if [ $installed = 0 ] then #nvidia check right here grep -qi "$CARDID" "$NVIDIA_96XX" if [ $? = 0 ] then #install 96xx drivers echo "Installing nvidia 96xx drivers" nvidia_prepare pacman --noconfirm -S nvidia-96xx nvidia-96xx-utils >> $LOGFILE 2>&1 installed=1 fi fi if [ $installed = 0 ] then grep -qi "$CARDID" "$NVIDIA_173" if [ $? = 0 ] then #install latest drivers echo "Installing 173 nvidia drivers" nvidia_prepare pacman --noconfirm -S nvidia-173xx nvidia-173xx-utils >> $LOGFILE 2>&1 installed=1 fi fi if [ $installed = 0 ] then #this is a failsafe, can't find the right driver, then use the latest' #install latest drivers echo "Couldn't find the card in the supported list" echo "Installing current nvidia drivers" nvidia_prepare pacman --noconfirm -S nvidia nvidia-utils >> $LOGFILE 2>&1 installed=1 fi fi if [ \"$Xres\" = "Auto" ] then nvidia-xconfig -c /etc/X11/xorg.conf.d/20-automv.conf --mode-list="nvidia-auto-select" else #nvidia-xconfig -c /etc/X11/xorg.conf.d/20-automv.conf --mode-list=$Xres eval nvidia-xconfig -c /etc/X11/xorg.conf.d/20-automv.conf --mode-list=\"${Xres}\" fi echo "/usr/lib/libXvMCNVIDIA_dynamic.so.1" > "$XVMC_CONFIG" #rm $BASE/etc/X11/xorg.conf.d/20-nvidia.conf } function setupX { Xvalues #echo "$currentmode ____ ${Xres}" #if [ "${currentmode}" != \"${Xres}\" ] if [ x = x ] then case $VGACARDTYPE in nVidia) nvidia_driver_install ;; # VMware) # sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" "$TEMPLATES/xorg/xorg.conf.vmware" > "$XORG_CONF" # ;; VIA|S3) # There are actually multiple options here # xf86-video-openchrome # xf86-video-unichrome # There is also a seperate driver for the Unichrome Pro if [ ${Xres} = Auto ] then sed -e "/^.*Modes.*$/d" "$TEMPLATES/xorg/xorg.conf.via" > "$XORG_CONF" else sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" "$TEMPLATES/xorg/xorg.conf.via" > "$XORG_CONF" fi if [ "$TESTMODE" != "test" ] then if [ "$OPENCHROME" = "1" ] then pacman --noconfirm -R nvidia nvidia-utils >> $LOGFILE 2>&1 pacman --noconfirm -S libgl unichrome-dri xf86-video-openchrome >> $LOGFILE 2>&1 else pacman --noconfirm -R nvidia nvidia-utils >> $LOGFILE 2>&1 pacman --noconfirm -S libgl unichrome-dri xf86-video-unichrome >> $LOGFILE 2>&1 fi fi # I'm making educated guesses here... if lspci | grep "VGA" | grep -qi "Unichrome Pro" then if [ -f "/usr/lib/libchromeXvMCPro.so.1" ] then echo "/usr/lib/libchromeXvMCPro.so.1" > "$XVMC_CONFIG" else echo "/usr/lib/libviaXvMCPro.so.1" > "$XVMC_CONFIG" fi else if [ -f "/usr/lib/libchromeXvMC.so.1" ] then echo "/usr/lib/libchromeXvMC.so.1" > "$XVMC_CONFIG" else echo "/usr/lib/libviaXvMC.so.1" > "$XVMC_CONFIG" fi fi ;; Intel|intel) if [ ${Xres} = Auto ] then sed -e "/^.*Modes.*$/d" "$TEMPLATES/xorg/xorg.conf.intel" > "$XORG_CONF" else sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" "$TEMPLATES/xorg/xorg.conf.intel" > "$XORG_CONF" fi if [ "$TESTMODE" != "test" ] then pacman --noconfirm -R nvidia-utils >> $LOGFILE 2>&1 pacman --noconfirm -S libgl >> $LOGFILE 2>&1 fi echo "/usr/lib/libIntelXvMC.so.1" > "$XVMC_CONFIG" ;; vesa|InnoTek) if [ ${Xres} = Auto ] then sed -e "/^.*Modes.*$/d" "$TEMPLATES/xorg/xorg.conf.vesa" > "$XORG_CONF" else sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" "$TEMPLATES/xorg/xorg.conf.vesa" > "$XORG_CONF" fi ;; *) XCONF=/root/xorg.conf.new XCONFB=/etc/X11/xorg.conf.install X -configure if [ -f "$XCONF" ] then echo "Using $XCONF" if [ ${Xres} = Auto ] then grep -v Modes "$XCONF" | sed -e 's/dev\/mouse/dev\/psaux/g'> "$XORG_CONF" else grep -v Modes "$XCONF" | sed -e "/Depth.*16/a Modes \"${Xres}\" " -e "/Depth.*24/a Modes \"${Xres}\"" -e 's/dev\/mouse/dev\/psaux/g'> "$XORG_CONF" fi elif [ -f "$XCONFB" ] then echo "Using $XCONFB" if [ ${Xres} = Auto ] then sed -e "/^.*Modes.*$/d" "$XCONFB" > "$XORG_CONF" else sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" "$XCONFB" > "$XORG_CONF" fi else echo "Xorg configuration failed" fi rm -f "$XCONF" >> $LOGFILE 2>&1 ;; esac 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 0 fi TESTMODE="$1" if [ "$TESTMODE" = "test" ] then XORG_CONF="/tmp/xorg.conf.test" XVMC_CONFIG="/tmp/XvMCConfig.test" XUseAdvanced="1" XIgnoreConfig="${2}" Xcardtype="${3}" XIgnoreEDID="${4}" Xconnection="${5}" XHsync="${6}" XVrefresh="${7}" Xresadvanced="${8}" XTVstandard="${9}" XTVconnection="${10}" XDisplaysize="${11}" else if [ -f /etc/systemconfig ] then . /etc/systemconfig else Xres="800x600" 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" fi presetupX