123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- #!/bin/sh
- #(c) copyright Barry Kauler 2011, bkhome.org
- #2011 GPL licence v3 (/usr/share/doc/legal/gpl-3.0.htm)
- #called from /usr/bin/xwin.
- #20110404 first version.
- #110627 slight mod. see also /etc/X11/xorg.conf-auto-pc
- #110701 synaptics stuff seems to clash with xorg-server 1.10.1.
- #110727 ddcprobe segfaults on my new laptop.
- #110912 fix syntax error. Message at exit of script.
- #110913 ddcprobe working new laptop latest wary with xorg7.6. fix 1366x768 resolution. fix touchpad.
- #120129 jemimah: add Option "SHMConfig" "on".
- #120329 correctly set keyboard layout, model and variant.
- #120517 arm builds do not work with ddcprobe. for now, just execute some basic code for arm systems.
- . /etc/rc.d/MODULESCONFIG
- #120517
- if [ "`which ddcprobe`" = "" ];then
- #running on an arm board...
- cp -f /etc/X11/xorg.conf-auto-armsystem /etc/X11/xorg.conf
- echo "#PuppyHardwareProfile=armsystem" >> /etc/X11/xorg.conf
- #create a copy of xorg.conf with the profile in the filename...
- cp -af /etc/X11/xorg.conf /etc/X11/xorg.conf.armsystem
- echo
- echo "Xorg Wizard Automatic has just run."
- echo "If you are reading this, then you are at the console without X running."
- echo "The usual thing now is to type 'xwin' to start X..."
- exit ###EXIT###
- fi
- #110701
- XORGVER="`Xorg -version 2>&1 | grep '^X\.Org' | rev | cut -f 1 -d ' ' | rev`"
- [ ! "$XORGVER" ] && XORGVER="1.3" #110913 precaution.
- RETVALS="`keymap-set --xopt`"
- eval "$RETVALS" #ex: XKBMODEL="pc102", XKBLAYOUT="us", XKBVARIANT=""
- [ "$XKBLAYOUT" = "" ] && XKBLAYOUT='us'
- [ "$XKBMODEL" = "" ] && XKBMODEL='pc102'
- #probe monitor...
- ddcprobe >/tmp/ddcprobe.txt
- #weird (ddcprobe is very weird), on some hardware, probe fails every alternate run of ddcprobe...
- case "`cat /tmp/ddcprobe.txt`" in *edidfail*)
- sleep 1
- ddcprobe >/tmp/ddcprobe.txt
- ;;
- esac
- case "`cat /tmp/ddcprobe.txt`" in *edidfail*)
- sleep 1
- ddcprobe >/tmp/ddcprobe.txt
- ;;
- esac
- CHOSENRES=''
- if [ -s /tmp/ddcprobe.txt ];then #110727 ddcprobe segfaults on my new laptop.
- #the vesa 'mode:' lines returned by ddcprobe are very limited...
- XMODES="`grep '^mode:' /tmp/ddcprobe.txt | grep -E 'x64k|x16m'| cut -f 2 -d ' ' | sed -e 's/x64k/x16/g ; s/x16m/x24/g' | sort -u -g`"
- echo "$XMODES" > /tmp/Xmodes.txt
- MONCHOICES="`grep '^timing:' /tmp/ddcprobe.txt | grep -E -v 'Apple|8514A|Mac II|\(XGA2\)' | grep -E ' 640x480@| 800x480@| 800x600@| 1024x600@| 1024x768@| 1280x768@| 1280x800@| 1280x1024@| 1366x768@| 1400x1050@| 1440x900@| 1600x900@| 1600x1200@| 1680x1050@| 1920x1080@| 1920x1200@' | cut -f 2 -d ' ' | sort -u -g`" #ex: 1280x800@59
- cMONCHOICES="`grep '^ctiming:' /tmp/ddcprobe.txt | grep -E -v 'Apple|8514A|Mac II|\(XGA2\)' | grep -E ' 640x480@| 800x480@| 800x600@| 1024x600@| 1024x768@| 1280x768@| 1280x800@| 1280x1024@| 1366x768@| 1400x1050@| 1440x900@| 1600x900@| 1600x1200@| 1680x1050@| 1920x1080@| 1920x1200@' | cut -f 2 -d ' ' | sort -u -g`" #ex: 1280x800@59
- dMONCHOICES="`grep '^dtiming:' /tmp/ddcprobe.txt | grep -E -v 'Apple|8514A|Mac II|\(XGA2\)' | grep -E ' 640x480@| 800x480@| 800x600@| 1024x600@| 1024x768@| 1280x768@| 1280x800@| 1280x1024@| 1366x768@| 1400x1050@| 1440x900@| 1600x900@| 1600x1200@| 1680x1050@| 1920x1080@| 1920x1200@' | cut -f 2 -d ' ' | sort -u -g`" #ex: 1280x800@59
- xMONCHOICES="$MONCHOICES"
- [ "$cMONCHOICES" ] && xMONCHOICES="$cMONCHOICES"
- [ "$dMONCHOICES" ] && xMONCHOICES="$dMONCHOICES"
- [ ! "$xMONCHOICES" ] && xMONCHOICES="`echo "$XMODES" | grep '1024x768'`" #fallback. 110912 syntax error.
- if [ "$xMONCHOICES" ];then
- CHOSENRES="`echo -n "$xMONCHOICES" | tail -n 1 | cut -f 1 -d '@'`"
- #patch video bios resolution for widescreen...
- if grep -F 'oem:' /tmp/ddcprobe.txt | grep -F -q 'Intel' ;then
- MYXYRES="`echo -n "$CHOSENRES" | cut -f 1-2 -d 'x'`"
- if ! grep -q "$MYXYRES" /tmp/Xmodes.txt ;then
- MYXRES="`echo -n "$CHOSENRES" | cut -f 1 -d 'x'`"
- MYYRES="`echo -n "$CHOSENRES" | cut -f 2 -d 'x'`"
- #this is an app that patches video-bios, but in ram only...
- 915resolution 38 $MYXRES $MYYRES #...replaces mode 38 (1024x768).
- #create something for xwin to execute... actually, executing this in /etc/profile...
- echo "915resolution 38 $MYXRES $MYYRES" > /etc/resolutionfix
- fi
- else
- #in case plug usb or multisession-cd into different pc...
- [ -f /etc/resolutionfix ] && rm -f /etc/resolutionfix
- fi
- fi
- fi
- cp -f /etc/X11/xorg.conf-auto-pc /etc/X11/xorg.conf
- #120329
- REGEX4="s%.*#xkeymap0% Option \"XkbLayout\" \"${XKBLAYOUT}\" #xkeymap0%"
- REGEX5="s%.*#xkbmodel0% Option \"XkbModel\" \"${XKBMODEL}\" #xkbmodel0%"
- sed -i -e "$REGEX4" -e "$REGEX5" /etc/X11/xorg.conf
- if [ "$XKBVARIANT" ];then
- REGEX6="s%.*#xkbvariant0% Option \"XkbVariant\" \"${XKBVARIANT}\" #xkbvariant0%"
- sed -i -e "$REGEX6" /etc/X11/xorg.conf
- fi
- if [ "$CHOSENRES" ];then
- REGEX1="s%.*#screen0modes% Modes \"${CHOSENRES}\" #screen0modes%"
- REGEX2="s%.*#monitor0prefmode% Option \"PreferredMode\" \"${CHOSENRES}\" #monitor0prefmode%"
- sed -i -e "$REGEX1" -e "$REGEX2" /etc/X11/xorg.conf
- fi
- TOUCHPAD=''; OLD3='Section "Monitor"'
- [ "`grep 'Elantech' /proc/bus/input/devices`" ] && TOUCHPAD='Elantech'
- [ "`grep 'Alps' /proc/bus/input/devices`" ] && TOUCHPAD='Alps'
- [ "`grep 'Synaptics' /proc/bus/input/devices`" ] && TOUCHPAD='Synaptics'
- if [ "$TOUCHPAD" ];then
- if [ "`lsmod | grep '^evdev'`" = "" ];then
- REGEXt0="s%^ADDLIST=.*%ADDLIST='${ADDLIST} evdev '%"
- sed -i -e "$REGEXt0" /etc/rc.d/MODULESCONFIG #so evdev module will load next bootup.
- modprobe evdev
- fi
-
- if vercmp $XORGVER lt 1.9.0; then #110701
- REGEXt1='s%.*#loadsynaptics% Load "synaptics" #loadsynaptics%'
- REGEXt2='s%.*#serverlayoutsynaptics% InputDevice "Synaptics Mouse" "AlwaysCore" #serverlayoutsynaptics%'
- sed -i -e "$REGEXt1" -e "$REGEXt2" /etc/X11/xorg.conf
- case $TOUCHPAD in
- Elantech) #jemimah
- NEW3='Section "InputDevice"\
- Identifier "Synaptics Mouse"\
- Driver "synaptics"\
- Option "Device" "/dev/psaux"\
- Option "Protocol" "auto-dev"\
- Option "LeftEdge" "60"\
- Option "RightEdge" "1070"\
- Option "TopEdge" "90"\
- Option "BottomEdge" "680"\
- Option "Emulate3Buttons" "on"\
- Option "MaxTapTime" "180"\
- Option "MaxTapMove" "59"\
- Option "VertScrollDelta" "20"\
- Option "MinSpeed" "0.75"\
- Option "MaxSpeed" "1.00"\
- Option "AccelFactor" "0.16"\
- Option "SHMConfig" "on"\
- Option "VertEdgeScroll" "on"\
- Option "TapButton1" "1"\
- EndSection\
- \
- Section "Monitor"'
- ;;
- Alps) #kirk
- NEW3='Section "InputDevice"\
- Identifier "Synaptics Mouse"\
- Driver "synaptics"\
- Option "Device" "/dev/psaux"\
- Option "Protocol" "auto-dev"\
- Option "LeftEdge" "120"\
- Option "RightEdge" "930"\
- Option "TopEdge" "120"\
- Option "BottomEdge" "650"\
- Option "FingerLow" "14"\
- Option "FingerHigh" "15"\
- Option "MaxTapTime" "0"\
- Option "MaxTapMove" "110"\
- Option "VertScrollDelta" "20"\
- Option "MinSpeed" "0.3"\
- Option "MaxSpeed" "0.75"\
- Option "AccelFactor" "0.030"\
- Option "EdgeMotionMinSpeed" "200"\
- Option "EdgeMotionMaxSpeed" "200"\
- Option "UpDownScrolling" "1"\
- Option "CircularScrolling" "1"\
- Option "CircScrollDelta" "0.1"\
- Option "CircScrollTrigger" "2"\
- Option "SHMConfig" "on"\
- EndSection\
- \
- Section "Monitor"'
- ;;
- Synaptics)
- NEW3='Section "InputDevice"\
- Identifier "Synaptics Mouse"\
- Driver "synaptics"\
- Option "Device" "/dev/psaux"\
- Option "Protocol" "auto-dev"\
- Option "LeftEdge" "1700"\
- Option "RightEdge" "5300"\
- Option "TopEdge" "1700"\
- Option "BottomEdge" "4200"\
- Option "FingerLow" "25"\
- Option "FingerHigh" "30"\
- Option "MaxTapTime" "0"\
- Option "MaxTapMove" "220"\
- Option "VertScrollDelta" "100"\
- Option "MinSpeed" "0.10"\
- Option "MaxSpeed" "0.30"\
- Option "AccelFactor" "0.0030"\
- Option "SHMConfig" "on"\
- #Option "Repeater" "/dev/ps2mouse"\
- EndSection\
- \
- Section "Monitor"'
- ;;
- esac
- sed -i -e "s%${OLD3}%${NEW3}%" /etc/X11/xorg.conf
- else
- #110913 create basic section...
- #120129 jemimah: add Option "SHMConfig" "on"...
- REGEXt1='s%.*#loadsynaptics% Load "synaptics" #loadsynaptics%'
- REGEXt2='s%.*#serverlayoutsynaptics% InputDevice "Synaptics Mouse" "AlwaysCore" #serverlayoutsynaptics%'
- NEW3='Section "InputDevice"\
- Identifier "Synaptics Mouse"\
- Driver "synaptics"\
- Option "SHMConfig" "on"\
- EndSection\
- \
- Section "Monitor"'
- REGEXt3="s%${OLD3}%${NEW3}%"
- sed -i -e "$REGEXt1" -e "$REGEXt2" -e "$REGEXt3" /etc/X11/xorg.conf
- fi #110701 endif
-
- fi
- #want a hardware profile so can bootup on different PCs...
- PROFILECHIP="`grep -m1 '^oem: ' /tmp/ddcprobe.txt | cut -f 2-4 -d ' ' | tr ' ' '_' | sed -e 's/[^0-9a-zA-Z]/_/g'`"
- #'eisa:' and 'id:' return fluctuating values on some PCs, so search in this order...
- PROFILEMONITOR="`grep '^monitorid: ' /tmp/ddcprobe.txt | head -n 1 | cut -f 2 -d ':' | tr -d ' ' | sed -e 's/[^0-9a-zA-Z]/_/g'`"
- [ "$PROFILEMONITOR" = "" ] && PROFILEMONITOR="`grep '^monitorname: ' /tmp/ddcprobe.txt | head -n 1 | cut -f 2 -d ':' | tr -d ' ' | sed -e 's/[^0-9a-zA-Z]/_/g'`"
- [ "$PROFILEMONITOR" = "" ] && PROFILEMONITOR="`grep '^monitorrange: ' /tmp/ddcprobe.txt | head -n 1 | cut -f 2 -d ':' | tr -d ' ' | sed -e 's/[^0-9a-zA-Z]/_/g'`"
- echo "#PuppyHardwareProfile=${PROFILECHIP}${PROFILEMONITOR}" >> /etc/X11/xorg.conf
- #create a copy of xorg.conf with the profile in the filename...
- cp -af /etc/X11/xorg.conf /etc/X11/xorg.conf.${PROFILECHIP}${PROFILEMONITOR}
- echo
- echo "Xorg Wizard Automatic has just run."
- echo "If you are reading this, then you are at the console without X running."
- echo "The usual thing now is to type 'xwin' to start X..."
- ###END###
|