X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=grml-x;h=cb4c1fc474eca6b17b653a2a60a2c6ec74bb938a;hb=4e55cf7818d565fcb832e5a61dc035cc84944c7e;hp=8a551234a9e883a000df52050bae092ceefa4c18;hpb=f16a8c94858f2282254f343f43fb8e09798ffb56;p=grml-x.git diff --git a/grml-x b/grml-x index 8a55123..cb4c1fc 100755 --- a/grml-x +++ b/grml-x @@ -1,42 +1,121 @@ -#!/usr/bin/zsh +#!/bin/zsh # Filename: grml-x # Purpose: wrapper for startx on grml [providing new xconfiguration tool] # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Sam Aug 05 08:38:49 CEST 2006 [mika] +# Latest change: Die Sep 04 01:44:19 CEST 2007 [mika] ################################################################################ -# some zsh-stuff {{{ +# make sure /tmp is writeable {{{ + if ! [ -w /tmp ] ; then + echo 'Fatal: /tmp is not writeable. Can not resume therefore, sorry.' >&2 + exit 1 + fi +# }}} + +# debugging {{{ +# usage: DEBUG=1 grml-x ..... 2>/tmp/grml-x-debug.log if [[ $DEBUG -gt 0 ]]; then setopt xtrace fi - autoload colors ; colors - [ -r /etc/grml_colors ] && . /etc/grml_colors - [ -r /etc/grml/sh-lib ] && . /etc/grml/sh-lib +# }}} + +# functions and color {{{ + # use colors only if not booted with nocolor bootoption + if ! grep -q nocolor /proc/cmdline ; then + autoload colors ; colors + [ -r /etc/grml_colors ] && . /etc/grml_colors + fi + + # some functions like getBootParam + if [ -r /etc/grml/script-functions -a -r /etc/grml/sh-lib ] ; then + source /etc/grml/script-functions + source /etc/grml/sh-lib + else + echo 'Error: sourcing function files failed. Exiting.' + exit 1 + fi + + check4root &>/dev/null && ROOT='1' || ROOT='' +# }}} + +# set variables {{{ + PROGRAMNAME=${0##*/} + HWINFO='/usr/sbin/hwinfo' + DATE=$(date) + [ -n "$XINITRC" ] || XINITRC="$HOME/.xinitrc" + + # temporary files + HWINFO_TMP="/tmp/hwinfo.$$" + MONITORINFO="/tmp/monitorinfo.$$" + MOUSEINFO="/tmp/mouse.$$" + if [ -r /etc/sysconfig/keyboard ] ; then source /etc/sysconfig/keyboard else XKEYBOARD='us' fi + + XSERVER="Xorg" + XCONFIG='/etc/X11/xorg.conf' + KEYBOARD="# Driver \"kbd\" +# Option \"XkbRules\" \"xfree86\" +# Option \"XkbRules\" \"xorg\" +# Option \"XkbModel\" \"pc105\" +# Option \"XkbLayout\" \"${XKEYBOARD},us\" +# Option \"XkbVariant\" \"nodeadkeys\"" + + # check for font path + if [ -d /usr/share/fonts/X11 ] ; then + XFONTS=" FontPath \"/usr/share/fonts/X11/misc\" + FontPath \"/usr/share/fonts/X11/100dpi/:unscaled\" + FontPath \"/usr/share/fonts/X11/75dpi/:unscaled\" + FontPath \"/usr/share/fonts/X11/Type1\" + FontPath \"/usr/share/fonts/X11/100dpi\" + FontPath \"/usr/share/fonts/X11/75dpi\"" + fi + # /usr/X11R6/lib/X11/fonts exists nearly everywhere, assume + # /usr/X11R6/lib/X11/fonts as valid font path only if fonts.dir + # exists for "misc" + if [ -r /usr/X11R6/lib/X11/fonts/misc/fonts.dir ] ; then + XFONTS="$XFONTS + FontPath \"/usr/X11R6/lib/X11/fonts/Type1\" + FontPath \"/usr/X11R6/lib/X11/fonts/misc:unscaled\" + FontPath \"/usr/X11R6/lib/X11/fonts/misc\" + FontPath \"/usr/X11R6/lib/X11/fonts/75dpi:unscaled\" + FontPath \"/usr/X11R6/lib/X11/fonts/75dpi\" + FontPath \"/usr/X11R6/lib/X11/fonts/100dpi:unscaled\" + FontPath \"/usr/X11R6/lib/X11/fonts/100dpi\"" + fi +# }}} + +# make sure we don't leave any temp files {{{ +bailout() { + rm -f "$HWINFO_TMP" "$MONITORINFO" "$MOUSEINFO" + [ -n "$1" ] && EXIT="$1" || EXIT="1" + print "$bg[black]$fg[red]${bold_color}Exiting...${reset_color}">&2 + exit "$EXIT" +} + +trap bailout 1 2 3 15 # }}} # warn if running as user root {{{ - if [[ $UID == 0 ]] ; then - print "$bg[black]$fg[red]${bold_color}Warning: Please do not run grml-x as user root.${reset_color}" - print "$bg[black]$fg[red]${bold_color}Running grml-x as user root is *not* supported!${reset_color}" - print "$bg[black]$fg[red]${bold_color}Switch to user grml or run su - grml -c 'grml-x ...' instead.${reset_color}" - # exit -1 + if [ -n "$ROOT" ] ; then + if [ -r /etc/grml_cd ] ; then + print "$bg[black]$fg[red]${bold_color}Warning: Please do not run grml-x as user root.${reset_color}" + print "$bg[black]$fg[red]${bold_color}Running grml-x as user root is *not* supported!${reset_color}" + print "$bg[black]$fg[red]${bold_color}Switch to user grml or run su - grml -c 'grml-x ...' instead.${reset_color}" + print '' + else + print "$bg[black]$fg[red]${bold_color}Warning: Please do not run X.org as user root!${reset_color}" + print "$bg[black]$fg[red]${bold_color}As soon as you have a working $XCONFIG please use startx instead of grml-x.${reset_color}" + print '' + fi fi fstabuser=$(grep ':x:1000:' /etc/passwd) - export fstabuser=${fstabuser%%[:]*} -# }}} - -# set variables {{{ - PROGRAMNAME=${0##*/} - HWINFO='/usr/sbin/hwinfo' - DATE=$(date) - (( ${+XINITRC} )) || XINITRC="$HOME/.xinitrc" + fstabuser=${fstabuser%%[:]*} # }}} # usage information {{{ @@ -48,25 +127,24 @@ usage() Usage: $PROGRAMNAME $PROGRAMNAME [-options] windowmanager -Examples: +Usage examples: $PROGRAMNAME wmii - $PROGRAMNAME pekwm $PROGRAMNAME fluxbox + $PROGRAMNAME openbox $PROGRAMNAME -force -nostart fluxbox $PROGRAMNAME -nosynaptics fluxbox $PROGRAMNAME -nosync fluxbox $PROGRAMNAME -noddc wmii - $PROGRAMNAME -nousb fluxbox - $PROGRAMNAME -module radeon -mode 1024x768 -vsync 60 wmi - XINITRC=~/.xinitrc $PROGRAMNAME ion - $PROGRAMNAME -display 8 wmii + $PROGRAMNAME -xinerama -composite wmii + $PROGRAMNAME -module radeon -mode 1024x768 -vsync 60 openbox + XINITRC=~/.xinitrc $PROGRAMNAME openbox + $PROGRAMNAME -display 8 openbox More information on grml-x can be found in the manual page: man grml-x Report bugs, send wishes and feedback to the grml team: http://grml.org/bugs/ - contact (at) grml.org " -# $PROGRAMNAME wmi -- :8 print "${reset_color}" exit 2 } @@ -75,8 +153,7 @@ http://grml.org/bugs/ - contact (at) grml.org # writehwinfo {{{ writehwinfo() { - HWINFO_TMP="/tmp/hwinfo.$$" - if [[ $UID == 0 ]] ; then + if [ -n "$ROOT" ] ; then su - $fstabuser -c "$HWINFO > $HWINFO_TMP" else $HWINFO > $HWINFO_TMP @@ -87,7 +164,6 @@ writehwinfo() # monitor {{{ monitor() { - MONITORINFO="/tmp/monitorinfo.$$" sudo $HWINFO --monitor > $MONITORINFO } # }}} @@ -95,14 +171,100 @@ monitor() # mode {{{ mode() { + [ -r "$MONITORINFO" ] || monitor # get monitor settings modes=$(perl -e 'while () {if (/ Resolution:/) { s/.*\s+(\d+x\d+).*/$1/; print} }' < $MONITORINFO | sort -nur | perl -ne 's/\s+/ /; s/(\d+x\d+)/"$1"/; print') + + if [ -n "$XINERAMA" ] ; then + + print "$fg[green] + +Option for $fg[yellow]Xinerama$fg[green] found, please use xrandr inside X.org for your further configuration! +Trying to identify monitors now..." + + # make sure we have information from 2 monitors: + # - first one from 'hwinfo --monitor' => $MONITORINFO + # - second one from 'hwinfo --framebuffer' => $FRAMEBUFFER + FRAMEBUFFER=$(hwinfo --framebuffer | grep 'Mode 0x.* bits' | head -1) + if [ -z "$FRAMEBUFFER" ] ; then + print "$fg[red] +Fatal: could not identify two monitors - no chance to + set up multihead using Xinerama - sorry. :-( + +Please run grml-x without the -xinerama option to start +X anyway (dropping support for Xinerama of course) and +contact grml developers if you have any further useful +information. => http://grml.org/bugs/ +" + bailout 10 + fi + + # check whether we can read the $MONITORINFO file + if ! [ -r "$MONITORINFO" ] ; then + print "$fg[red] +Fatal: could not identify monitor - no chance to + set up multihead using Xinerama - sorry. :-( +" + bailout 11 + else + # Currently we only know that it works with current intel driver, + # so inform user about that: + if [[ "$MODULE" != "intel" ]] ; then + print "$fg[red] + +Warning: using a non-intel driver - trying Xinerama setup anyway. +If it worked please contact grml developers providing information +about your setup so we can adjust grml-x according! + + -> http://grml.org/contact/ + +Sleeping for 10 seconds now... Will continue then... +Just press Ctrl-C to cancel operation. +" + sleep 10 + fi + + # now calculate Virtual size for use with Xinerama + HORIZ_RES1="$(grep 'Max. Resolution:' $MONITORINFO | sed 's/ Max\. Resolution: \(.*\)x\(.*\)/\1/')" + VERIZ_RES1="$(grep 'Max. Resolution:' $MONITORINFO | sed 's/ Max\. Resolution: \(.*\)x\(.*\)/\2/')" + # it might happen that we don't have a Max Resolution in hwinfo output :-/ + # fall back to a generic value then... + # TODO: check out how to get resolution of external monitor from console + if [ -z "$HORIZ_RES1" ] ; then + HORIZ_RES1="1024" + VERIZ_RES1="768" + fi + + # get maximum of output + HORIZ_RES2="$(echo $FRAMEBUFFER | grep 'Mode 0x' | sed 's/ Mode 0x.*: \(.*\)x.*/\1/'| sort -u | head -1)" + VERIZ_RES2="$(echo $FRAMEBUFFER | grep 'Mode 0x' | sed 's/ Mode 0x.*x\(.*\) (.*/\1/' | sort -u | head -1)" + + if [ -n "$HORIZ_RES1" -a -n "$VERIZ_RES1" -a -n "$HORIZ_RES2" -a -n "$VERIZ_RES2" ] ; then + if [ "$(echo $VERIZ_RES1" - "$VERIZ_RES2 | bc -l)" -eq 0 ] ; then + VERIZ_RESULT="$VERIZ_RES1" + elif [ "$VERIZ_RES1" -gt "$VERIZ_RES2" ] ; then + VERIZ_RESULT="$VERIZ_RES1" + else + VERIZ_RESULT="$VERIZ_RES2" + fi + + HORIZ_RESULT=$(echo $HORIZ_RES1 + $HORIZ_RES2 | bc -l) + + # important: keep newline for appropriate placing below $MODES! + if [ -n "$HORIZ_RESULT" ] ; then + VIRTUAL=" + Virtual $HORIZ_RESULT $VERIZ_RES1" + fi + fi + fi + fi + if [[ -n $NODDC ]] ; then - MODES='Modes "1024x768" "800x600" "640x480" "1600x1200" "1280x1024" "1280x960"' + MODES="Modes \"1024x768\" \"800x600\" \"640x480\" \"1600x1200\" \"1280x1024\" \"1280x960\"$VIRTUAL" elif [[ "$modes" == "\"1024x768\" " || -z $modes ]] ; then - MODES='# Modes "1024x768" "800x600" "640x480" "1600x1200" "1280x1024" "1280x960"' + MODES="# Modes \"1024x768\" \"800x600\" \"640x480\" \"1600x1200\" \"1280x1024\" \"1280x960\"$VIRTUAL" else - MODES="# Modes $modes" + MODES="# Modes $modes$VIRTUAL" fi } # }}} @@ -110,7 +272,8 @@ sort -nur | perl -ne 's/\s+/ /; s/(\d+x\d+)/"$1"/; print') # sync - get hsync/vsync settings {{{ sync() { - monitor # get monitor settings + [ -r "$MONITORINFO" ] || monitor # get monitor settings + [ -r "$MONITORINFO" ] || bailout 1 vsyncval=$(awk '/Vert. Sync Range:/{print $4}' $MONITORINFO | sed 's/-/.0 - / ; s/$/.0/' | head -1) hsyncval=$(awk '/Hor. Sync Range:/{print $4}' $MONITORINFO | sed 's/-/.0 - / ; s/$/.0/' | head -1) if [ -z $vsyncval ] ; then @@ -120,25 +283,18 @@ sync() hsyncval='28.0 - 96.0' fi } -sync # }}} # mouse {{{ mouse() { - MOUSEINFO="/tmp/mouse.$$" -# if [[ $UID == 0 ]] ; then -# su - $fstabuser -c "$HWINFO --mouse > $MOUSEINFO" -# else - sudo $HWINFO --mouse > $MOUSEINFO -# fi + sudo $HWINFO --mouse > $MOUSEINFO # SynPS/2 Synaptics TouchPad if grep -q 'Device:.*Synaptics' "$MOUSEINFO" ; then if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option MOUSEDRIVER='synaptics' - # SYNMOUSE='InputDevice "Synaptics" "CorePointer"' - SYNMOUSE='InputDevice "Synaptics" "AlwaysCore"' + SYNMOUSE='InputDevice "Synaptics" # "AlwaysCore"' SYNMOUSEDETAIL=" Section \"InputDevice\" Driver \"synaptics\" @@ -173,8 +329,7 @@ EndSection if grep -q 'Device:.*ALPS' "$MOUSEINFO" ; then if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option MOUSEDRIVER='synaptics' - # SYNMOUSE='InputDevice "Synaptics" "CorePointer"' - SYNMOUSE='InputDevice "Synaptics" "AlwaysCore"' + SYNMOUSE='InputDevice "Synaptics" # "AlwaysCore"' SYNMOUSEDETAIL=" Section \"InputDevice\" Driver \"synaptics\" @@ -197,7 +352,7 @@ Section \"InputDevice\" Option \"MaxSpeed\" \"2.00\" Option \"AccelFactor\" \"0.030\" Option \"UpDownScrolling\" \"1\" - Option \"EmulateMiddleButtonTime\" \"75\" + Option \"EmulateMidButtonTime\" \"75\" Option \"CircularScrolling\" \"1\" Option \"CircScrollDelta\" \"0.1\" Option \"CircScrollTrigger\" \"8\" @@ -211,15 +366,13 @@ EndSection SYNMOUSE='# No alps touchpad detected.' fi else - SYNMOUSE='# No alps touchpad present.' + SYNMOUSE='# No synaptics/alps touchpad present.' fi fi # USB-PS/2 Optical Mouse -# if grep -q 'Device:.*USB' "$MOUSEINFO" ; then - if ! [[ -n $NOUSB ]] ; then - USB='yes' - USBMOUSE='InputDevice "USB Mouse" "CorePointer"' + if [ -n "$USE_USB" ] ; then + USBMOUSE='InputDevice "USB Mouse" "CorePointer"' USBMOUSEDETAIL=" Section \"InputDevice\" Identifier \"USB Mouse\" @@ -232,12 +385,13 @@ Section \"InputDevice\" EndSection " else - USBMOUSE='# Deactivated USB Mouse as requested.' + USBMOUSE='# InputDevice "USB Mouse" "CorePointer"' + USBMOUSEDETAIL='' fi if grep -q 'Device:.*Serial' "$MOUSEINFO" ; then SERIAL='yes' - SERMOUSE='InputDevice "Serial Mouse" "CorePointer"' + SERMOUSE='InputDevice "Serial Mouse" "CorePointer"' SERMOUSEDETAIL=" Section \"InputDevice\" Identifier \"Serial Mouse\" @@ -251,15 +405,15 @@ EndSection " else SERMOUSE='# No serial mouse detected.' + SERMOUSEDETAIL='' fi # ImExPS/2 Logitech Explorer Mouse # "PS2++ Logitech MX Mouse" - if ! [[ -n $NOPS2 ]] ; then - if grep -qE 'Device:.*PS.?2' "$MOUSEINFO" ; then - PS2='yes' - PS2MOUSE='InputDevice "PS/2 Mouse" "CorePointer"' - PS2MOUSEDETAIL=" + if [ -n "$USE_PS2" ] ; then + PS2='yes' + PS2MOUSE='InputDevice "PS/2 Mouse" "CorePointer"' + PS2MOUSEDETAIL=" Section \"InputDevice\" Identifier \"PS/2 Mouse\" Driver \"mouse\" @@ -272,34 +426,25 @@ Section \"InputDevice\" EndSection " else - PS2MOUSE='# No PS/2 mouse detected.' - PS2MOUSEDETAIL="" + PS2MOUSE='# InputDevice "PS/2 Mouse" "CorePointer"' + PS2MOUSEDETAIL='' fi - else - PS2MOUSE='# Deactivated PS/2 Mouse as requested.' - fi - if [[ -n $GENERICMOUSE ]] ; then - GENERIC='yes' - GENERICMOUSE='InputDevice "Generic Mouse" "CorePointer"' - GENERICMOUSEDETAIL=" -Section \"InputDevice\" - Identifier \"Generic Mouse\" - Driver \"mouse\" - Option \"Device\" \"/dev/input/mice\" - Option \"Protocol\" \"auto\" - Option \"Buttons\" \"5\" - Option \"ZAxisMapping\" \"4 5\" -EndSection + EVDEV_MOUSE=" +# Section \"InputDevice\" +# Identifier \"Generic Mouse\" +# Driver \"evdev\" +# Option \"Device\" \"/dev/input/mice\" +# Option \"Protocol\" \"auto\" +# Option \"ZAxisMapping\" \"4 5\" +# Option \"Buttons\" \"5\" +# Option \"SendCoreEvents\" \"true\" +# EndSection " - else - GENERICMOUSE='# No generic mouse configured.' - fi MOUSE=" $USBMOUSE $PS2MOUSE $SYNMOUSE - $GENERICMOUSE $SERMOUSE" } # }}} @@ -307,22 +452,30 @@ EndSection # commandline parsing {{{ parse_options() { - # default values - #o_xserver=(-xserver XFree86) - #o_hsync=(-hsync '28.0 - 96.0') - #o_vsync=(-vsync '50.0 - 60.0') - - zparseopts -K -- xserver:=o_xserver module:=o_module help=o_help noddc=o_noddc nosync=o_nosync \ + zparseopts -K -- module:=o_module help=o_help noddc=o_noddc nosync=o_nosync \ vsync:=o_vsync hsync:=o_hsync mode:=o_mode force=o_force display:=o_display \ nostart=o_nostart nodpms=o_nodpms nosynaptics=o_nosynaptics nousb=o_nousb \ - nops2=o_nops2 genmouse=o_genmouse novref=o_novref nohsync=o_nohsync + nops2=o_nops2 genmouse=o_genmouse novref=o_novref nohsync=o_nohsync \ + fallback=o_fallback usb=o_usb ps2=o_ps2 composite=o_composite \ + xinerama=o_xinerama if [[ $# == 0 || "$o_help" != "" || "$1" == '-h' || "$1" == '--help' ]]; then usage fi if [[ "$o_force" != "" ]]; then - FORCE="yes" + FORCE='yes' + fi + + if [[ "$o_fallback" != "" ]]; then + FALLBACK="yes" + if [ -r /etc/X11/xorg.conf.example ] ; then + sudo cp /etc/X11/xorg.conf.example $XCONFIG + print "$bold_color$fg[blue]Copying /etc/X11/xorg.conf.example to $XCONFIG as requested via fallback option." + else + echo 'Error: /etc/X11/xorg.conf.example not readable, exiting.' + exit 1 + fi fi if [[ "$o_nodpms" != "" ]]; then @@ -343,16 +496,20 @@ parse_options() FORCE="yes" fi - if [[ "$o_xserver" != "" ]]; then - FORCE="yes" + if [[ "$o_nousb" != "" ]]; then + echo 'Warning: option -nousb is deprecated.'>&2 fi - if [[ "$o_nousb" != "" ]]; then - NOUSB='yes' + if [[ "$o_usb" != "" ]]; then + USE_USB='yes' fi if [[ "$o_nops2" != "" ]]; then - NOPS2='yes' + echo 'Warning: optino -nops2 is deprecated˙'>&2 + fi + + if [[ "$o_ps2" != "" ]]; then + USE_PS2='yes' fi if [[ "$o_genmouse" != "" ]]; then @@ -370,131 +527,122 @@ parse_options() fi DISPLAY=$o_display[2] - if [ -z $o_hsync ] ; then - o_hsync=(-hsync "$hsyncval") - HSYNC=$o_hsync[2] - HORIZSYNC=" HorizSync $HSYNC" - else - o_hsync=(-hsync "$o_hsync[2]") - HSYNC=$o_hsync[2] - HORIZSYNC=" HorizSync $HSYNC" - fi - if [ -z $o_vsync ] ; then - o_vsync=(-vsync "$vsyncval") - VSYNC=$o_vsync[2] - VERTISYNC=" VertRefresh $VSYNC" - else - o_vsync=(-vsync "$o_vsync[2]") - VSYNC=$o_vsync[2] - VERTISYNC=" VertRefresh $VSYNC" - fi + eval WINDOWMANAGER=\${$#} - if [[ "$o_nosync" != "" ]]; then - HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nosync option of grml-x" - VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -nosync option of grml-x" - fi - if [[ "$o_nohsync" != "" ]]; then - HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nohsync option of grml-x" - fi - if [[ "$o_novref" != "" ]]; then - VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -novref option of grml-x" + if [[ "$XKEYBOARD" == de ]] ; then + KEYBOARD="$KEYBOARD +# Option \"XkbVariant\" \"nodeadkeys\"" fi - eval WINDOWMANAGER=\${$#} + if [ -n "$FORCE" -o ! -r "$XCONFIG" -a -z "$FALLBACK" ] ; then + print -n "$bold_color$fg[blue]Gathering hardware information...$fg[red]" - XSERVER=$o_xserver[2] - if [[ -n $(X -version 2>&1| grep XFree86) || "$XSERVER" == XFree86 ]] ; then - XSERVER="XFree86" - XCONFIG='/etc/X11/XF86Config-4' - KEYBOARD="Driver \"keyboard\" - Option \"XkbRules\" \"xfree86\" - Option \"XkbModel\" \"pc105\" - Option \"XkbLayout\" \"${XKEYBOARD}\" - #Option \"XkbVariant\" \"nodeadkeys\"" - elif [[ -n $(X -version 2>&1 | grep -e 'X\.Org' -e 'Version 7\.') || "$XSERVER" == Xorg ]] ; then - XSERVER="Xorg" - XCONFIG='/etc/X11/xorg.conf' - KEYBOARD="Driver \"kbd\" - #Option \"XkbRules\" \"xfree86\" - Option \"XkbRules\" \"xorg\" - Option \"XkbModel\" \"pc105\" - Option \"XkbLayout\" \"${XKEYBOARD}\" - #Option \"XkbVariant\" \"nodeadkeys\"" - fi + sync # get hsync/vsync - # check for font path - if [ -d /usr/share/fonts/X11 ] ; then - XFONTS=" FontPath \"/usr/share/fonts/X11/misc\" - FontPath \"/usr/share/fonts/X11/cyrillic\" - FontPath \"/usr/share/fonts/X11/100dpi/:unscaled\" - FontPath \"/usr/share/fonts/X11/75dpi/:unscaled\" - FontPath \"/usr/share/fonts/X11/Type1\" - FontPath \"/usr/share/fonts/X11/100dpi\" - FontPath \"/usr/share/fonts/X11/75dpi\"" - fi - if [ -d /usr/X11R6/lib/X11/fonts ] ; then - XFONTS="$XFONTS - FontPath \"/usr/X11R6/lib/X11/fonts/misc:unscaled\" - FontPath \"/usr/X11R6/lib/X11/fonts/misc\" - FontPath \"/usr/X11R6/lib/X11/fonts/75dpi:unscaled\" - FontPath \"/usr/X11R6/lib/X11/fonts/75dpi\" - FontPath \"/usr/X11R6/lib/X11/fonts/100dpi:unscaled\" - FontPath \"/usr/X11R6/lib/X11/fonts/100dpi\"" - fi + if [ -z "$o_hsync" ] ; then + o_hsync=(-hsync "$hsyncval") + HSYNC=$o_hsync[2] + HORIZSYNC=" HorizSync $HSYNC" + else + o_hsync=(-hsync "$o_hsync[2]") + HSYNC=$o_hsync[2] + HORIZSYNC=" HorizSync $HSYNC" + fi - if [[ "$XKEYBOARD" == de ]] ; then - KEYBOARD="$KEYBOARD - Option \"XkbVariant\" \"nodeadkeys\"" - fi + if [ -z "$o_vsync" ] ; then + o_vsync=(-vsync "$vsyncval") + VSYNC=$o_vsync[2] + VERTISYNC=" VertRefresh $VSYNC" + else + o_vsync=(-vsync "$o_vsync[2]") + VSYNC=$o_vsync[2] + VERTISYNC=" VertRefresh $VSYNC" + fi - print -n "$bold_color$fg[blue]Gathering hardware information: $fg[red]" + if [[ "$o_nosync" != "" ]]; then + HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nosync option of grml-x" + VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -nosync option of grml-x" + fi - writehwinfo - MONITOR=$(awk '/monitor.1:/{print $3}' $HWINFO_TMP) - if [[ $MONITOR != 'ddc' ]] ; then - NODDC=yes - fi - MODULE=$o_module[2] - if [ -z $MODULE ] ; then - MODULE="$(getBootParam xmodule 2>/dev/null)" + if [[ "$o_nohsync" != "" ]]; then + HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nohsync option of grml-x" + fi + + if [[ "$o_novref" != "" ]]; then + VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -novref option of grml-x" + fi + + if [[ "$o_xinerama" != "" ]]; then + XINERAMA=1 + fi + + if [[ "$o_composite" != "" ]]; then + COMPOSITE="Section \"Extensions\" + Option \"Composite\" \"Enable\" +EndSection" + else + COMPOSITE="#Section \"Extensions\" +# Option \"Composite\" \"Enable\" +#EndSection" + fi + + # write hwinfo stuff + writehwinfo + + # monitor stuff + [ -r "$HWINFO_TMP" ] || bailout 1 + MONITOR=$(awk '/monitor.1:/{print $3}' $HWINFO_TMP) + [[ $MONITOR != 'ddc' ]] && NODDC=yes + + # module handling + MODULE=$o_module[2] if [ -z "$MODULE" ] ; then - MODULE=$(grep 'XFree86 v4 Server Module:' "${HWINFO_TMP}" | head -1 | awk '{print $5}') - if [ -z "$MODULE" ] ; then - MODULE='vesa' + MODULE="$(getBootParam xmodule 2>/dev/null)" + if [ -z "$MODULE" ] ; then + MODULE=$(grep 'XFree86 v4 Server Module:' "${HWINFO_TMP}" | head -1 | awk '{print $5}') + if [ -z "$MODULE" ] ; then + MODULE='vesa' + fi + # hwinfo >=13.28 reports driver 'intel' instead of i810 + if [[ "$MODULE" == 'intel' ]] ; then + [ -r /usr/lib/xorg/modules/drivers/intel_drv.so ] || MODULE='i810' + fi fi + else + FORCE="yes" fi - else - FORCE="yes" - fi - mouse # get mouse settings - VGA=$(lspci | grep VGA | sed 's/.*compatible controller: //' | head -1) + mouse # get mouse settings + VGA=$(lspci | grep VGA | sed 's/.*compatible controller: //' | head -1) - MODE=$o_mode[2] - if [ -z $MODE ] ; then - mode # get available modes - else - MODES="Modes \"$MODE\"" - FORCE="yes" - fi + MODE=$o_mode[2] + if [ -z $MODE ] ; then + B_MODE="$(getBootParam xmode 2>/dev/null)" + if [ -n "$B_MODE" ] ; then + MODES="Modes \"$B_MODE\"" + FORCE="yes" + fi + if [ -z "$MODES" ] ; then + mode # get available modes + fi + else + MODES="Modes \"$MODE\"" + FORCE="yes" + fi - print "$fg[green]done$reset_color" - - - print "$bg[black]$fg[white]$bold_color" - print "$fg[green]Specified windowmanager is $fg[yellow]$WINDOWMANAGER" - print "$fg[green]Video is $fg[yellow]$VGA$fg[green] using $bg[black]$fg[yellow]${XSERVER}$fg[cyan](${MODULE})$fg[green] Server" - [[ -z $HSYNC ]] && [[ -z $VSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR" - [[ -z $HSYNC ]] && [[ -n $VSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], VSYNC: $fg[yellow]$VSYNC" - [[ -z $VSYNC ]] && [[ -n $HSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], HSYNC: $fg[yellow]$HSYNC" - [[ -n $VSYNC ]] && [[ -n $HSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], HSYNC: $fg[yellow]$HSYNC $fg[green]VSYNC: $fg[yellow]$VSYNC" - [[ -n $modes ]] && print "$fg[green]Using default X.org modes." - [[ -z $modes ]] && print "$fg[green]Using Mode: $fg[yellow]$MODE" -# [[ -n $MODE ]] && print "$fg[green]Using Mode: $fg[yellow]$MODE" -# [[ -z $MODE ]] && print "$fg[green]Using default modes." - print "${reset_color}" -# if [[ $module[1] != ./. ]]; then module="$PWD/$module"; fi + print "$fg[green]done$reset_color" + print "$bg[black]$fg[white]$bold_color" + print "$fg[green]Specified windowmanager is $fg[yellow]$WINDOWMANAGER" + print "$fg[green]Video is $fg[yellow]$VGA$fg[green] using $bg[black]$fg[yellow]${XSERVER}$fg[cyan](${MODULE})$fg[green] Server" + [[ -z $HSYNC ]] && [[ -z $VSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR" + [[ -z $HSYNC ]] && [[ -n $VSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], VSYNC: $fg[yellow]$VSYNC" + [[ -z $VSYNC ]] && [[ -n $HSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], HSYNC: $fg[yellow]$HSYNC" + [[ -n $VSYNC ]] && [[ -n $HSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], HSYNC: $fg[yellow]$HSYNC $fg[green]VSYNC: $fg[yellow]$VSYNC" + [[ -n $modes ]] && print "$fg[green]Using default X.org modes." + [[ -z $modes ]] && print "$fg[green]Using Mode: $fg[yellow]$MODE" + print "${reset_color}" + fi } parse_options $* # }}} @@ -504,7 +652,7 @@ requirements() { if ! [ -x $(which hwinfo) ] ; then print "$bg[black]$fg[red]${bold_color}Error: hwinfo not found in path.${reset_color} -Note: run 'apt-get install hwinfo' on systems running debian. +Note: run 'aptitude install hwinfo' on systems running debian. Exiting.${reset_color}" exit -1 fi @@ -534,11 +682,14 @@ cat << EOX # /usr/share/doc/xserver-xorg/ and # http://wiki.x.org/wiki/Home and # http://ftp.x.org/pub/X11R7.0/doc/html/index.html for information on Xorg -# /usr/share/doc/xfree86-common/ for information on XFree86 +# # Refer to the xorg.conf man page and to # http://ftp.x.org/pub/X11R7.0/doc/html/xorg.conf.5.html # for details about the format of this file. -# +# +# See http://wiki.debian.org/XStrikeForce/FAQ for information +# regarding Xorg packages within Debian. +# # If you would like this file to be automatically reconfigured by debian, # run the following command: # sudo dpkg-reconfigure -phigh xserver-xorg @@ -547,7 +698,8 @@ cat << EOX Section "ServerLayout" Identifier "XServer Configured" Screen 0 "Screen0" 0 0 - InputDevice "Keyboard0" "CoreKeyboard" + # InputDevice "Keyboard0" "CoreKeyboard" + # InputDevice "Generic Mouse" "CorePointer" $MOUSE EndSection @@ -559,52 +711,35 @@ Section "ServerFlags" EndSection Section "Files" -# RgbPath "/usr/X11R6/lib/X11/rgb" -# ModulePath "/usr/X11R6/lib/modules" -# More information: http://ftp.x.org/pub/X11R7.0/doc/html/fonts.html + # More information: http://ftp.x.org/pub/X11R7.0/doc/html/fonts.html $XFONTS -# check: -# FontPath "/usr/X11R6/lib/X11/fonts/Speedo" -# FontPath "/usr/X11R6/lib/X11/fonts/PEX" -# FontPath "/usr/X11R6/lib/X11/fonts/encodings" -# FontPath "/usr/X11R6/lib/X11/fonts/Type1 -# FontPath "/usr/X11R6/lib/X11/fonts/util -# Additional fonts: Locale, Gimp, TTF... -# FontPath "/usr/X11R6/lib/X11/fonts/cyrillic" -# FontPath "/usr/X11R6/lib/X11/fonts/latin2/75dpi" -# FontPath "/usr/X11R6/lib/X11/fonts/latin2/100dpi" -# True type and type1 fonts are also handled via xftlib, see /etc/X11/XftConfig! - FontPath "/usr/X11R6/lib/X11/fonts/Type1" - FontPath "/usr/share/fonts/ttf/western" - FontPath "/usr/share/fonts/ttf/decoratives" -# FontPath "/usr/share/fonts/truetype" -# FontPath "/usr/share/fonts/truetype/openoffice" + # FontPath "/usr/share/fonts/ttf/western" + # FontPath "/usr/share/fonts/ttf/decoratives" FontPath "/usr/share/fonts/truetype/ttf-bitstream-vera" -# FontPath "/usr/share/fonts/truetype/latex-xft-fonts" FontPath "/usr/share/fonts/latex-ttf-fonts" FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" -# FontPath "/usr/X11R6/lib/X11/fonts/defoma/TrueType" -# FontPath "/usr/X11R6/lib/X11/fonts/defoma/CID" EndSection -# Modules - see /usr/X11R6/lib/modules/fonts and /usr/X11R6/lib/modules/extensions +# Modules - see /usr/lib/xorg/modules/fonts and /usr/lib/xorg/modules/extensions Section "Module" Load "dbe" # double buffer extension Load "dri" # direct rendering - Load "glx" # 3D layer - Load "type1" # font module - Load "freetype" # font rendering + Load "glx" # 3D layer / GLX extension + Load "type1" # type1 font module + Load "freetype" # freetype fonts rendering Load "extmod" # some commonly used server extensions (e.g. shape extension) Load "record" # recording extension + Load "evdev" # generic input handling driver on Linux + Load "xtrap" # X Trap extension # Load "vbe" # Vesa BIOS Extension - # Load "ddc" # ddc probing of monitor - # Load "bitmap" # bitmap fonts - # Load "GLcore" # render OpenGL in software # Load "i2c" # I2C bus # Load "int10" # initialize graphics cards via int10 call to the BIOS - # Load "speedo" # font module # Load "v4l" # Video for Linux - # Load "evdev" # generic input handling driver on Linux + ## Deprecated/unneeded modules with Xorg >=7.0: + # Load "speedo" # font module (does not exist anymore) + # Load "ddc" # ddc probing of monitor (automatically loaded) + # Load "GLcore" # render OpenGL in software (automatically loaded) + # Load "bitmap" # bitmap fonts (automatically loaded) # Valid entries - see /usr/lib/xorg/modules/[extensions/] # afb bitmap cfb cfb16 cfb24 cfb32 cw damage dbe ddc dri drm extmod fb # fbdevhw freetype GLcore glx i2c int10 int10 layer mfb pcidata rac ramdac @@ -617,18 +752,15 @@ EndSection # Or if you just want both to be control, use: # Option "XkbOptions" "ctrl:nocaps" # More information: http://ftp.x.org/pub/X11R7.0/doc/html/XKB-Config.html -Section "InputDevice" - Identifier "Keyboard0" - Option "CoreKeyboard" - $KEYBOARD -EndSection +# Section "InputDevice" +# Identifier "Keyboard0" +# Option "CoreKeyboard" +# $KEYBOARD +# # Option "XkbOptions" "ctrl:swapcaps,grp:alt_shift_toggle,grp_led:scroll,compose:menu" +# EndSection # More information: http://ftp.x.org/pub/X11R7.0/doc/html/mouse.html -$GENERICMOUSEDETAIL -$USBMOUSEDETAIL -$PS2MOUSEDETAIL -$SERMOUSEDETAIL -$SYNMOUSEDETAIL +${USBMOUSEDETAIL}${PS2MOUSEDETAIL}${SERMOUSEDETAIL}${SYNMOUSEDETAIL}${EVDEV_MOUSE} Section "Monitor" Identifier "Monitor0" # ModelName "Old Monitor (no DDC)" @@ -658,11 +790,11 @@ Section "Device" # Option "RenderAccel" "true" # Option "AllowGLXWithComposite" "true" Identifier "Card0" -# The following line is auto-generated by grml-x + # The following line is auto-generated by grml-x Driver "$MODULE" VendorName "All" BoardName "All" - ## Workaround for drivers which send output to wrong device: + ## Workaround for drivers (for example radeon) which might send output to wrong device: # Option "MonitorLayout" "LVDS, AUTO" # Option "MonitorLayout" "LVDS, CRT" # Option "MonitorLayout" "NONE, STV" @@ -706,13 +838,13 @@ Section "Screen" EndSubSection EndSection +# Make sure you have the relevant Debian packages on your system +# to be able to use DRI (libgl1-mesa-dri for example) Section "DRI" Mode 0666 EndSection -#Section "Extensions" -# Option "Composite" "Enable" -#EndSection +$COMPOSITE ## END OF FILE ################################################################# EOX @@ -723,6 +855,12 @@ EOX writeit() { XCONFTMP="/tmp/xconfig.$$" xconfig > $XCONFTMP + # we do not want to have two CorePointers, deactivate one therefore + if grep -Eq '^[[:space:]]+InputDevice[ ]+"USB Mouse"[ ]+"CorePointer"' $XCONFTMP ; then + if grep -Eq '^[[:space:]]+InputDevice[ ]+"PS/2 Mouse"[ ]+"CorePointer"' $XCONFTMP ; then + sed -i 's|InputDevice.*PS/2.*CorePointer|# & # deactivated to avoid two CorePointers|' $XCONFTMP + fi + fi [ -f $XCONFIG ] && sudo mv -f $XCONFIG $XCONFIG.old sudo mv $XCONFTMP $XCONFIG sudo chown root.root $XCONFIG @@ -737,13 +875,15 @@ function writeconfig print -n "$bold_color$fg[blue]Creating $XCONFIG: $fg[red]" writeit && print "$fg[green]done$reset_color" else - print "$bold_color$fg[blue]Notice: $XCONFIG exists already. + if [ -z "$FORCE" -a -z "$FALLBACK" ] ; then + print "$bold_color$fg[blue]Notice: $XCONFIG exists already. Use the force-option (-force) to force creation. $fg[red]" + fi fi if [[ -n "$FORCE" ]] ; then - print "$bold_color$fg[blue]Force-switch or manual option(s) detected -" - print -n "moving eventual existing $XCONFIG to ${XCONFIG}.old: $fg[red]" + print "$bold_color$fg[blue]Force-switch or manual option(s) detected:" + print -n "\-> Moving eventual existing $XCONFIG to ${XCONFIG}.old: $fg[red]" writeit && print "$fg[green]done$reset_color" fi } @@ -753,7 +893,7 @@ $fg[red]" function runit { writeconfig - if [ -z $NOSTART ] ; then + if [ -z "$NOSTART" ] ; then print "$reset_color" if [ -x /etc/init.d/xorg-common ] ; then sudo /etc/init.d/xorg-common start @@ -763,15 +903,15 @@ function runit fi fi print "" - if [ -z $DISPLAY ] ; then + if [ -z "$DISPLAY" ] ; then print "$bold_color$fg[green]Now trying to run startx.$reset_color" - startx ~/.xinitrc -- $XOPTS + startx $XINITRC -- $XOPTS else print "$bold_color$fg[green]Now trying to run startx on display $DISPLAY.$reset_color" - startx ~/.xinitrc -- :$DISPLAY $XOPTS + startx $XINITRC -- :$DISPLAY $XOPTS fi else - print "$bold_color$fg[blue]Not running startx as requested as option.$reset_color" + print "$bold_color$fg[blue]Not running startx as requested via option.$reset_color" fi return 1 } @@ -781,23 +921,22 @@ function runit function failed { print "$fg[red]" - if [ $UID != 0 ] ; then + if [ -z "$ROOT" ] ; then if [[ $(tty) == /dev/pts/* ]] ; then print "It seems you are running $PROGRAMNAME from inside GNU screen. Notice that this might fail if running as user grml! Please exit screen and try to run $PROGRAMNAME again." fi fi - print " -Problems? Run the following commands for getting information on your hardware: + print "Run the following commands for getting information on your hardware: hwinfo --gfxcard discover -v --data-path=xfree86/server/device/driver display xdebconfigurator -c -d -i -x get-edid | parse-edid Do you want to go the debian way of life? Run: - apt-get install x-window-system-core read-edid mdetect hwinfo xdebconfigurator - dpkg-reconfigure x-window-system-core (or xserver-xfree86 or xserver-xorg depending on your system) + aptitude install xorg read-edid mdetect hwinfo xdebconfigurator + dpkg-reconfigure -phigh xserver-xorg Problems with the module used for X? Try to load another one or fall back to module vesa: @@ -821,6 +960,12 @@ Want to adjust the resolution? Use the mode-switch: $PROGRAMNAME -mode 1024x768 ... $PROGRAMNAME -mode '1280x1024 1024x768' ... +Problems? Use vesa with resolution 1024x768: + $PROGRAMNAME -module vesa -mode 1024x768 ... + +Still problems with X? Use the fallback option: + $PROGRAMNAME -fallback ... + To adjust resolution while running X execute: xrandr -s '1024x768' @@ -845,7 +990,11 @@ cleanup # }}} # xinitrc {{{ - if [ -w $XINITRC ] ; then + if ! [ -x "$(which $WINDOWMANAGER)" ] ; then + print "$bg[black]$fg[red]${bold_color}Fatal: windowmanager $fg[blue]$WINDOWMANAGER$fg[red] not executable, startx will not work.${reset_color}">&2 + bailout + fi + if [ -w "$XINITRC" ] ; then sed -i "s|^[^#]*exec.*| exec $WINDOWMANAGER|g" $XINITRC runit || failed else @@ -855,4 +1004,4 @@ cleanup # }}} ## END OF FILE ################################################################# -# vim:foldmethod=marker +# vim:foldmethod=marker expandtab ai ft=zsh