X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=grml-x;h=c36b04daaa29a32fa6a80a21715c599e91c8772c;hb=3256f1f7cbead262acc175f37e80bbcd8d4225c5;hp=cce459578b6b36cc7b2d22548c376329fd51e4ee;hpb=a7b536f5cee5b88cc8fb87a005b2b4bb3e49f3ac;p=grml-x.git diff --git a/grml-x b/grml-x index cce4595..c36b04d 100755 --- a/grml-x +++ b/grml-x @@ -4,7 +4,6 @@ # 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: Don Jul 12 01:20:47 CEST 2007 [mika] ################################################################################ # debugging {{{ @@ -40,9 +39,16 @@ [ -n "$XINITRC" ] || XINITRC="$HOME/.xinitrc" # temporary files - HWINFO_TMP="/tmp/hwinfo.$$" - MONITORINFO="/tmp/monitorinfo.$$" - MOUSEINFO="/tmp/mouse.$$" + # notice: we need the unsafe option, otherwise users other than root + # can not write to HWINFO_TMP, but we don't want to run hwinfo as root + HWINFO_TMP="$(mktemp -u)" || exit 1 + MONITORINFO="$(mktemp)" || exit 1 + MOUSEINFO="$(mktemp)" || exit 1 + + if [ -z "$HWINFO_TMP" ] ; then + echo "Fatal: could not create temporary file. Exiting.">&2 + bailout 1 + fi if [ -r /etc/sysconfig/keyboard ] ; then source /etc/sysconfig/keyboard @@ -120,17 +126,17 @@ usage() Usage: $PROGRAMNAME $PROGRAMNAME [-options] windowmanager -Examples: - $PROGRAMNAME wmii - $PROGRAMNAME pekwm +Usage examples: + $PROGRAMNAME fluxbox $PROGRAMNAME fluxbox $PROGRAMNAME -force -nostart fluxbox $PROGRAMNAME -nosynaptics fluxbox $PROGRAMNAME -nosync fluxbox - $PROGRAMNAME -noddc wmii - $PROGRAMNAME -module radeon -mode 1024x768 -vsync 60 wmi - XINITRC=~/.xinitrc $PROGRAMNAME ion - $PROGRAMNAME -display 8 wmii + $PROGRAMNAME -noddc fluxbox + $PROGRAMNAME -xinerama -composite fluxbox + $PROGRAMNAME -module radeon -mode 1024x768 -vsync 60 fluxbox + XINITRC=~/.xinitrc $PROGRAMNAME fluxbox + $PROGRAMNAME -display 8 fluxbox More information on grml-x can be found in the manual page: man grml-x @@ -174,23 +180,6 @@ sort -nur | perl -ne 's/\s+/ /; s/(\d+x\d+)/"$1"/; print') Option for $fg[yellow]Xinerama$fg[green] found, please use xrandr inside X.org for your further configuration! Trying to identify monitors now..." - # 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 # FIXME - fi - # make sure we have information from 2 monitors: # - first one from 'hwinfo --monitor' => $MONITORINFO # - second one from 'hwinfo --framebuffer' => $FRAMEBUFFER @@ -200,9 +189,10 @@ Just press Ctrl-C to cancel operation. Fatal: could not identify two monitors - no chance to set up multihead using Xinerama - sorry. :-( -Please run grml-x without the -xinerama option and contact -grml developers if you have any further useful information. - => http://grml.org/bugs/ +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 @@ -215,15 +205,40 @@ Fatal: could not identify monitor - no chance to " 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 - HORIZ_RES2="$(echo $FRAMEBUFFER | sed 's/ Mode 0x.*: \(.*\)x.*/\1/')" - VERIZ_RES2="$(echo $FRAMEBUFFER | sed 's/ Mode 0x.*x\(.*\) (.*/\1/')" + # 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" ] ; then - if [ $(echo $VERIZ_RES1 - $VERIZ_RES2 | bc -l) -eq 0 ] ; then + 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" @@ -256,6 +271,7 @@ Fatal: could not identify monitor - no chance to sync() { [ -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 @@ -276,7 +292,7 @@ mouse() if grep -q 'Device:.*Synaptics' "$MOUSEINFO" ; then if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option MOUSEDRIVER='synaptics' - SYNMOUSE='InputDevice "Synaptics" "AlwaysCore"' + SYNMOUSE='InputDevice "Synaptics" # "AlwaysCore"' SYNMOUSEDETAIL=" Section \"InputDevice\" Driver \"synaptics\" @@ -311,7 +327,7 @@ EndSection if grep -q 'Device:.*ALPS' "$MOUSEINFO" ; then if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option MOUSEDRIVER='synaptics' - SYNMOUSE='InputDevice "Synaptics" "AlwaysCore"' + SYNMOUSE='InputDevice "Synaptics" # "AlwaysCore"' SYNMOUSEDETAIL=" Section \"InputDevice\" Driver \"synaptics\" @@ -573,6 +589,7 @@ EndSection" writehwinfo # monitor stuff + [ -r "$HWINFO_TMP" ] || bailout 1 MONITOR=$(awk '/monitor.1:/{print $3}' $HWINFO_TMP) [[ $MONITOR != 'ddc' ]] && NODDC=yes @@ -633,7 +650,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 @@ -663,10 +680,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 +# # 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 @@ -677,13 +698,14 @@ Section "ServerLayout" Screen 0 "Screen0" 0 0 # InputDevice "Keyboard0" "CoreKeyboard" # InputDevice "Generic Mouse" "CorePointer" + Option "AutoAddDevices" "off" # do not depend on running dbus/hal $MOUSE EndSection Section "ServerFlags" Option "AllowMouseOpenFail" "true" # allows the server to start up even if the mouse does not work Option "DontVTSwitch" "false" # allow switching between virtual terminal - # Option "DontZap" "true" # disable (server abort) + Option "DontZap" "false" # enable (server abort) # Option "DontZoom" "true" # disable / (resolution switching) EndSection @@ -697,7 +719,7 @@ $XFONTS FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" 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 @@ -707,6 +729,7 @@ Section "Module" 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 "i2c" # I2C bus # Load "int10" # initialize graphics cards via int10 call to the BIOS @@ -829,7 +852,7 @@ EOX # writeit {{{ writeit() { - XCONFTMP="/tmp/xconfig.$$" + XCONFTMP="$(mktemp)" xconfig > $XCONFTMP # we do not want to have two CorePointers, deactivate one therefore if grep -Eq '^[[:space:]]+InputDevice[ ]+"USB Mouse"[ ]+"CorePointer"' $XCONFTMP ; then @@ -869,6 +892,11 @@ $fg[red]" function runit { writeconfig + if [ "$(readlink /etc/X11/X)" = /bin/true ] ; then + print "$bold_color$fg[red]Fatal: /etc/X11/X is a symlink to /bin/true." + print "Fix it via running 'ln -sf /usr/bin/Xorg /etc/X11/X'" + exit 10 + fi if [ -z "$NOSTART" ] ; then print "$reset_color" if [ -x /etc/init.d/xorg-common ] ; then @@ -882,14 +910,15 @@ function runit if [ -z "$DISPLAY" ] ; then print "$bold_color$fg[green]Now trying to run startx.$reset_color" startx $XINITRC -- $XOPTS + return 1 else print "$bold_color$fg[green]Now trying to run startx on display $DISPLAY.$reset_color" startx $XINITRC -- :$DISPLAY $XOPTS + return 1 fi else print "$bold_color$fg[blue]Not running startx as requested via option.$reset_color" fi - return 1 } # }}} @@ -911,8 +940,8 @@ Please exit screen and try to run $PROGRAMNAME again." 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-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: @@ -967,7 +996,7 @@ cleanup # xinitrc {{{ if ! [ -x "$(which $WINDOWMANAGER)" ] ; then - print "$bg[black]$fg[red]${bold_color}Fatal: windowmanager $fg[blue]$WINDOWMANAGER$fg[red] not executable, startx won' work.${reset_color}">&2 + 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