1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
|
#!/bin/sh
#
# X configuration script based on ltsp4 startx screen session.
. /usr/share/lessdisks/ltsp_functions
# TODO take commandline arguments for various settings.
vidlist=${vidlist:-"/usr/share/lessdisks/ltsp_vidlist"}
alt_vidlist=${alt_vidlist:-"/usr/share/discover/pci.lst"}
probe_order=${probe_order:-"ltsp discover"}
X_LINK=${X_LINK:-"$rw/etc/X"}
DEFAULT_SERVER=${SERVER:-"xapp"}
XDM_SERVER=${XDM_SERVER:-${DEFAULT_SERVER}}
XFCFG=${xf86config:-"/var/state/lessdisks/etc/XF86Config"}
if [ $# -lt 1 ]; then
XF_ARGS=""
else
XF_ARGS=$*
fi
get_ltsp_xserver(){
# full id of the pci card
pci_id=$1
# manufactuer id number
man_id=$(echo $pci_id | sed s/....$//g)
# model id number
card_id=$(echo $pci_id | sed s/^....//g)
xdriver=$(egrep "^$man_id:$card_id" $vidlist | awk '{print $2}')
echo $xdriver
}
get_discover_xserver(){
# use discover-data
pci_id=$(echo $1 | tr A-Z a-z)
xdriver=$(egrep $pci_id $alt_vidlist | awk '/video/{print $3}' | sed s/Server://g | sed s/XFree86\(//g | tr ")" " ")
echo $xdriver
}
get_xserver(){
# TODO put probe_order somewhere else...
for p in $probe_order; do
case $p in
ltsp) xdriver=$(get_ltsp_xserver $1) ;;
discover) xdriver=$(get_discover_xserver $1) ;;
esac
if [ -n "$xdriver" ]; then
break
fi
done
echo $xdriver
}
check_cards(){
# TODO make use of this function
number_xservers=$(echo $xservers | wc -w)
if [ "$number_xservers" = "0" ]; then
echo "ERROR: couldn't find any video cards"
exit 1
elif [ "$number_xservers" -gt "1" ]; then
# TODO real handling for multiple video cards...
echo "WARNING: $number_xservers servers found, this script is prone to fail..."
fi
}
make_x_link(){
if [ -z "$1" ]; then
return 1
fi
if [ -x "$1" ] && [ ! -d "$1" ]; then
X_BINARY_PATH="$1"
elif [ -x "/usr/bin/X11/$1" ] && [ ! -d "/usr/bin/X11/$1" ]; then
X_BINARY_PATH=/usr/bin/X11/$1
elif [ -d /usr/bin/X11/ ]; then
X_BINARY_PATH=/usr/bin/X11/$1
echo "NOTE: setting X server to $X_BINARY_PATH, but"
echo " the appropriate X server is not installed."
echo " you will need an X server installed..."
sleep 5
fi
if [ -L "$2" ] || [ -e "$2" ]; then
mv -vf $2 $2.old
fi
ln -s $X_BINARY_PATH $2
}
################################################################################
#
# Setup the XF86Config file
#
XSERVER=${XSERVER:-"auto"}
if [ "${XSERVER}" = "auto" ]; then
XSERVER=""
echo "Scanning for video card"
pci_ids=$(cut -f 2 /proc/bus/pci/devices)
for x in $test_pci_ids $pci_ids ; do
XSERVER=$(get_xserver $x)
# TODO handle multple video cards
if [ -n "$XSERVER" ]; then
echo "found X server: $XSERVER"
break
fi
done
if [ -z "${XSERVER}" ]; then
XSERVER=${DEFAULT_XSERVER:-"vesa"}
echo
echo " WARNING: Auto probe of the video card failed"
echo
echo "assuming default of $XSERVER"
sleep 5
fi
fi
if [ "${XSERVER}" = "i810" ]; then
if [ ! -f /tmp/i810_loaded ]; then
modprobe agpgart
touch /tmp/i810_loaded
fi
fi
#
# Build the XF86Config file from entries in the lts.conf file
# If it starts with 'XF86_', then we use XFree86 3.3.6. Otherwise,
# we use XFree86 4.x
#
if [ -e "${XFCFG}" ]; then
cp -a ${XFCFG} ${XFCFG}.old
fi
case ${XSERVER} in
XF86_*) build_x3_cfg ${XSERVER} >${XFCFG}
;;
*) build_x4_cfg ${XSERVER} >${XFCFG}
;;
esac
################################################################################
#
# Figure out how to run the X server
#
if [ -e "$X_LINK" ]; then
mv -f $X_LINK $X_LINK.old
fi
case ${XSERVER} in
XF86_*|Xvnc) XBINARY="${XSERVER}"
XOPTS=""
make_x_link $XSERVER $X_LINK
;;
Xvesa) XBINARY="Xvesa"
make_x_link $XSERVER $X_LINK
case "${X_MODE_0}" in
1280x1024) XOPTS="-shadow -mode 0x011A"
;;
1024x768) XOPTS="-shadow -mode 0x0117"
;;
800x600) XOPTS="-shadow -mode 0x0114"
;;
640x480) XOPTS="-shadow -mode 0x0111"
;;
*) XOPTS="-shadow -mode 0x0117"
;;
esac
;;
*) XBINARY="XFree86"
XOPTS=""
make_x_link XFree86 $X_LINK
;;
esac
|