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 [ -r "$MONITORINFO" ] || bailout 1
277 vsyncval=$(awk '/Vert. Sync Range:/{print $4}' $MONITORINFO | sed 's/-/.0 - / ; s/$/.0/' | head -1)
278 hsyncval=$(awk '/Hor. Sync Range:/{print $4}' $MONITORINFO | sed 's/-/.0 - / ; s/$/.0/' | head -1)
279 if [ -z $vsyncval ] ; then
280 vsyncval='50.0 - 60.0'
282 if [ -z $hsyncval ] ; then
283 hsyncval='28.0 - 96.0'
291 sudo $HWINFO --mouse > $MOUSEINFO
293 # SynPS/2 Synaptics TouchPad
294 if grep -q 'Device:.*Synaptics' "$MOUSEINFO" ; then
295 if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option
296 MOUSEDRIVER='synaptics'
297 SYNMOUSE='InputDevice "Synaptics" "AlwaysCore"'
299 Section \"InputDevice\"
301 Identifier \"Synaptics\"
302 Option \"Device\" \"/dev/psaux\"
303 Option \"Protocol\" \"auto-dev\"
304 Option \"LeftEdge\" \"1700\"
305 Option \"RightEdge\" \"5300\"
306 Option \"TopEdge\" \"1700\"
307 Option \"BottomEdge\" \"4200\"
308 Option \"FingerLow\" \"25\"
309 Option \"FingerHigh\" \"30\"
310 Option \"ZAxisMapping\" \"4 5\"
311 Option \"MaxTapTime\" \"180\"
312 Option \"MaxTapMove\" \"220\"
313 Option \"VertScrollDelta\" \"100\"
314 Option \"MinSpeed\" \"0.06\"
315 Option \"MaxSpeed\" \"0.12\"
316 Option \"AccelFactor\" \"0.0010\"
317 # Option \"SHMConfig\" \"on\"
318 # Option \"Repeater\" \"/dev/ps2mouse\"
324 SYNMOUSE='# No synaptics touchpad detected.'
328 # AlpsPS/2 ALPS TouchPad (with Synapticsdriver)
329 if grep -q 'Device:.*ALPS' "$MOUSEINFO" ; then
330 if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option
331 MOUSEDRIVER='synaptics'
332 SYNMOUSE='InputDevice "Synaptics" "AlwaysCore"'
334 Section \"InputDevice\"
336 Identifier \"Synaptics\"
337 Option \"Device\" \"/dev/psaux\"
338 Option \"Protocol\" \"auto-dev\"
339 Option \"LeftEdge\" \"120\"
340 Option \"RightEdge\" \"850\"
341 Option \"TopEdge\" \"120\"
342 Option \"BottomEdge\" \"650\"
343 Option \"FingerLow\" \"14\"
344 Option \"FingerHigh\" \"15\"
345 Option \"ZAxisMapping\" \"4 5\"
346 Option \"MaxTapTime\" \"180\"
347 Option \"MaxTapMove\" \"50\"
348 Option \"MaxDoubleTapTime\" \"100\"
349 Option \"VertScrollDelta\" \"20\"
350 Option \"HorizScrollDelta\" \"20\"
351 Option \"MinSpeed\" \"0.3\"
352 Option \"MaxSpeed\" \"2.00\"
353 Option \"AccelFactor\" \"0.030\"
354 Option \"UpDownScrolling\" \"1\"
355 Option \"EmulateMiddleButtonTime\" \"75\"
356 Option \"CircularScrolling\" \"1\"
357 Option \"CircScrollDelta\" \"0.1\"
358 Option \"CircScrollTrigger\" \"8\"
359 # Option \"SHMConfig\" \"on\"
360 # Option \"Repeater\" \"/dev/ps2mouse\"
366 SYNMOUSE='# No alps touchpad detected.'
369 SYNMOUSE='# No synaptics/alps touchpad present.'
373 # USB-PS/2 Optical Mouse
374 if [ -n "$USE_USB" ] ; then
375 USBMOUSE='InputDevice "USB Mouse" "CorePointer"'
377 Section \"InputDevice\"
378 Identifier \"USB Mouse\"
380 Option \"Device\" \"/dev/input/mice\"
381 Option \"Protocol\" \"auto\"
382 Option \"ZAxisMapping\" \"4 5\"
383 Option \"Buttons\" \"5\"
384 Option \"SendCoreEvents\" \"true\"
388 USBMOUSE='# InputDevice "USB Mouse" "CorePointer"'
392 if grep -q 'Device:.*Serial' "$MOUSEINFO" ; then
394 SERMOUSE='InputDevice "Serial Mouse" "CorePointer"'
396 Section \"InputDevice\"
397 Identifier \"Serial Mouse\"
399 Option \"Device\" \"/dev/ttyS0\"
400 Option \"Protocol\" \"Microsoft\"
401 Option \"Emulate3Buttons\" \"true\"
402 Option \"Emulate3Timeout\" \"70\"
403 Option \"SendCoreEvents\" \"true\"
407 SERMOUSE='# No serial mouse detected.'
411 # ImExPS/2 Logitech Explorer Mouse
412 # "PS2++ Logitech MX Mouse"
413 if [ -n "$USE_PS2" ] ; then
415 PS2MOUSE='InputDevice "PS/2 Mouse" "CorePointer"'
417 Section \"InputDevice\"
418 Identifier \"PS/2 Mouse\"
420 Option \"Device\" \"/dev/input/mice\"
421 # Option \"Device\" \"/dev/psaux\"
422 Option \"Protocol\" \"PS/2\"
423 Option \"Emulate3Buttons\" \"true\"
424 Option \"Emulate3Timeout\" \"70\"
425 Option \"SendCoreEvents\" \"true\"
429 PS2MOUSE='# InputDevice "PS/2 Mouse" "CorePointer"'
434 # Section \"InputDevice\"
435 # Identifier \"Generic Mouse\"
437 # Option \"Device\" \"/dev/input/mice\"
438 # Option \"Protocol\" \"auto\"
439 # Option \"ZAxisMapping\" \"4 5\"
440 # Option \"Buttons\" \"5\"
441 # Option \"SendCoreEvents\" \"true\"
452 # commandline parsing {{{
455 zparseopts -K -- module:=o_module help=o_help noddc=o_noddc nosync=o_nosync \
456 vsync:=o_vsync hsync:=o_hsync mode:=o_mode force=o_force display:=o_display \
457 nostart=o_nostart nodpms=o_nodpms nosynaptics=o_nosynaptics nousb=o_nousb \
458 nops2=o_nops2 genmouse=o_genmouse novref=o_novref nohsync=o_nohsync \
459 fallback=o_fallback usb=o_usb ps2=o_ps2 composite=o_composite \
462 if [[ $# == 0 || "$o_help" != "" || "$1" == '-h' || "$1" == '--help' ]]; then
466 if [[ "$o_force" != "" ]]; then
470 if [[ "$o_fallback" != "" ]]; then
472 if [ -r /etc/X11/xorg.conf.example ] ; then
473 sudo cp /etc/X11/xorg.conf.example $XCONFIG
474 print "$bold_color$fg[blue]Copying /etc/X11/xorg.conf.example to $XCONFIG as requested via fallback option."
476 echo 'Error: /etc/X11/xorg.conf.example not readable, exiting.'
481 if [[ "$o_nodpms" != "" ]]; then
482 DPMS='Option "DPMS" "false"'
484 DPMS='Option "DPMS" "true"'
487 if [[ "$o_noddc" != "" ]]; then
491 if [[ "$o_vsync" != "" ]]; then
495 if [[ "$o_hsync" != "" ]]; then
499 if [[ "$o_nousb" != "" ]]; then
500 echo 'Warning: option -nousb is deprecated.'>&2
503 if [[ "$o_usb" != "" ]]; then
507 if [[ "$o_nops2" != "" ]]; then
508 echo 'Warning: optino -nops2 is deprecatedË™'>&2
511 if [[ "$o_ps2" != "" ]]; then
515 if [[ "$o_genmouse" != "" ]]; then
519 if [[ "$o_nosynaptics" != "" ]]; then
525 if [[ "$o_nostart" != "" ]]; then
529 DISPLAY=$o_display[2]
531 eval WINDOWMANAGER=\${$#}
533 if [[ "$XKEYBOARD" == de ]] ; then
535 # Option \"XkbVariant\" \"nodeadkeys\""
538 if [ -n "$FORCE" -o ! -r "$XCONFIG" -a -z "$FALLBACK" ] ; then
539 print -n "$bold_color$fg[blue]Gathering hardware information...$fg[red]"
541 sync # get hsync/vsync
543 if [ -z "$o_hsync" ] ; then
544 o_hsync=(-hsync "$hsyncval")
546 HORIZSYNC=" HorizSync $HSYNC"
548 o_hsync=(-hsync "$o_hsync[2]")
550 HORIZSYNC=" HorizSync $HSYNC"
553 if [ -z "$o_vsync" ] ; then
554 o_vsync=(-vsync "$vsyncval")
556 VERTISYNC=" VertRefresh $VSYNC"
558 o_vsync=(-vsync "$o_vsync[2]")
560 VERTISYNC=" VertRefresh $VSYNC"
563 if [[ "$o_nosync" != "" ]]; then
564 HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nosync option of grml-x"
565 VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -nosync option of grml-x"
568 if [[ "$o_nohsync" != "" ]]; then
569 HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nohsync option of grml-x"
572 if [[ "$o_novref" != "" ]]; then
573 VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -novref option of grml-x"
576 if [[ "$o_xinerama" != "" ]]; then
580 if [[ "$o_composite" != "" ]]; then
581 COMPOSITE="Section \"Extensions\"
582 Option \"Composite\" \"Enable\"
585 COMPOSITE="#Section \"Extensions\"
586 # Option \"Composite\" \"Enable\"
594 [ -r "$HWINFO_TMP" ] || bailout 1
595 MONITOR=$(awk '/monitor.1:/{print $3}' $HWINFO_TMP)
596 [[ $MONITOR != 'ddc' ]] && NODDC=yes
600 if [ -z "$MODULE" ] ; then
601 MODULE="$(getBootParam xmodule 2>/dev/null)"
602 if [ -z "$MODULE" ] ; then
603 MODULE=$(grep 'XFree86 v4 Server Module:' "${HWINFO_TMP}" | head -1 | awk '{print $5}')
604 if [ -z "$MODULE" ] ; then
607 # hwinfo >=13.28 reports driver 'intel' instead of i810
608 if [[ "$MODULE" == 'intel' ]] ; then
609 [ -r /usr/lib/xorg/modules/drivers/intel_drv.so ] || MODULE='i810'
616 mouse # get mouse settings
617 VGA=$(lspci | grep VGA | sed 's/.*compatible controller: //' | head -1)
620 if [ -z $MODE ] ; then
621 B_MODE="$(getBootParam xmode 2>/dev/null)"
622 if [ -n "$B_MODE" ] ; then
623 MODES="Modes \"$B_MODE\""
626 if [ -z "$MODES" ] ; then
627 mode # get available modes
630 MODES="Modes \"$MODE\""
634 print "$fg[green]done$reset_color"
635 print "$bg[black]$fg[white]$bold_color"
636 print "$fg[green]Specified windowmanager is $fg[yellow]$WINDOWMANAGER"
637 print "$fg[green]Video is $fg[yellow]$VGA$fg[green] using $bg[black]$fg[yellow]${XSERVER}$fg[cyan](${MODULE})$fg[green] Server"
638 [[ -z $HSYNC ]] && [[ -z $VSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR"
639 [[ -z $HSYNC ]] && [[ -n $VSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], VSYNC: $fg[yellow]$VSYNC"
640 [[ -z $VSYNC ]] && [[ -n $HSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], HSYNC: $fg[yellow]$HSYNC"
641 [[ -n $VSYNC ]] && [[ -n $HSYNC ]] && print "$fg[green]Monitor is $fg[yellow]$MONITOR$fg[green], HSYNC: $fg[yellow]$HSYNC $fg[green]VSYNC: $fg[yellow]$VSYNC"
642 [[ -n $modes ]] && print "$fg[green]Using default X.org modes."
643 [[ -z $modes ]] && print "$fg[green]Using Mode: $fg[yellow]$MODE"
644 print "${reset_color}"
650 # check for requirements {{{
653 if ! [ -x $(which hwinfo) ] ; then
654 print "$bg[black]$fg[red]${bold_color}Error: hwinfo not found in path.${reset_color}
655 Note: run 'aptitude install hwinfo' on systems running debian.
656 Exiting.${reset_color}"
660 if ! [[ -d /sys ]] ; then
661 print "$bg[black]$fg[red]${bold_color}Error: mounted /sys required (for hwinfo).${reset_color}
662 You may want to add the following line to your /etc/fstab:
664 sysfs /sys sysfs defaults 0 0
666 or just run 'mount /sys'. Exiting.${reset_color}"
676 ################################################################################
678 # Purpose: config file for xserver - generated by grml-x
679 # Bug-Reports: see http://grml.org/bugs/
680 # Latest change: ${DATE}
682 # /usr/share/doc/xserver-xorg/ and
683 # http://wiki.x.org/wiki/Home and
684 # http://ftp.x.org/pub/X11R7.0/doc/html/index.html for information on Xorg
686 # Refer to the xorg.conf man page and to
687 # http://ftp.x.org/pub/X11R7.0/doc/html/xorg.conf.5.html
688 # for details about the format of this file.
690 # See http://wiki.debian.org/XStrikeForce/FAQ for information
691 # regarding Xorg packages within Debian.
693 # If you would like this file to be automatically reconfigured by debian,
694 # run the following command:
695 # sudo dpkg-reconfigure -phigh xserver-xorg
696 ################################################################################
698 Section "ServerLayout"
699 Identifier "XServer Configured"
700 Screen 0 "Screen0" 0 0
701 # InputDevice "Keyboard0" "CoreKeyboard"
702 # InputDevice "Generic Mouse" "CorePointer"
706 Section "ServerFlags"
707 Option "AllowMouseOpenFail" "true" # allows the server to start up even if the mouse does not work
708 Option "DontVTSwitch" "false" # allow switching between virtual terminal
709 # Option "DontZap" "true" # disable <Crtl><Alt><BS> (server abort)
710 # Option "DontZoom" "true" # disable <Crtl><Alt><KP_+>/<KP_-> (resolution switching)
714 # More information: http://ftp.x.org/pub/X11R7.0/doc/html/fonts.html
716 # FontPath "/usr/share/fonts/ttf/western"
717 # FontPath "/usr/share/fonts/ttf/decoratives"
718 FontPath "/usr/share/fonts/truetype/ttf-bitstream-vera"
719 FontPath "/usr/share/fonts/latex-ttf-fonts"
720 FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
723 # Modules - see /usr/X11R6/lib/modules/fonts and /usr/X11R6/lib/modules/extensions
725 Load "dbe" # double buffer extension
726 Load "dri" # direct rendering
727 Load "glx" # 3D layer / GLX extension
728 Load "type1" # type1 font module
729 Load "freetype" # freetype fonts rendering
730 Load "extmod" # some commonly used server extensions (e.g. shape extension)
731 Load "record" # recording extension
732 Load "evdev" # generic input handling driver on Linux
733 # Load "vbe" # Vesa BIOS Extension
734 # Load "i2c" # I2C bus
735 # Load "int10" # initialize graphics cards via int10 call to the BIOS
736 # Load "v4l" # Video for Linux
737 ## Deprecated/unneeded modules with Xorg >=7.0:
738 # Load "speedo" # font module (does not exist anymore)
739 # Load "ddc" # ddc probing of monitor (automatically loaded)
740 # Load "GLcore" # render OpenGL in software (automatically loaded)
741 # Load "bitmap" # bitmap fonts (automatically loaded)
742 # Valid entries - see /usr/lib/xorg/modules/[extensions/]
743 # afb bitmap cfb cfb16 cfb24 cfb32 cw damage dbe ddc dri drm extmod fb
744 # fbdevhw freetype GLcore glx i2c int10 int10 layer mfb pcidata rac ramdac
745 # record scanpci shadow shadowfb type1 vbe vgahw xaa xf1bpp xf24_32bpp xf4bpp
746 # xf8_16bpp xf8_32bpp xtrap
749 # If you'd like to switch the positions of your capslock and control keys, use:
750 # Option "XkbOptions" "ctrl:swapcaps"
751 # Or if you just want both to be control, use:
752 # Option "XkbOptions" "ctrl:nocaps"
753 # More information: http://ftp.x.org/pub/X11R7.0/doc/html/XKB-Config.html
754 # Section "InputDevice"
755 # Identifier "Keyboard0"
756 # Option "CoreKeyboard"
758 # # Option "XkbOptions" "ctrl:swapcaps,grp:alt_shift_toggle,grp_led:scroll,compose:menu"
761 # More information: http://ftp.x.org/pub/X11R7.0/doc/html/mouse.html
762 ${USBMOUSEDETAIL}${PS2MOUSEDETAIL}${SERMOUSEDETAIL}${SYNMOUSEDETAIL}${EVDEV_MOUSE}
764 Identifier "Monitor0"
765 # ModelName "Old Monitor (no DDC)"
767 # HorizSync 28.0 - 78.0 # Warning: This may fry very old Monitors
768 # HorizSync 28.0 - 96.0 # Warning: This may fry old Monitors
770 # VertRefresh 50.0 - 76.0 # Very conservative. May flicker.
771 # VertRefresh 50.0 - 60.0 # Extreme conservative. Will flicker. TFT default.
773 # Need more information?
774 # http://xtiming.sourceforge.net/cgi-bin/xtiming.pl
775 # http://en.tldp.org/HOWTO/XFree86-Video-Timings-HOWTO/
779 ### Available Driver options are:
780 ## sw_cursor is needed for some ati and radeon cards
789 # Option "RenderAccel" "true"
790 # Option "AllowGLXWithComposite" "true"
792 # The following line is auto-generated by grml-x
796 ## Workaround for drivers (for example radeon) which might send output to wrong device:
797 # Option "MonitorLayout" "LVDS, AUTO"
798 # Option "MonitorLayout" "LVDS, CRT"
799 # Option "MonitorLayout" "NONE, STV"
800 # Option "MonitorLayout" "LVDS"
840 # Make sure you have the relevant Debian packages on your system
841 # to be able to use DRI (libgl1-mesa-dri for example)
848 ## END OF FILE #################################################################
855 XCONFTMP="/tmp/xconfig.$$"
857 # we do not want to have two CorePointers, deactivate one therefore
858 if grep -Eq '^[[:space:]]+InputDevice[ ]+"USB Mouse"[ ]+"CorePointer"' $XCONFTMP ; then
859 if grep -Eq '^[[:space:]]+InputDevice[ ]+"PS/2 Mouse"[ ]+"CorePointer"' $XCONFTMP ; then
860 sed -i 's|InputDevice.*PS/2.*CorePointer|# & # deactivated to avoid two CorePointers|' $XCONFTMP
863 [ -f $XCONFIG ] && sudo mv -f $XCONFIG $XCONFIG.old
864 sudo mv $XCONFTMP $XCONFIG
865 sudo chown root.root $XCONFIG
866 sudo chmod 644 $XCONFIG
873 if [[ ! -f $XCONFIG ]] ; then
874 print -n "$bold_color$fg[blue]Creating $XCONFIG: $fg[red]"
875 writeit && print "$fg[green]done$reset_color"
877 if [ -z "$FORCE" -a -z "$FALLBACK" ] ; then
878 print "$bold_color$fg[blue]Notice: $XCONFIG exists already.
879 Use the force-option (-force) to force creation.
883 if [[ -n "$FORCE" ]] ; then
884 print "$bold_color$fg[blue]Force-switch or manual option(s) detected:"
885 print -n "\-> Moving eventual existing $XCONFIG to ${XCONFIG}.old: $fg[red]"
886 writeit && print "$fg[green]done$reset_color"
895 if [ -z "$NOSTART" ] ; then
897 if [ -x /etc/init.d/xorg-common ] ; then
898 sudo /etc/init.d/xorg-common start
900 if [ -x /etc/init.d/xfree86-common ] ; then
901 sudo /etc/init.d/xfree86-common start
905 if [ -z "$DISPLAY" ] ; then
906 print "$bold_color$fg[green]Now trying to run startx.$reset_color"
907 startx $XINITRC -- $XOPTS
909 print "$bold_color$fg[green]Now trying to run startx on display $DISPLAY.$reset_color"
910 startx $XINITRC -- :$DISPLAY $XOPTS
913 print "$bold_color$fg[blue]Not running startx as requested via option.$reset_color"
923 if [ -z "$ROOT" ] ; then
924 if [[ $(tty) == /dev/pts/* ]] ; then
925 print "It seems you are running $PROGRAMNAME from inside GNU screen.
926 Notice that this might fail if running as user grml!
927 Please exit screen and try to run $PROGRAMNAME again."
930 print "Run the following commands for getting information on your hardware:
932 discover -v --data-path=xfree86/server/device/driver display
933 xdebconfigurator -c -d -i -x
934 get-edid | parse-edid
936 Do you want to go the debian way of life? Run:
937 aptitude install xorg read-edid mdetect hwinfo xdebconfigurator
938 dpkg-reconfigure -phigh xserver-xorg
940 Problems with the module used for X? Try to load another one or
941 fall back to module vesa:
942 $PROGRAMNAME -module radeon ...
943 $PROGRAMNAME -module vesa ...
945 Do you want to deactivate a present synaptics touchpad? Run:
946 $PROGRAMNAME -nosynaptics ...
948 Your monitor is very old and/or does not support DDC-probing?
949 $PROGRAMNAME -noddc ...
951 Do you want to create a x configuration file but do not start X?
952 $PROGRAMNAME -nostart ...
954 Monitor frequency too high or too low? Just specify hsync/vsync manually:
955 $PROGRAMNAME -hsync 30-65 ...
956 $PROGRAMNAME -hsync 30-65 -vsync 50-60 ...
958 Want to adjust the resolution? Use the mode-switch:
959 $PROGRAMNAME -mode 1024x768 ...
960 $PROGRAMNAME -mode '1280x1024 1024x768' ...
962 Problems? Use vesa with resolution 1024x768:
963 $PROGRAMNAME -module vesa -mode 1024x768 ...
965 Still problems with X? Use the fallback option:
966 $PROGRAMNAME -fallback ...
968 To adjust resolution while running X execute:
971 More information on grml-x can be found in the manual page: man grml-x
973 Report bugs, send wishes and feedback to the grml team:
974 http://grml.org/bugs/ - contact (at) grml.org
976 print -n "$reset_color"
992 if ! [ -x "$(which $WINDOWMANAGER)" ] ; then
993 print "$bg[black]$fg[red]${bold_color}Fatal: windowmanager $fg[blue]$WINDOWMANAGER$fg[red] not executable, startx will not work.${reset_color}">&2
996 if [ -w "$XINITRC" ] ; then
997 sed -i "s|^[^#]*exec.*| exec $WINDOWMANAGER|g" $XINITRC
1000 echo -e "#!/bin/sh\n exec $WINDOWMANAGER" >> $XINITRC
1005 ## END OF FILE #################################################################
1006 # vim:foldmethod=marker expandtab ai ft=zsh