#!/bin/bash #SET DISPLAYCARD to force a cardtype #SET DISPLAYRES to force Xres, ENV takes precendent over cmdline #displayres=cmdline #NVPKGS="ati-dri xf86-video-ati xf86-video-radeonhd intel-dri xf86-video-intel unichrome-dri xf86-video-unichrome xf86-video-mga xf86-video-savage xf86-video-trident" NVPKGS="ati-dri xf86-video-ati xf86-video-radeonhd intel-dri xf86-video-intel xf86-video-mga xf86-video-savage xf86-video-trident unichrome-dri xf86-video-openchrome" BASE="" . /etc/profile NVIDIA_96XX="$TEMPLATES/xorg/96xx_supported.txt" #TEMPLATES="/usr/share/templates" MYTHHOME=$BASE/home/mythtv function Xvalues { CMDLINE=$(cat /proc/cmdline) echo "$CMDLINE" | grep -q forceXvesa if [ $? = 0 ] then 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 #force VGACARDTYPE if [ ! x$DISPLAYCARD = x ] then VGACARDTYPE=$DISPLAYCARD Xcardtype=$VGACARDTYPE fi echo "Will use $VGACARDTYPE" 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" > /tmp/options Xcategory=`echo "$Xresadvanced" | cut -d_ -f1` Xres=`echo "$Xresadvanced" | cut -d_ -f2` echo "$Xcategory" if [ "$Xcategory" = "nVidia Modeline" ] 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 # echo $ML case $Xcardtype in NVIDIA|nVidia|nvidia) case $Xconnection in DVI) ConnectedMonitor=DFP ;; vga) ConnectedMonitor=CRT;; Auto) ConnectedMonitor=Auto;; TV) ConnectedMonitor=TV echo "Option \"TVStandard\" \"$XTVstandard\"" >>/tmp/options echo "Option \"TVOutFormat\" \"$XTVconnection\"" >> /tmp/options ;; esac if [ "$ConnectedMonitor" = Auto ] then echo "auto connection" else 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" ;; 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" ;; via|VIA|Via|S3) # Need to add appropriate Modules, Device and DRI sections # See the http://www.mythtv.org/wiki/XvMC wiki page echo "no via here" ;; *) echo "unknown card type" ;; esac } function setupX { Xvalues #echo "$currentmode ____ ${Xres}" #if [ "${currentmode}" != \"${Xres}\" ] if [ x = x ] then case $VGACARDTYPE in nVidia) if [ ${Xres} = Auto ] then sed -e "/^.*Modes.*$/d" "$TEMPLATES/xorg/xorg.conf.nvidia" > "$XORG_CONF" else sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" "$TEMPLATES/xorg/xorg.conf.nvidia" > "$XORG_CONF" fi if [ "$TESTMODE" != "test" ] then #nvidia check right here grep -qi "$CARDID" "$NVIDIA_96XX" if [ $? = 0 ] then #install 96xx drivers echo "installing nvidia 96xx drivers" pacman --noconfirm -Rd libgl > /dev/null 2>&1 pacman --noconfirm -R $NVPKGS > /dev/null 2>&1 pacman --noconfirm -S nvidia-96xx nvidia-96xx-utils > /dev/null 2>&1 else #install latest drivers echo "installing current nvidia drivers" pacman --noconfirm -Rd libgl > /dev/null 2>&1 pacman --noconfirm -R $NVPKGS > /dev/null 2>&1 pacman --noconfirm -S nvidia nvidia-utils > /dev/null 2>&1 fi fi echo "/usr/lib/libXvMCNVIDIA_dynamic.so.1" > "$XVMC_CONFIG" ;; # 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 > /dev/null 2>&1 pacman --noconfirm -S libgl unichrome-dri xf86-video-openchrome > /dev/null 2>&1 else pacman --noconfirm -R nvidia nvidia-utils > /dev/null 2>&1 pacman --noconfirm -S libgl unichrome-dri xf86-video-unichrome > /dev/null 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 > /dev/null 2>&1 pacman --noconfirm -S libgl > /dev/null 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" 2>&1 > /dev/null ;; esac fi } #MAIN 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