All pastes #956112 Raw Edit

Miscellany

public text v1 · immutable
#956112 ·published 2008-03-25 01:04 UTC
rendered paste body
#!/bin/sh
# Copyright 2001 BSDi, Inc, Concord, CA.  Written by volkerdi@slackware.com.
# Copyright 2004 Slackware Linux, Inc., Concord, CA.
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Modified by rs Lange of Vector Linux. Formally called xorgsetup
vdir=`dirname $0`
. $vdir/vasm-functions
check_root

if [ $DISPLAY ]; then
  DIALOG=Xdialog
else
  DIALOG=dialog
fi



# If we aren't root, bail:
if [ "$UID" = "0" ]; then
  TMP=/var/log/setup/tmp
else
  clear
  echo "Only root can configure X......bailing"
  sleep 8
  exit
fi

XORG=`which Xorg`

# Now, this wouldn't make much sense either:
if [ ! -x $XORG ]; then
  echo "No X found so bailing............"
  sleep 8
  exit
fi

if [ ! -d $TMP ]; then
 mkdir -p $TMP
 chmod 700 $TMP
fi

# Move any existing config file(s) aside:
for xf86config in /etc/X11/xorg.conf /etc/xorg.conf /usr/X11R6/lib/X11/xorg.conf $HOME/xorg.conf ; do
  if [ -r $xf86config ]; then
    mv $xf86config ${xf86config}.backup
  fi  
done
# Have the X server create a default config file:
if ( lspci | grep -i vga | grep -iq " ati " ) then
 fixati=1
  /sbin/vxconf-ati
else
  echo "Detecting Hardware"
  $XORG -configure :2 2> /dev/null
  if [ ! $? = 0 ]; then
   # failure, bail.
   exit
  fi
fi

##We may need horiz and vert refresh rates later so lets get them now
ddcxinfo -hsync > $TMP/hsync
ddcxinfo -vsync > $TMP/vsync
vert=`cat $TMP/vsync`
horiz=`cat $TMP/hsync`
if [ $vert = "0-0" ]; then
  vert="40-90"
fi
if [ $horiz = "0-0" ]; then
  horiz="31.5-64"
fi


# OK, so now that we have a default file in $HOME/xorg.conf.new
# we can set up a default color depth:
depth=24

##now lets get a default screen resolution
clear
$DIALOG --title "SELECT DEFAULT MONITOR RESOLUTION" \
 --menu "Please select your default screen resolution from the menu below. \n
The resolution selected should be the best your monitor will handle. \n
AutoConfig will get the max for the newest monitors with full DPMS support. \n
For most modern monitors a selection of 1024X768 is a good choice. \n
Oler monitors may only be able to do 800X600. \n 
Please select a resolution now." 20 80 8 \
"AutoConfig" "Choose this if you have no idea, X will try to figure it out" \
"640x480" "The most basic vga monitor" \
"800x600" "Any SVGA monitor should be able to do this"  \
"1024x768" "If you have a recent 15 or 17 inch monitor" \
"1280x1024" "Very new monitors or lcd screens" \
"1440x900" "You know if you have this one...wow!" \
"1600x1200" "One word...SuperGamer!"  2> $TMP/resolution
if [ ! $? = 0 ]; then
rm -f $TMP/resolution
exit 1
fi
res=`cat $TMP/resolution`

##set resolution modes
if [ "$res" = "640x480" ]; then
  finalres="Modes \"640x480\" \"800x600\""
fi
if [ "$res" = "800x600" ]; then
  finalres="Modes \"800x600\" \"640x480\""
fi
if [ "$res" = "1024x768" ]; then
  finalres="Modes \"1024x768\" \"800x600\" \"640x480\""
fi
if [ "$res" = "1280x1024" ]; then
  finalres="Modes \"1280x1024\" \"1024x768\" \"800x600\" \"640x480\""
fi
if [ "$res" = "1440x900" ]; then
  finalres="Modes \"1440x900\" \"1220x700\" \"1024x768\" \"800x600\" \"640x480\""
fi
if [ "$res" = "1600x1200" ]; then
  finalres="Modes \"1600x1200\" \"1280x1024\" \"1024x768\" \"800x600\" \"640x480\""
fi


# I know this completely hoses the indentation of the xorg.conf file, but
# really don't know a good way around that.  Shoulda used perl.  ;)
START_LOOKING=false
rm -f /etc/X11/xorg.conf
. /etc/sysconfig/vector
cat $HOME/xorg.conf.new | grep "^HorizSync" 1> /dev/null
if [ $? = 0 ]; then
  fixsync="no"
else
  fixsync="yes"
fi
cat $HOME/xorg.conf.new | while read LINE ; do
  echo "$LINE" >> /etc/X11/xorg.conf
  if echo $LINE | grep Section | grep Screen 1> /dev/null ; then
    START_LOOKING=true
  fi
  if [ "$START_LOOKING" = "true" ]; then
   if echo $LINE | grep Monitor 1> /dev/null ; then
     if [ ! "$depth" = "none" ]; then
       echo "DefaultDepth $depth" >> /etc/X11/xorg.conf
     fi
     START_LOOKING=false
   fi
 fi
 ## add cyrillic fonts to font path
 if echo $LINE | grep 100dpi 1> /dev/null ; then
   echo "FontPath     \"/usr/X11R6/lib/X11/fonts/truetype/\"
FontPath     \"/usr/X11R6/lib/X11/fonts/local/\"
FontPath     \"/usr/X11R6/lib/X11/fonts/cyrillic/\" " >> /etc/X11/xorg.conf
 fi
 ##lets try a default resolution
 if [ ! "$res" = "none" ]; then 
  if echo $LINE | grep ^Depth 1> /dev/null ; then
    echo $finalres >> /etc/X11/xorg.conf
  fi
 fi

if [ "$nvidia" = 1 ];then
    if echo $LINE | grep Section | grep Module\" 1> /dev/null ; then
      if ! cat $HOME/xorg.conf.new | grep Load | grep glx\" 1> /dev/null ; then
        echo Load  \"glx\" >>/etc/X11/xorg.conf
      fi
    fi
fi

 ##now the wheel for a mouse
#if echo $LINE | grep Device | grep mouse 1> /dev/null ; then
#  echo "Option  \"ZAxisMapping\" \"4 5\"" >> /etc/X11/xorg.conf
#fi	
 
 ##now keyboard setting if none us
 if [ ! $XKBMAP ]; then
   XKBMAP=us
 fi
 if [ $XKBMAP ]; then
  if echo $LINE | grep Driver | grep kbd 1> /dev/null ; then
    echo "Option  \"XkbLayout\"  \"$XKBMAP\"   ## KEYBOARD_MAP!" >> /etc/X11/xorg.conf
  fi
 fi
 if [ $XKBMODEL ]; then
  if echo $LINE | grep Driver | grep kbd 1> /dev/null ; then
    echo "Option  \"XkbModel\"  \"$XKBMODEL\"" >> /etc/X11/xorg.conf
  fi
 fi
 if [ $XKBVAR ]; then
  if echo $LINE | grep Driver | grep kbd 1> /dev/null ; then
    echo "Option  \"Xkbvariant\"  \"$XKBVAR\"" >> /etc/X11/xorg.conf
  fi
 fi
 ##last monitor refresh if not auto detected
#echo $fixsync
 if [ "$fixsync" = "yes" ]; then
  if echo $LINE | grep ModelName 1> /dev/null ; then
    echo "HorizSync $horiz" >> /etc/X11/xorg.conf
  fi
 fi
 if [ "$fixsync" = "yes" ]; then
  if echo $LINE | grep ModelName 1> /dev/null ; then
    echo "VertRefresh $vert" >> /etc/X11/xorg.conf
  fi
 fi				
done

 echo Section \"DRI\" >> /etc/X11/xorg.conf
 echo 	Mode         0666 >> /etc/X11/xorg.conf
 echo EndSection >> /etc/X11/xorg.conf

rm -f $TMP/colordepth
rm -f $TMP/resolution
rm -f $TMP/vsync
rm -f $TMP/hsync
rm -f $HOME/xorg.conf.new
clear

##  Test for 2 video cards
if [ `grep "^Driver" /etc/X11/xorg.conf | grep -v kbd | grep -v mouse | wc | cut -d " " -f7` -gt 1 ]; then
     cards=`grep "^Vendor" /etc/X11/xorg.conf | grep -v Mon | cut -d " " -f3 | cut -c 2-`
     for i in $cards; do
       echo $i >>/tmp/cards
       card[$j]="$i"
       j=`expr $j + 1`
     done
     $DCMD --backtitle "$BACKTITLE" --title "Choose Video Card" --menu "\n
     We have found more than 1 video card, and for X to work \n
     we need to know which card your monitor is connected to.\n
     Choose which video card you would like to use" \
     20 74 8 \
     ${card[0]} ${card[0]} \
     ${card[1]} ${card[1]} \
     ${card[2]} ${card[2]} \
     2> $freply

     cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup

     card1=`cat $freply`
     card2=`cat /tmp/cards | grep -v $card1`
     sed '/Card[0-2]/ d' /etc/X11/xorg.conf > /etc/X11/xorg.conf.1
     rm /etc/X11/xorg.conf
     cat /etc/X11/xorg.conf.1 | while read LINE ; do
       echo "$LINE" >> /etc/X11/xorg.conf.2
       if echo $LINE | grep $card1 1> /dev/null ; then
         echo Identifier  \"Card0\" >> /etc/X11/xorg.conf.2
       fi
       if echo $LINE | grep Section | grep Screen 1> /dev/null ; then
         echo Device     \"Card0\" >> /etc/X11/xorg.conf.2
       fi
     done
     cat /etc/X11/xorg.conf.2 | while read LINE ; do
       echo "$LINE" >> /etc/X11/xorg.conf
       if echo $LINE | grep $card2 1> /dev/null ; then
         echo Identifier  \"Card1\" >> /etc/X11/xorg.conf
       fi
     done
       rm /tmp/cards
       rm /etc/X11/xorg.conf.1
       rm /etc/X11/xorg.conf.2
fi

### intel i810 video has a problem without this hack
cat /etc/X11/xorg.conf | grep Driver | grep i810 1> /dev/null

if [ $? = 0 ]; then
uname -r | cut -f 1,2 -d '.' > $TMP/kernel
kernel=`cat $TMP/kernel`
rm -f $TMP/kernel
if [ $kernel = "2.6" ]; then
/sbin/modprobe intel-agp && echo "/sbin/modprobe intel-agp" >> /etc/rc.d/rc.modules
fi
fi
cat /etc/X11/xorg.conf | grep Driver | grep "\"nv\"" 1> /dev/null
if [ $? = 0 ]; then
 sed s'/nv/nv/'g /etc/X11/xorg.conf > /etc/X11/xorg.conf.new
 mv /etc/X11/xorg.conf.new /etc/X11/xorg.conf
 fixnv=1
fi
cat /etc/X11/xorg.conf | grep Driver | grep "\"nvidia\"" 1> /dev/null
if [ $? = 0 ]; then
 sed s'/nvidia/nv/'g /etc/X11/xorg.conf > /etc/X11/xorg.conf.new
 mv /etc/X11/xorg.conf.new /etc/X11/xorg.conf
 fixnvidia=1
fi
cat /etc/X11/xorg.conf | grep Driver | grep "\"vesa\"" 1> /dev/null
if [ $? = 0 ]; then
 sed s'/vesa/vesa/'g /etc/X11/xorg.conf > /etc/X11/xorg.conf.new
 mv /etc/X11/xorg.conf.new /etc/X11/xorg.conf
 fixonboard=1
fi
# echo "Installing Graphics Driver...........hold tight!!!!"
sleep 2
Xorg -probeonly :2 2> /dev/null
if [ $? = 0 ]; then
 if [ "$fixnv" = 1 ];then
  /sbin/vlnvidia-live
 fi
 if [ "$fixnvidia" = 1 ];then
  /sbin/vlnvidia-live
 fi
if [ "$fixonboard" = 1 ];then
  /sbin/vlnvidia-live
 fi
else
 if [ "$fixati" = 1 ];then
  if ( ls /var/log/packages | grep -iq fglrx ) then
   /usr/share/ati/fglrx-uninstall.sh >/dev/null && removepkg fglrx >/dev/null
  fi
  /sbin/vxconf-ati
 fi 
 yesnobox "There was an error in your X configuration. Would you like to edit the \n
 /etc/X11/xorg.conf file as autoconfig must have stumbled somewhere? \n
 Choosing yes here will start a text mode configuration utility. \n
 Choose no if you wish to edit later from the installation." 
 if [ $? = 0 ]; then
 /usr/bin/mcedit /etc/X11/xorg.conf
 fi
 exit 1
 fi