3 # Purpose: wrapper for startx on grml [providing new xconfiguration tool]
4 # Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports: see http://grml.org/bugs/
6 # License: This file is licensed under the GPL v2.
7 # Latest change: Die Sep 04 01:44:19 CEST 2007 [mika]
8 ################################################################################
10 # make sure /tmp is writeable {{{
11 if ! [ -w /tmp ] ; then
12 echo 'Fatal: /tmp is not writeable. Can not resume therefore, sorry.' >&2
18 # usage: DEBUG=1 grml-x ..... 2>/tmp/grml-x-debug.log
19 if [[ $DEBUG -gt 0 ]]; then
24 # functions and color {{{
25 # use colors only if not booted with nocolor bootoption
26 if ! grep -q nocolor /proc/cmdline ; then
27 autoload colors ; colors
28 [ -r /etc/grml_colors ] && . /etc/grml_colors
31 # some functions like getBootParam
32 if [ -r /etc/grml/script-functions -a -r /etc/grml/sh-lib ] ; then
33 source /etc/grml/script-functions
34 source /etc/grml/sh-lib
36 echo 'Error: sourcing function files failed. Exiting.'
40 check4root &>/dev/null && ROOT='1' || ROOT=''
45 HWINFO='/usr/sbin/hwinfo'
47 [ -n "$XINITRC" ] || XINITRC="$HOME/.xinitrc"
50 HWINFO_TMP="/tmp/hwinfo.$$"
51 MONITORINFO="/tmp/monitorinfo.$$"
52 MOUSEINFO="/tmp/mouse.$$"
54 if [ -r /etc/sysconfig/keyboard ] ; then
55 source /etc/sysconfig/keyboard
61 XCONFIG='/etc/X11/xorg.conf'
62 KEYBOARD="# Driver \"kbd\"
63 # Option \"XkbRules\" \"xfree86\"
64 # Option \"XkbRules\" \"xorg\"
65 # Option \"XkbModel\" \"pc105\"
66 # Option \"XkbLayout\" \"${XKEYBOARD},us\"
67 # Option \"XkbVariant\" \"nodeadkeys\""
70 if [ -d /usr/share/fonts/X11 ] ; then
71 XFONTS=" FontPath \"/usr/share/fonts/X11/misc\"
72 FontPath \"/usr/share/fonts/X11/100dpi/:unscaled\"
73 FontPath \"/usr/share/fonts/X11/75dpi/:unscaled\"
74 FontPath \"/usr/share/fonts/X11/Type1\"
75 FontPath \"/usr/share/fonts/X11/100dpi\"
76 FontPath \"/usr/share/fonts/X11/75dpi\""
78 # /usr/X11R6/lib/X11/fonts exists nearly everywhere, assume
79 # /usr/X11R6/lib/X11/fonts as valid font path only if fonts.dir
81 if [ -r /usr/X11R6/lib/X11/fonts/misc/fonts.dir ] ; then
83 FontPath \"/usr/X11R6/lib/X11/fonts/Type1\"
84 FontPath \"/usr/X11R6/lib/X11/fonts/misc:unscaled\"
85 FontPath \"/usr/X11R6/lib/X11/fonts/misc\"
86 FontPath \"/usr/X11R6/lib/X11/fonts/75dpi:unscaled\"
87 FontPath \"/usr/X11R6/lib/X11/fonts/75dpi\"
88 FontPath \"/usr/X11R6/lib/X11/fonts/100dpi:unscaled\"
89 FontPath \"/usr/X11R6/lib/X11/fonts/100dpi\""
93 # make sure we don't leave any temp files {{{
95 rm -f "$HWINFO_TMP" "$MONITORINFO" "$MOUSEINFO"
96 [ -n "$1" ] && EXIT="$1" || EXIT="1"
97 print "$bg[black]$fg[red]${bold_color}Exiting...${reset_color}">&2
101 trap bailout 1 2 3 15
104 # warn if running as user root {{{
105 if [ -n "$ROOT" ] ; then
106 if [ -r /etc/grml_cd ] ; then
107 print "$bg[black]$fg[red]${bold_color}Warning: Please do not run grml-x as user root.${reset_color}"
108 print "$bg[black]$fg[red]${bold_color}Running grml-x as user root is *not* supported!${reset_color}"
109 print "$bg[black]$fg[red]${bold_color}Switch to user grml or run su - grml -c 'grml-x ...' instead.${reset_color}"
112 print "$bg[black]$fg[red]${bold_color}Warning: Please do not run X.org as user root!${reset_color}"
113 print "$bg[black]$fg[red]${bold_color}As soon as you have a working $XCONFIG please use startx instead of grml-x.${reset_color}"
117 fstabuser=$(grep ':x:1000:' /etc/passwd)
118 fstabuser=${fstabuser%%[:]*}
121 # usage information {{{
124 if [[ $1 != '' ]] ; then echo 1>&2 "\n$1" ; fi
125 print "$bg[black]$fg[red]$bold_color"
128 $PROGRAMNAME [-options] windowmanager
134 $PROGRAMNAME -force -nostart fluxbox
135 $PROGRAMNAME -nosynaptics fluxbox
136 $PROGRAMNAME -nosync fluxbox
137 $PROGRAMNAME -noddc wmii
138 $PROGRAMNAME -xinerama -composite wmii
139 $PROGRAMNAME -module radeon -mode 1024x768 -vsync 60 openbox
140 XINITRC=~/.xinitrc $PROGRAMNAME openbox
141 $PROGRAMNAME -display 8 openbox
143 More information on grml-x can be found in the manual page: man grml-x
145 Report bugs, send wishes and feedback to the grml team:
146 http://grml.org/bugs/ - contact (at) grml.org
148 print "${reset_color}"
156 if [ -n "$ROOT" ] ; then
157 su - $fstabuser -c "$HWINFO > $HWINFO_TMP"
159 $HWINFO > $HWINFO_TMP
167 sudo $HWINFO --monitor > $MONITORINFO
174 [ -r "$MONITORINFO" ] || monitor # get monitor settings
175 modes=$(perl -e 'while (<STDIN>) {if (/ Resolution:/) { s/.*\s+(\d+x\d+).*/$1/; print} }' < $MONITORINFO |
176 sort -nur | perl -ne 's/\s+/ /; s/(\d+x\d+)/"$1"/; print')
178 if [ -n "$XINERAMA" ] ; then
182 Option for $fg[yellow]Xinerama$fg[green] found, please use xrandr inside X.org for your further configuration!
183 Trying to identify monitors now..."
185 # make sure we have information from 2 monitors:
186 # - first one from 'hwinfo --monitor' => $MONITORINFO
187 # - second one from 'hwinfo --framebuffer' => $FRAMEBUFFER
188 FRAMEBUFFER=$(hwinfo --framebuffer | grep 'Mode 0x.* bits' | head -1)
189 if [ -z "$FRAMEBUFFER" ] ; then
191 Fatal: could not identify two monitors - no chance to
192 set up multihead using Xinerama - sorry. :-(
194 Please run grml-x without the -xinerama option to start
195 X anyway (dropping support for Xinerama of course) and
196 contact grml developers if you have any further useful
197 information. => http://grml.org/bugs/
202 # check whether we can read the $MONITORINFO file
203 if ! [ -r "$MONITORINFO" ] ; then
205 Fatal: could not identify monitor - no chance to
206 set up multihead using Xinerama - sorry. :-(
210 # Currently we only know that it works with current intel driver,
211 # so inform user about that:
212 if [[ "$MODULE" != "intel" ]] ; then
215 Warning: using a non-intel driver - trying Xinerama setup anyway.
216 If it worked please contact grml developers providing information
217 about your setup so we can adjust grml-x according!
219 -> http://grml.org/contact/
221 Sleeping for 10 seconds now... Will continue then...
222 Just press Ctrl-C to cancel operation.
227 # now calculate Virtual size for use with Xinerama
228 HORIZ_RES1="$(grep 'Max. Resolution:' $MONITORINFO | sed 's/ Max\. Resolution: \(.*\)x\(.*\)/\1/')"
229 VERIZ_RES1="$(grep 'Max. Resolution:' $MONITORINFO | sed 's/ Max\. Resolution: \(.*\)x\(.*\)/\2/')"
230 # it might happen that we don't have a Max Resolution in hwinfo output :-/
231 # fall back to a generic value then...
232 # TODO: check out how to get resolution of external monitor from console
233 if [ -z "$HORIZ_RES1" ] ; then
238 # get maximum of output
239 HORIZ_RES2="$(echo $FRAMEBUFFER | grep 'Mode 0x' | sed 's/ Mode 0x.*: \(.*\)x.*/\1/'| sort -u | head -1)"
240 VERIZ_RES2="$(echo $FRAMEBUFFER | grep 'Mode 0x' | sed 's/ Mode 0x.*x\(.*\) (.*/\1/' | sort -u | head -1)"
242 if [ -n "$HORIZ_RES1" -a -n "$VERIZ_RES1" -a -n "$HORIZ_RES2" -a -n "$VERIZ_RES2" ] ; then
243 if [ "$(echo $VERIZ_RES1" - "$VERIZ_RES2 | bc -l)" -eq 0 ] ; then
244 VERIZ_RESULT="$VERIZ_RES1"
245 elif [ "$VERIZ_RES1" -gt "$VERIZ_RES2" ] ; then
246 VERIZ_RESULT="$VERIZ_RES1"
248 VERIZ_RESULT="$VERIZ_RES2"
251 HORIZ_RESULT=$(echo $HORIZ_RES1 + $HORIZ_RES2 | bc -l)
253 # important: keep newline for appropriate placing below $MODES!
254 if [ -n "$HORIZ_RESULT" ] ; then
256 Virtual $HORIZ_RESULT $VERIZ_RES1"
262 if [[ -n $NODDC ]] ; then
263 MODES="Modes \"1024x768\" \"800x600\" \"640x480\" \"1600x1200\" \"1280x1024\" \"1280x960\"$VIRTUAL"
264 elif [[ "$modes" == "\"1024x768\" " || -z $modes ]] ; then
265 MODES="# Modes \"1024x768\" \"800x600\" \"640x480\" \"1600x1200\" \"1280x1024\" \"1280x960\"$VIRTUAL"
267 MODES="# Modes $modes$VIRTUAL"
272 # sync - get hsync/vsync settings {{{
275 [ -r "$MONITORINFO" ] || monitor # get monitor settings
276 vsyncval=$(awk '/Vert. Sync Range:/{print $4}' $MONITORINFO | sed 's/-/.0 - / ; s/$/.0/' | head -1)
277 hsyncval=$(awk '/Hor. Sync Range:/{print $4}' $MONITORINFO | sed 's/-/.0 - / ; s/$/.0/' | head -1)
278 if [ -z $vsyncval ] ; then
279 vsyncval='50.0 - 60.0'
281 if [ -z $hsyncval ] ; then
282 hsyncval='28.0 - 96.0'
290 sudo $HWINFO --mouse > $MOUSEINFO
292 # SynPS/2 Synaptics TouchPad
293 if grep -q 'Device:.*Synaptics' "$MOUSEINFO" ; then
294 if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option
295 MOUSEDRIVER='synaptics'
296 SYNMOUSE='InputDevice "Synaptics" "AlwaysCore"'
298 Section \"InputDevice\"
300 Identifier \"Synaptics\"
301 Option \"Device\" \"/dev/psaux\"
302 Option \"Protocol\" \"auto-dev\"
303 Option \"LeftEdge\" \"1700\"
304 Option \"RightEdge\" \"5300\"
305 Option \"TopEdge\" \"1700\"
306 Option \"BottomEdge\" \"4200\"
307 Option \"FingerLow\" \"25\"
308 Option \"FingerHigh\" \"30\"
309 Option \"ZAxisMapping\" \"4 5\"
310 Option \"MaxTapTime\" \"180\"
311 Option \"MaxTapMove\" \"220\"
312 Option \"VertScrollDelta\" \"100\"
313 Option \"MinSpeed\" \"0.06\"
314 Option \"MaxSpeed\" \"0.12\"
315 Option \"AccelFactor\" \"0.0010\"
316 # Option \"SHMConfig\" \"on\"
317 # Option \"Repeater\" \"/dev/ps2mouse\"
323 SYNMOUSE='# No synaptics touchpad detected.'
327 # AlpsPS/2 ALPS TouchPad (with Synapticsdriver)
328 if grep -q 'Device:.*ALPS' "$MOUSEINFO" ; then
329 if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option
330 MOUSEDRIVER='synaptics'
331 SYNMOUSE='InputDevice "Synaptics" "AlwaysCore"'
333 Section \"InputDevice\"
335 Identifier \"Synaptics\"
336 Option \"Device\" \"/dev/psaux\"
337 Option \"Protocol\" \"auto-dev\"
338 Option \"LeftEdge\" \"120\"
339 Option \"RightEdge\" \"850\"
340 Option \"TopEdge\" \"120\"
341 Option \"BottomEdge\" \"650\"
342 Option \"FingerLow\" \"14\"
343 Option \"FingerHigh\" \"15\"
344 Option \"ZAxisMapping\" \"4 5\"
345 Option \"MaxTapTime\" \"180\"
346 Option \"MaxTapMove\" \"50\"
347 Option \"MaxDoubleTapTime\" \"100\"
348 Option \"VertScrollDelta\" \"20\"
349 Option \"HorizScrollDelta\" \"20\"
350 Option \"MinSpeed\" \"0.3\"
351 Option \"MaxSpeed\" \"2.00\"
352 Option \"AccelFactor\" \"0.030\"
353 Option \"UpDownScrolling\" \"1\"
354 Option \"EmulateMiddleButtonTime\" \"75\"
355 Option \"CircularScrolling\" \"1\"
356 Option \"CircScrollDelta\" \"0.1\"
357 Option \"CircScrollTrigger\" \"8\"
358 # Option \"SHMConfig\" \"on\"
359 # Option \"Repeater\" \"/dev/ps2mouse\"
365 SYNMOUSE='# No alps touchpad detected.'
368 SYNMOUSE='# No synaptics/alps touchpad present.'
372 # USB-PS/2 Optical Mouse
373 if [ -n "$USE_USB" ] ; then
374 USBMOUSE='InputDevice "USB Mouse" "CorePointer"'
376 Section \"InputDevice\"
377 Identifier \"USB Mouse\"
379 Option \"Device\" \"/dev/input/mice\"
380 Option \"Protocol\" \"auto\"
381 Option \"ZAxisMapping\" \"4 5\"
382 Option \"Buttons\" \"5\"
383 Option \"SendCoreEvents\" \"true\"
387 USBMOUSE='# InputDevice "USB Mouse" "CorePointer"'
391 if grep -q 'Device:.*Serial' "$MOUSEINFO" ; then
393 SERMOUSE='InputDevice "Serial Mouse" "CorePointer"'
395 Section \"InputDevice\"
396 Identifier \"Serial Mouse\"
398 Option \"Device\" \"/dev/ttyS0\"
399 Option \"Protocol\" \"Microsoft\"
400 Option \"Emulate3Buttons\" \"true\"
401 Option \"Emulate3Timeout\" \"70\"
402 Option \"SendCoreEvents\" \"true\"
406 SERMOUSE='# No serial mouse detected.'
410 # ImExPS/2 Logitech Explorer Mouse
411 # "PS2++ Logitech MX Mouse"
412 if [ -n "$USE_PS2" ] ; then
414 PS2MOUSE='InputDevice "PS/2 Mouse" "CorePointer"'
416 Section \"InputDevice\"
417 Identifier \"PS/2 Mouse\"
419 Option \"Device\" \"/dev/input/mice\"
420 # Option \"Device\" \"/dev/psaux\"
421 Option \"Protocol\" \"PS/2\"
422 Option \"Emulate3Buttons\" \"true\"
423 Option \"Emulate3Timeout\" \"70\"
424 Option \"SendCoreEvents\" \"true\"
428 PS2MOUSE='# InputDevice "PS/2 Mouse" "CorePointer"'
433 # Section \"InputDevice\"
434 # Identifier \"Generic Mouse\"
436 # Option \"Device\" \"/dev/input/mice\"
437 # Option \"Protocol\" \"auto\"
438 # Option \"ZAxisMapping\" \"4 5\"
439 # Option \"Buttons\" \"5\"
440 # Option \"SendCoreEvents\" \"true\"
451 # commandline parsing {{{
454 zparseopts -K -- module:=o_module help=o_help noddc=o_noddc nosync=o_nosync \
455 vsync:=o_vsync hsync:=o_hsync mode:=o_mode force=o_force display:=o_display \
456 nostart=o_nostart nodpms=o_nodpms nosynaptics=o_nosynaptics nousb=o_nousb \
457 nops2=o_nops2 genmouse=o_genmouse novref=o_novref nohsync=o_nohsync \
458 fallback=o_fallback usb=o_usb ps2=o_ps2 composite=o_composite \
461 if [[ $# == 0 || "$o_help" != "" || "$1" == '-h' || "$1" == '--help' ]]; then
465 if [[ "$o_force" != "" ]]; then
469 if [[ "$o_fallback" != "" ]]; then
471 if [ -r /etc/X11/xorg.conf.example ] ; then
472 sudo cp /etc/X11/xorg.conf.example $XCONFIG
473 print "$bold_color$fg[blue]Copying /etc/X11/xorg.conf.example to $XCONFIG as requested via fallback option."
475 echo 'Error: /etc/X11/xorg.conf.example not readable, exiting.'
480 if [[ "$o_nodpms" != "" ]]; then
481 DPMS='Option "DPMS" "false"'
483 DPMS='Option "DPMS" "true"'
486 if [[ "$o_noddc" != "" ]]; then
490 if [[ "$o_vsync" != "" ]]; then
494 if [[ "$o_hsync" != "" ]]; then
498 if [[ "$o_nousb" != "" ]]; then
499 echo 'Warning: option -nousb is deprecated.'>&2
502 if [[ "$o_usb" != "" ]]; then
506 if [[ "$o_nops2" != "" ]]; then
507 echo 'Warning: optino -nops2 is deprecatedË™'>&2
510 if [[ "$o_ps2" != "" ]]; then
514 if [[ "$o_genmouse" != "" ]]; then
518 if [[ "$o_nosynaptics" != "" ]]; then
524 if [[ "$o_nostart" != "" ]]; then
528 DISPLAY=$o_display[2]
530 eval WINDOWMANAGER=\${$#}
532 if [[ "$XKEYBOARD" == de ]] ; then
534 # Option \"XkbVariant\" \"nodeadkeys\""
537 if [ -n "$FORCE" -o ! -r "$XCONFIG" -a -z "$FALLBACK" ] ; then
538 print -n "$bold_color$fg[blue]Gathering hardware information...$fg[red]"
540 sync # get hsync/vsync
542 if [ -z "$o_hsync" ] ; then
543 o_hsync=(-hsync "$hsyncval")
545 HORIZSYNC=" HorizSync $HSYNC"
547 o_hsync=(-hsync "$o_hsync[2]")
549 HORIZSYNC=" HorizSync $HSYNC"
552 if [ -z "$o_vsync" ] ; then
553 o_vsync=(-vsync "$vsyncval")
555 VERTISYNC=" VertRefresh $VSYNC"
557 o_vsync=(-vsync "$o_vsync[2]")
559 VERTISYNC=" VertRefresh $VSYNC"
562 if [[ "$o_nosync" != "" ]]; then
563 HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nosync option of grml-x"
564 VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -nosync option of grml-x"
567 if [[ "$o_nohsync" != "" ]]; then
568 HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nohsync option of grml-x"
571 if [[ "$o_novref" != "" ]]; then
572 VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -novref option of grml-x"
575 if [[ "$o_xinerama" != "" ]]; then
579 if [[ "$o_composite" != "" ]]; then
580 COMPOSITE="Section \"Extensions\"
581 Option \"Composite\" \"Enable\"
584 COMPOSITE="#Section \"Extensions\"
585 # Option \"Composite\" \"Enable\"
593 MONITOR=$(awk '/monitor.1:/{print $3}' $HWINFO_TMP)
594 [[ $MONITOR != 'ddc' ]] && NODDC=yes
598 if [ -z "$MODULE" ] ; then
599 MODULE="$(getBootParam xmodule 2>/dev/null)"
600 if [ -z "$MODULE" ] ; then
601 MODULE=$(grep 'XFree86 v4 Server Module:' "${HWINFO_TMP}" | head -1 | awk '{print $5}')
602 if [ -z "$MODULE" ] ; then
605 # hwinfo >=13.28 reports driver 'intel' instead of i810
606 if [[ "$MODULE" == 'intel' ]] ; then
607 [ -r /usr/lib/xorg/modules/drivers/intel_drv.so ] || MODULE='i810'
614 mouse # get mouse settings
615 VGA=$(lspci | grep VGA | sed 's/.*compatible controller: //' | head -1)
618 if [ -z $MODE ] ; then
619 B_MODE="$(getBootParam xmode 2>/dev/null)"
620 if [ -n "$B_MODE" ] ; then
621 MODES="Modes \"$B_MODE\""
624 if [ -z "$MODES" ] ; then
625 mode # get available modes
628 MODES="Modes \"$MODE\""
632 print "$fg[green]done$reset_color"
633 print "$bg[black]$fg[white]$bold_color"
634 print "$fg[green]Specified windowmanager is $fg[yellow]$WINDOWMANAGER"
635 print "$fg[green]Video is $fg[yellow]$VGA$fg[green] using $bg[black]$fg[yellow]${XSERVER}$fg[cyan](${MODULE})$fg[green] Server"
636 [[ -z $HSYNC ]] && [[ -z $VSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR"
637 [[ -z $HSYNC ]] && [[ -n $VSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], VSYNC: $fg[yellow]$VSYNC"
638 [[ -z $VSYNC ]] && [[ -n $HSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], HSYNC: $fg[yellow]$HSYNC"
639 [[ -n $VSYNC ]] && [[ -n $HSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], HSYNC: $fg[yellow]$HSYNC $fg[green]VSYNC: $fg[yellow]$VSYNC"
640 [[ -n $modes ]] && print "$fg[green]Using default X.org modes."
641 [[ -z $modes ]] && print "$fg[green]Using Mode: $fg[yellow]$MODE"
642 print "${reset_color}"
648 # check for requirements {{{
651 if ! [ -x $(which hwinfo) ] ; then
652 print "$bg[black]$fg[red]${bold_color}Error: hwinfo not found in path.${reset_color}
653 Note: run 'aptitude install hwinfo' on systems running debian.
654 Exiting.${reset_color}"
658 if ! [[ -d /sys ]] ; then
659 print "$bg[black]$fg[red]${bold_color}Error: mounted /sys required (for hwinfo).${reset_color}
660 You may want to add the following line to your /etc/fstab:
662 sysfs /sys sysfs defaults 0 0
664 or just run 'mount /sys'. Exiting.${reset_color}"
674 ################################################################################
676 # Purpose: config file for xserver - generated by grml-x
677 # Bug-Reports: see http://grml.org/bugs/
678 # Latest change: ${DATE}
680 # /usr/share/doc/xserver-xorg/ and
681 # http://wiki.x.org/wiki/Home and
682 # http://ftp.x.org/pub/X11R7.0/doc/html/index.html for information on Xorg
684 # Refer to the xorg.conf man page and to
685 # http://ftp.x.org/pub/X11R7.0/doc/html/xorg.conf.5.html
686 # for details about the format of this file.
688 # See http://wiki.debian.org/XStrikeForce/FAQ for information
689 # regarding Xorg packages within Debian.
691 # If you would like this file to be automatically reconfigured by debian,
692 # run the following command:
693 # sudo dpkg-reconfigure -phigh xserver-xorg
694 ################################################################################
696 Section "ServerLayout"
697 Identifier "XServer Configured"
698 Screen 0 "Screen0" 0 0
699 # InputDevice "Keyboard0" "CoreKeyboard"
700 # InputDevice "Generic Mouse" "CorePointer"
704 Section "ServerFlags"
705 Option "AllowMouseOpenFail" "true" # allows the server to start up even if the mouse does not work
706 Option "DontVTSwitch" "false" # allow switching between virtual terminal
707 # Option "DontZap" "true" # disable <Crtl><Alt><BS> (server abort)
708 # Option "DontZoom" "true" # disable <Crtl><Alt><KP_+>/<KP_-> (resolution switching)
712 # More information: http://ftp.x.org/pub/X11R7.0/doc/html/fonts.html
714 # FontPath "/usr/share/fonts/ttf/western"
715 # FontPath "/usr/share/fonts/ttf/decoratives"
716 FontPath "/usr/share/fonts/truetype/ttf-bitstream-vera"
717 FontPath "/usr/share/fonts/latex-ttf-fonts"
718 FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
721 # Modules - see /usr/X11R6/lib/modules/fonts and /usr/X11R6/lib/modules/extensions
723 Load "dbe" # double buffer extension
724 Load "dri" # direct rendering
725 Load "glx" # 3D layer / GLX extension
726 Load "type1" # type1 font module
727 Load "freetype" # freetype fonts rendering
728 Load "extmod" # some commonly used server extensions (e.g. shape extension)
729 Load "record" # recording extension
730 Load "evdev" # generic input handling driver on Linux
731 # Load "vbe" # Vesa BIOS Extension
732 # Load "i2c" # I2C bus
733 # Load "int10" # initialize graphics cards via int10 call to the BIOS
734 # Load "v4l" # Video for Linux
735 ## Deprecated/unneeded modules with Xorg >=7.0:
736 # Load "speedo" # font module (does not exist anymore)
737 # Load "ddc" # ddc probing of monitor (automatically loaded)
738 # Load "GLcore" # render OpenGL in software (automatically loaded)
739 # Load "bitmap" # bitmap fonts (automatically loaded)
740 # Valid entries - see /usr/lib/xorg/modules/[extensions/]
741 # afb bitmap cfb cfb16 cfb24 cfb32 cw damage dbe ddc dri drm extmod fb
742 # fbdevhw freetype GLcore glx i2c int10 int10 layer mfb pcidata rac ramdac
743 # record scanpci shadow shadowfb type1 vbe vgahw xaa xf1bpp xf24_32bpp xf4bpp
744 # xf8_16bpp xf8_32bpp xtrap
747 # If you'd like to switch the positions of your capslock and control keys, use:
748 # Option "XkbOptions" "ctrl:swapcaps"
749 # Or if you just want both to be control, use:
750 # Option "XkbOptions" "ctrl:nocaps"
751 # More information: http://ftp.x.org/pub/X11R7.0/doc/html/XKB-Config.html
752 # Section "InputDevice"
753 # Identifier "Keyboard0"
754 # Option "CoreKeyboard"
756 # # Option "XkbOptions" "ctrl:swapcaps,grp:alt_shift_toggle,grp_led:scroll,compose:menu"
759 # More information: http://ftp.x.org/pub/X11R7.0/doc/html/mouse.html
760 ${USBMOUSEDETAIL}${PS2MOUSEDETAIL}${SERMOUSEDETAIL}${SYNMOUSEDETAIL}${EVDEV_MOUSE}
762 Identifier "Monitor0"
763 # ModelName "Old Monitor (no DDC)"
765 # HorizSync 28.0 - 78.0 # Warning: This may fry very old Monitors
766 # HorizSync 28.0 - 96.0 # Warning: This may fry old Monitors
768 # VertRefresh 50.0 - 76.0 # Very conservative. May flicker.
769 # VertRefresh 50.0 - 60.0 # Extreme conservative. Will flicker. TFT default.
771 # Need more information?
772 # http://xtiming.sourceforge.net/cgi-bin/xtiming.pl
773 # http://en.tldp.org/HOWTO/XFree86-Video-Timings-HOWTO/
777 ### Available Driver options are:
778 ## sw_cursor is needed for some ati and radeon cards
787 # Option "RenderAccel" "true"
788 # Option "AllowGLXWithComposite" "true"
790 # The following line is auto-generated by grml-x
794 ## Workaround for drivers (for example radeon) which might send output to wrong device:
795 # Option "MonitorLayout" "LVDS, AUTO"
796 # Option "MonitorLayout" "LVDS, CRT"
797 # Option "MonitorLayout" "NONE, STV"
798 # Option "MonitorLayout" "LVDS"
838 # Make sure you have the relevant Debian packages on your system
839 # to be able to use DRI (libgl1-mesa-dri for example)
846 ## END OF FILE #################################################################
853 XCONFTMP="/tmp/xconfig.$$"
855 # we do not want to have two CorePointers, deactivate one therefore
856 if grep -Eq '^[[:space:]]+InputDevice[ ]+"USB Mouse"[ ]+"CorePointer"' $XCONFTMP ; then
857 if grep -Eq '^[[:space:]]+InputDevice[ ]+"PS/2 Mouse"[ ]+"CorePointer"' $XCONFTMP ; then
858 sed -i 's|InputDevice.*PS/2.*CorePointer|# & # deactivated to avoid two CorePointers|' $XCONFTMP
861 [ -f $XCONFIG ] && sudo mv -f $XCONFIG $XCONFIG.old
862 sudo mv $XCONFTMP $XCONFIG
863 sudo chown root.root $XCONFIG
864 sudo chmod 644 $XCONFIG
871 if [[ ! -f $XCONFIG ]] ; then
872 print -n "$bold_color$fg[blue]Creating $XCONFIG: $fg[red]"
873 writeit && print "$fg[green]done$reset_color"
875 if [ -z "$FORCE" -a -z "$FALLBACK" ] ; then
876 print "$bold_color$fg[blue]Notice: $XCONFIG exists already.
877 Use the force-option (-force) to force creation.
881 if [[ -n "$FORCE" ]] ; then
882 print "$bold_color$fg[blue]Force-switch or manual option(s) detected:"
883 print -n "\-> Moving eventual existing $XCONFIG to ${XCONFIG}.old: $fg[red]"
884 writeit && print "$fg[green]done$reset_color"
893 if [ -z "$NOSTART" ] ; then
895 if [ -x /etc/init.d/xorg-common ] ; then
896 sudo /etc/init.d/xorg-common start
898 if [ -x /etc/init.d/xfree86-common ] ; then
899 sudo /etc/init.d/xfree86-common start
903 if [ -z "$DISPLAY" ] ; then
904 print "$bold_color$fg[green]Now trying to run startx.$reset_color"
905 startx $XINITRC -- $XOPTS
907 print "$bold_color$fg[green]Now trying to run startx on display $DISPLAY.$reset_color"
908 startx $XINITRC -- :$DISPLAY $XOPTS
911 print "$bold_color$fg[blue]Not running startx as requested via option.$reset_color"
921 if [ -z "$ROOT" ] ; then
922 if [[ $(tty) == /dev/pts/* ]] ; then
923 print "It seems you are running $PROGRAMNAME from inside GNU screen.
924 Notice that this might fail if running as user grml!
925 Please exit screen and try to run $PROGRAMNAME again."
928 print "Run the following commands for getting information on your hardware:
930 discover -v --data-path=xfree86/server/device/driver display
931 xdebconfigurator -c -d -i -x
932 get-edid | parse-edid
934 Do you want to go the debian way of life? Run:
935 aptitude install xorg read-edid mdetect hwinfo xdebconfigurator
936 dpkg-reconfigure -phigh xserver-xorg
938 Problems with the module used for X? Try to load another one or
939 fall back to module vesa:
940 $PROGRAMNAME -module radeon ...
941 $PROGRAMNAME -module vesa ...
943 Do you want to deactivate a present synaptics touchpad? Run:
944 $PROGRAMNAME -nosynaptics ...
946 Your monitor is very old and/or does not support DDC-probing?
947 $PROGRAMNAME -noddc ...
949 Do you want to create a x configuration file but do not start X?
950 $PROGRAMNAME -nostart ...
952 Monitor frequency too high or too low? Just specify hsync/vsync manually:
953 $PROGRAMNAME -hsync 30-65 ...
954 $PROGRAMNAME -hsync 30-65 -vsync 50-60 ...
956 Want to adjust the resolution? Use the mode-switch:
957 $PROGRAMNAME -mode 1024x768 ...
958 $PROGRAMNAME -mode '1280x1024 1024x768' ...
960 Problems? Use vesa with resolution 1024x768:
961 $PROGRAMNAME -module vesa -mode 1024x768 ...
963 Still problems with X? Use the fallback option:
964 $PROGRAMNAME -fallback ...
966 To adjust resolution while running X execute:
969 More information on grml-x can be found in the manual page: man grml-x
971 Report bugs, send wishes and feedback to the grml team:
972 http://grml.org/bugs/ - contact (at) grml.org
974 print -n "$reset_color"
990 if ! [ -x "$(which $WINDOWMANAGER)" ] ; then
991 print "$bg[black]$fg[red]${bold_color}Fatal: windowmanager $fg[blue]$WINDOWMANAGER$fg[red] not executable, startx won' work.${reset_color}">&2
994 if [ -w "$XINITRC" ] ; then
995 sed -i "s|^[^#]*exec.*| exec $WINDOWMANAGER|g" $XINITRC
998 echo -e "#!/bin/sh\n exec $WINDOWMANAGER" >> $XINITRC
1003 ## END OF FILE #################################################################
1004 # vim:foldmethod=marker expandtab ai ft=zsh