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 ################################################################################
10 # usage: DEBUG=1 grml-x ..... 2>/tmp/grml-x-debug.log
11 if [[ $DEBUG -gt 0 ]]; then
16 # functions and color {{{
17 # use colors only if not booted with nocolor bootoption
18 if ! grep -q nocolor /proc/cmdline ; then
19 autoload colors ; colors
20 [ -r /etc/grml_colors ] && . /etc/grml_colors
23 # some functions like getBootParam
24 if [ -r /etc/grml/script-functions -a -r /etc/grml/sh-lib ] ; then
25 source /etc/grml/script-functions
26 source /etc/grml/sh-lib
28 echo 'Error: sourcing function files failed. Exiting.'
32 check4root &>/dev/null && ROOT='1' || ROOT=''
37 HWINFO='/usr/sbin/hwinfo'
39 [ -n "$XINITRC" ] || XINITRC="$HOME/.xinitrc"
42 # notice: we need the unsafe option, otherwise users other than root
43 # can not write to HWINFO_TMP, but we don't want to run hwinfo as root
44 HWINFO_TMP="$(mktemp -u)" || exit 1
45 MONITORINFO="$(mktemp)" || exit 1
46 MOUSEINFO="$(mktemp)" || exit 1
48 if [ -z "$HWINFO_TMP" ] ; then
49 echo "Fatal: could not create temporary file. Exiting.">&2
53 if [ -r /etc/sysconfig/keyboard ] ; then
54 source /etc/sysconfig/keyboard
60 XCONFIG='/etc/X11/xorg.conf'
61 KEYBOARD="# Driver \"kbd\"
62 # Option \"XkbRules\" \"xfree86\"
63 # Option \"XkbRules\" \"xorg\"
64 # Option \"XkbModel\" \"pc105\"
65 # Option \"XkbLayout\" \"${XKEYBOARD},us\"
66 # Option \"XkbVariant\" \"nodeadkeys\""
69 if [ -d /usr/share/fonts/X11 ] ; then
70 XFONTS=" FontPath \"/usr/share/fonts/X11/misc\"
71 FontPath \"/usr/share/fonts/X11/100dpi/:unscaled\"
72 FontPath \"/usr/share/fonts/X11/75dpi/:unscaled\"
73 FontPath \"/usr/share/fonts/X11/Type1\"
74 FontPath \"/usr/share/fonts/X11/100dpi\"
75 FontPath \"/usr/share/fonts/X11/75dpi\""
77 # /usr/X11R6/lib/X11/fonts exists nearly everywhere, assume
78 # /usr/X11R6/lib/X11/fonts as valid font path only if fonts.dir
80 if [ -r /usr/X11R6/lib/X11/fonts/misc/fonts.dir ] ; then
82 FontPath \"/usr/X11R6/lib/X11/fonts/Type1\"
83 FontPath \"/usr/X11R6/lib/X11/fonts/misc:unscaled\"
84 FontPath \"/usr/X11R6/lib/X11/fonts/misc\"
85 FontPath \"/usr/X11R6/lib/X11/fonts/75dpi:unscaled\"
86 FontPath \"/usr/X11R6/lib/X11/fonts/75dpi\"
87 FontPath \"/usr/X11R6/lib/X11/fonts/100dpi:unscaled\"
88 FontPath \"/usr/X11R6/lib/X11/fonts/100dpi\""
92 # make sure we don't leave any temp files {{{
94 rm -f "$HWINFO_TMP" "$MONITORINFO" "$MOUSEINFO"
95 [ -n "$1" ] && EXIT="$1" || EXIT="1"
96 print "$bg[black]$fg[red]${bold_color}Exiting...${reset_color}">&2
100 trap bailout 1 2 3 15
103 # warn if running as user root {{{
104 if [ -n "$ROOT" ] ; then
105 if [ -r /etc/grml_cd ] ; then
106 print "$bg[black]$fg[red]${bold_color}Warning: Please do not run grml-x as user root.${reset_color}"
107 print "$bg[black]$fg[red]${bold_color}Running grml-x as user root is *not* supported!${reset_color}"
108 print "$bg[black]$fg[red]${bold_color}Switch to user grml or run su - grml -c 'grml-x ...' instead.${reset_color}"
111 print "$bg[black]$fg[red]${bold_color}Warning: Please do not run X.org as user root!${reset_color}"
112 print "$bg[black]$fg[red]${bold_color}As soon as you have a working $XCONFIG please use startx instead of grml-x.${reset_color}"
116 fstabuser=$(grep ':x:1000:' /etc/passwd)
117 fstabuser=${fstabuser%%[:]*}
120 # usage information {{{
123 if [[ $1 != '' ]] ; then echo 1>&2 "\n$1" ; fi
124 print "$bg[black]$fg[red]$bold_color"
127 $PROGRAMNAME [-options] windowmanager
132 $PROGRAMNAME -force -nostart fluxbox
133 $PROGRAMNAME -nosynaptics fluxbox
134 $PROGRAMNAME -nosync fluxbox
135 $PROGRAMNAME -noddc fluxbox
136 $PROGRAMNAME -xinerama -composite fluxbox
137 $PROGRAMNAME -module radeon -mode 1024x768 -vsync 60 fluxbox
138 XINITRC=~/.xinitrc $PROGRAMNAME fluxbox
139 $PROGRAMNAME -display 8 fluxbox
141 More information on grml-x can be found in the manual page: man grml-x
143 Report bugs, send wishes and feedback to the grml team:
144 http://grml.org/bugs/ - contact (at) grml.org
146 print "${reset_color}"
154 if [ -n "$ROOT" ] ; then
155 su - $fstabuser -c "$HWINFO > $HWINFO_TMP"
157 $HWINFO > $HWINFO_TMP
165 sudo $HWINFO --monitor > $MONITORINFO
172 [ -r "$MONITORINFO" ] || monitor # get monitor settings
173 modes=$(perl -e 'while (<STDIN>) {if (/ Resolution:/) { s/.*\s+(\d+x\d+).*/$1/; print} }' < $MONITORINFO |
174 sort -nur | perl -ne 's/\s+/ /; s/(\d+x\d+)/"$1"/; print')
176 if [ -n "$XINERAMA" ] ; then
180 Option for $fg[yellow]Xinerama$fg[green] found, please use xrandr inside X.org for your further configuration!
181 Trying to identify monitors now..."
183 # make sure we have information from 2 monitors:
184 # - first one from 'hwinfo --monitor' => $MONITORINFO
185 # - second one from 'hwinfo --framebuffer' => $FRAMEBUFFER
186 FRAMEBUFFER=$(hwinfo --framebuffer | grep 'Mode 0x.* bits' | head -1)
187 if [ -z "$FRAMEBUFFER" ] ; then
189 Fatal: could not identify two monitors - no chance to
190 set up multihead using Xinerama - sorry. :-(
192 Please run grml-x without the -xinerama option to start
193 X anyway (dropping support for Xinerama of course) and
194 contact grml developers if you have any further useful
195 information. => http://grml.org/bugs/
200 # check whether we can read the $MONITORINFO file
201 if ! [ -r "$MONITORINFO" ] ; then
203 Fatal: could not identify monitor - no chance to
204 set up multihead using Xinerama - sorry. :-(
208 # Currently we only know that it works with current intel driver,
209 # so inform user about that:
210 if [[ "$MODULE" != "intel" ]] ; then
213 Warning: using a non-intel driver - trying Xinerama setup anyway.
214 If it worked please contact grml developers providing information
215 about your setup so we can adjust grml-x according!
217 -> http://grml.org/contact/
219 Sleeping for 10 seconds now... Will continue then...
220 Just press Ctrl-C to cancel operation.
225 # now calculate Virtual size for use with Xinerama
226 HORIZ_RES1="$(grep 'Max. Resolution:' $MONITORINFO | sed 's/ Max\. Resolution: \(.*\)x\(.*\)/\1/')"
227 VERIZ_RES1="$(grep 'Max. Resolution:' $MONITORINFO | sed 's/ Max\. Resolution: \(.*\)x\(.*\)/\2/')"
228 # it might happen that we don't have a Max Resolution in hwinfo output :-/
229 # fall back to a generic value then...
230 # TODO: check out how to get resolution of external monitor from console
231 if [ -z "$HORIZ_RES1" ] ; then
236 # get maximum of output
237 HORIZ_RES2="$(echo $FRAMEBUFFER | grep 'Mode 0x' | sed 's/ Mode 0x.*: \(.*\)x.*/\1/'| sort -u | head -1)"
238 VERIZ_RES2="$(echo $FRAMEBUFFER | grep 'Mode 0x' | sed 's/ Mode 0x.*x\(.*\) (.*/\1/' | sort -u | head -1)"
240 if [ -n "$HORIZ_RES1" -a -n "$VERIZ_RES1" -a -n "$HORIZ_RES2" -a -n "$VERIZ_RES2" ] ; then
241 if [ "$(echo $VERIZ_RES1" - "$VERIZ_RES2 | bc -l)" -eq 0 ] ; then
242 VERIZ_RESULT="$VERIZ_RES1"
243 elif [ "$VERIZ_RES1" -gt "$VERIZ_RES2" ] ; then
244 VERIZ_RESULT="$VERIZ_RES1"
246 VERIZ_RESULT="$VERIZ_RES2"
249 HORIZ_RESULT=$(echo $HORIZ_RES1 + $HORIZ_RES2 | bc -l)
251 # important: keep newline for appropriate placing below $MODES!
252 if [ -n "$HORIZ_RESULT" ] ; then
254 Virtual $HORIZ_RESULT $VERIZ_RES1"
260 if [[ -n $NODDC ]] ; then
261 MODES="Modes \"1024x768\" \"800x600\" \"640x480\" \"1600x1200\" \"1280x1024\" \"1280x960\"$VIRTUAL"
262 elif [[ "$modes" == "\"1024x768\" " || -z $modes ]] ; then
263 MODES="# Modes \"1024x768\" \"800x600\" \"640x480\" \"1600x1200\" \"1280x1024\" \"1280x960\"$VIRTUAL"
265 MODES="# Modes $modes$VIRTUAL"
270 # sync - get hsync/vsync settings {{{
273 [ -r "$MONITORINFO" ] || monitor # get monitor settings
274 [ -r "$MONITORINFO" ] || bailout 1
275 vsyncval=$(awk '/Vert. Sync Range:/{print $4}' $MONITORINFO | sed 's/-/.0 - / ; s/$/.0/' | head -1)
276 hsyncval=$(awk '/Hor. Sync Range:/{print $4}' $MONITORINFO | sed 's/-/.0 - / ; s/$/.0/' | head -1)
277 if [ -z $vsyncval ] ; then
278 vsyncval='50.0 - 60.0'
280 if [ -z $hsyncval ] ; then
281 hsyncval='28.0 - 96.0'
289 sudo $HWINFO --mouse > $MOUSEINFO
291 # SynPS/2 Synaptics TouchPad
292 if grep -q 'Device:.*Synaptics' "$MOUSEINFO" ; then
293 if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option
294 MOUSEDRIVER='synaptics'
295 SYNMOUSE='InputDevice "Synaptics" # "AlwaysCore"'
297 Section \"InputDevice\"
299 Identifier \"Synaptics\"
300 Option \"Device\" \"/dev/psaux\"
301 Option \"Protocol\" \"auto-dev\"
302 Option \"LeftEdge\" \"1700\"
303 Option \"RightEdge\" \"5300\"
304 Option \"TopEdge\" \"1700\"
305 Option \"BottomEdge\" \"4200\"
306 Option \"FingerLow\" \"25\"
307 Option \"FingerHigh\" \"30\"
308 Option \"ZAxisMapping\" \"4 5\"
309 Option \"MaxTapTime\" \"180\"
310 Option \"MaxTapMove\" \"220\"
311 Option \"VertScrollDelta\" \"100\"
312 Option \"MinSpeed\" \"0.06\"
313 Option \"MaxSpeed\" \"0.12\"
314 Option \"AccelFactor\" \"0.0010\"
315 # Option \"SHMConfig\" \"on\"
316 # Option \"Repeater\" \"/dev/ps2mouse\"
322 SYNMOUSE='# No synaptics touchpad detected.'
326 # AlpsPS/2 ALPS TouchPad (with Synapticsdriver)
327 if grep -q 'Device:.*ALPS' "$MOUSEINFO" ; then
328 if [[ "$SYNAPTICS" == "yes" ]] ; then # check for '-nosynaptics'-option
329 MOUSEDRIVER='synaptics'
330 SYNMOUSE='InputDevice "Synaptics" # "AlwaysCore"'
332 Section \"InputDevice\"
334 Identifier \"Synaptics\"
335 Option \"Device\" \"/dev/psaux\"
336 Option \"Protocol\" \"auto-dev\"
337 Option \"LeftEdge\" \"120\"
338 Option \"RightEdge\" \"850\"
339 Option \"TopEdge\" \"120\"
340 Option \"BottomEdge\" \"650\"
341 Option \"FingerLow\" \"14\"
342 Option \"FingerHigh\" \"15\"
343 Option \"ZAxisMapping\" \"4 5\"
344 Option \"MaxTapTime\" \"180\"
345 Option \"MaxTapMove\" \"50\"
346 Option \"MaxDoubleTapTime\" \"100\"
347 Option \"VertScrollDelta\" \"20\"
348 Option \"HorizScrollDelta\" \"20\"
349 Option \"MinSpeed\" \"0.3\"
350 Option \"MaxSpeed\" \"2.00\"
351 Option \"AccelFactor\" \"0.030\"
352 Option \"UpDownScrolling\" \"1\"
353 Option \"EmulateMiddleButtonTime\" \"75\"
354 Option \"CircularScrolling\" \"1\"
355 Option \"CircScrollDelta\" \"0.1\"
356 Option \"CircScrollTrigger\" \"8\"
357 # Option \"SHMConfig\" \"on\"
358 # Option \"Repeater\" \"/dev/ps2mouse\"
364 SYNMOUSE='# No alps touchpad detected.'
367 SYNMOUSE='# No synaptics/alps touchpad present.'
371 # USB-PS/2 Optical Mouse
372 if [ -n "$USE_USB" ] ; then
373 USBMOUSE='InputDevice "USB Mouse" "CorePointer"'
375 Section \"InputDevice\"
376 Identifier \"USB Mouse\"
378 Option \"Device\" \"/dev/input/mice\"
379 Option \"Protocol\" \"auto\"
380 Option \"ZAxisMapping\" \"4 5\"
381 Option \"Buttons\" \"5\"
382 Option \"SendCoreEvents\" \"true\"
386 USBMOUSE='# InputDevice "USB Mouse" "CorePointer"'
390 if grep -q 'Device:.*Serial' "$MOUSEINFO" ; then
392 SERMOUSE='InputDevice "Serial Mouse" "CorePointer"'
394 Section \"InputDevice\"
395 Identifier \"Serial Mouse\"
397 Option \"Device\" \"/dev/ttyS0\"
398 Option \"Protocol\" \"Microsoft\"
399 Option \"Emulate3Buttons\" \"true\"
400 Option \"Emulate3Timeout\" \"70\"
401 Option \"SendCoreEvents\" \"true\"
405 SERMOUSE='# No serial mouse detected.'
409 # ImExPS/2 Logitech Explorer Mouse
410 # "PS2++ Logitech MX Mouse"
411 if [ -n "$USE_PS2" ] ; then
413 PS2MOUSE='InputDevice "PS/2 Mouse" "CorePointer"'
415 Section \"InputDevice\"
416 Identifier \"PS/2 Mouse\"
418 Option \"Device\" \"/dev/input/mice\"
419 # Option \"Device\" \"/dev/psaux\"
420 Option \"Protocol\" \"PS/2\"
421 Option \"Emulate3Buttons\" \"true\"
422 Option \"Emulate3Timeout\" \"70\"
423 Option \"SendCoreEvents\" \"true\"
427 PS2MOUSE='# InputDevice "PS/2 Mouse" "CorePointer"'
432 # Section \"InputDevice\"
433 # Identifier \"Generic Mouse\"
435 # Option \"Device\" \"/dev/input/mice\"
436 # Option \"Protocol\" \"auto\"
437 # Option \"ZAxisMapping\" \"4 5\"
438 # Option \"Buttons\" \"5\"
439 # Option \"SendCoreEvents\" \"true\"
450 # commandline parsing {{{
453 zparseopts -K -- module:=o_module help=o_help noddc=o_noddc nosync=o_nosync \
454 vsync:=o_vsync hsync:=o_hsync mode:=o_mode force=o_force display:=o_display \
455 nostart=o_nostart nodpms=o_nodpms nosynaptics=o_nosynaptics nousb=o_nousb \
456 nops2=o_nops2 genmouse=o_genmouse novref=o_novref nohsync=o_nohsync \
457 fallback=o_fallback usb=o_usb ps2=o_ps2 composite=o_composite \
460 if [[ $# == 0 || "$o_help" != "" || "$1" == '-h' || "$1" == '--help' ]]; then
464 if [[ "$o_force" != "" ]]; then
468 if [[ "$o_fallback" != "" ]]; then
470 if [ -r /etc/X11/xorg.conf.example ] ; then
471 sudo cp /etc/X11/xorg.conf.example $XCONFIG
472 print "$bold_color$fg[blue]Copying /etc/X11/xorg.conf.example to $XCONFIG as requested via fallback option."
474 echo 'Error: /etc/X11/xorg.conf.example not readable, exiting.'
479 if [[ "$o_nodpms" != "" ]]; then
480 DPMS='Option "DPMS" "false"'
482 DPMS='Option "DPMS" "true"'
485 if [[ "$o_noddc" != "" ]]; then
489 if [[ "$o_vsync" != "" ]]; then
493 if [[ "$o_hsync" != "" ]]; then
497 if [[ "$o_nousb" != "" ]]; then
498 echo 'Warning: option -nousb is deprecated.'>&2
501 if [[ "$o_usb" != "" ]]; then
505 if [[ "$o_nops2" != "" ]]; then
506 echo 'Warning: optino -nops2 is deprecatedË™'>&2
509 if [[ "$o_ps2" != "" ]]; then
513 if [[ "$o_genmouse" != "" ]]; then
517 if [[ "$o_nosynaptics" != "" ]]; then
523 if [[ "$o_nostart" != "" ]]; then
527 DISPLAY=$o_display[2]
529 eval WINDOWMANAGER=\${$#}
531 if [[ "$XKEYBOARD" == de ]] ; then
533 # Option \"XkbVariant\" \"nodeadkeys\""
536 if [ -n "$FORCE" -o ! -r "$XCONFIG" -a -z "$FALLBACK" ] ; then
537 print -n "$bold_color$fg[blue]Gathering hardware information...$fg[red]"
539 sync # get hsync/vsync
541 if [ -z "$o_hsync" ] ; then
542 o_hsync=(-hsync "$hsyncval")
544 HORIZSYNC=" HorizSync $HSYNC"
546 o_hsync=(-hsync "$o_hsync[2]")
548 HORIZSYNC=" HorizSync $HSYNC"
551 if [ -z "$o_vsync" ] ; then
552 o_vsync=(-vsync "$vsyncval")
554 VERTISYNC=" VertRefresh $VSYNC"
556 o_vsync=(-vsync "$o_vsync[2]")
558 VERTISYNC=" VertRefresh $VSYNC"
561 if [[ "$o_nosync" != "" ]]; then
562 HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nosync option of grml-x"
563 VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -nosync option of grml-x"
566 if [[ "$o_nohsync" != "" ]]; then
567 HORIZSYNC="# HorizSync 28.0 - 96.0 # deactivated via -nohsync option of grml-x"
570 if [[ "$o_novref" != "" ]]; then
571 VERTISYNC="# VertRefresh 50.0 - 60.0 # deactivated via -novref option of grml-x"
574 if [[ "$o_xinerama" != "" ]]; then
578 if [[ "$o_composite" != "" ]]; then
579 COMPOSITE="Section \"Extensions\"
580 Option \"Composite\" \"Enable\"
583 COMPOSITE="#Section \"Extensions\"
584 # Option \"Composite\" \"Enable\"
592 [ -r "$HWINFO_TMP" ] || bailout 1
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"
701 Option "AutoAddDevices" "off" # do not depend on running dbus/hal
705 Section "ServerFlags"
706 Option "AllowMouseOpenFail" "true" # allows the server to start up even if the mouse does not work
707 Option "DontVTSwitch" "false" # allow switching between virtual terminal
708 Option "DontZap" "false" # enable <Crtl><Alt><BS> (server abort)
709 # Option "DontZoom" "true" # disable <Crtl><Alt><KP_+>/<KP_-> (resolution switching)
713 # More information: http://ftp.x.org/pub/X11R7.0/doc/html/fonts.html
715 # FontPath "/usr/share/fonts/ttf/western"
716 # FontPath "/usr/share/fonts/ttf/decoratives"
717 FontPath "/usr/share/fonts/truetype/ttf-bitstream-vera"
718 FontPath "/usr/share/fonts/latex-ttf-fonts"
719 FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
722 # Modules - see /usr/lib/xorg/modules/fonts and /usr/lib/xorg/modules/extensions
724 Load "dbe" # double buffer extension
725 Load "dri" # direct rendering
726 Load "glx" # 3D layer / GLX extension
727 Load "type1" # type1 font module
728 Load "freetype" # freetype fonts rendering
729 Load "extmod" # some commonly used server extensions (e.g. shape extension)
730 Load "record" # recording extension
731 Load "evdev" # generic input handling driver on Linux
732 Load "xtrap" # X Trap extension
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 #################################################################
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 [ "$(readlink /etc/X11/X)" = /bin/true ] ; then
896 print "$bold_color$fg[red]Fatal: /etc/X11/X is a symlink to /bin/true."
897 print "Fix it via running 'ln -sf /usr/bin/Xorg /etc/X11/X'"
900 if [ -z "$NOSTART" ] ; then
902 if [ -x /etc/init.d/xorg-common ] ; then
903 sudo /etc/init.d/xorg-common start
905 if [ -x /etc/init.d/xfree86-common ] ; then
906 sudo /etc/init.d/xfree86-common start
910 if [ -z "$DISPLAY" ] ; then
911 print "$bold_color$fg[green]Now trying to run startx.$reset_color"
912 startx $XINITRC -- $XOPTS
915 print "$bold_color$fg[green]Now trying to run startx on display $DISPLAY.$reset_color"
916 startx $XINITRC -- :$DISPLAY $XOPTS
920 print "$bold_color$fg[blue]Not running startx as requested via option.$reset_color"
929 if [ -z "$ROOT" ] ; then
930 if [[ $(tty) == /dev/pts/* ]] ; then
931 print "It seems you are running $PROGRAMNAME from inside GNU screen.
932 Notice that this might fail if running as user grml!
933 Please exit screen and try to run $PROGRAMNAME again."
936 print "Run the following commands for getting information on your hardware:
938 discover -v --data-path=xfree86/server/device/driver display
939 xdebconfigurator -c -d -i -x
940 get-edid | parse-edid
942 Do you want to go the debian way of life? Run:
943 aptitude install xorg read-edid mdetect hwinfo xdebconfigurator
944 dpkg-reconfigure -phigh xserver-xorg
946 Problems with the module used for X? Try to load another one or
947 fall back to module vesa:
948 $PROGRAMNAME -module radeon ...
949 $PROGRAMNAME -module vesa ...
951 Do you want to deactivate a present synaptics touchpad? Run:
952 $PROGRAMNAME -nosynaptics ...
954 Your monitor is very old and/or does not support DDC-probing?
955 $PROGRAMNAME -noddc ...
957 Do you want to create a x configuration file but do not start X?
958 $PROGRAMNAME -nostart ...
960 Monitor frequency too high or too low? Just specify hsync/vsync manually:
961 $PROGRAMNAME -hsync 30-65 ...
962 $PROGRAMNAME -hsync 30-65 -vsync 50-60 ...
964 Want to adjust the resolution? Use the mode-switch:
965 $PROGRAMNAME -mode 1024x768 ...
966 $PROGRAMNAME -mode '1280x1024 1024x768' ...
968 Problems? Use vesa with resolution 1024x768:
969 $PROGRAMNAME -module vesa -mode 1024x768 ...
971 Still problems with X? Use the fallback option:
972 $PROGRAMNAME -fallback ...
974 To adjust resolution while running X execute:
977 More information on grml-x can be found in the manual page: man grml-x
979 Report bugs, send wishes and feedback to the grml team:
980 http://grml.org/bugs/ - contact (at) grml.org
982 print -n "$reset_color"
998 if ! [ -x "$(which $WINDOWMANAGER)" ] ; then
999 print "$bg[black]$fg[red]${bold_color}Fatal: windowmanager $fg[blue]$WINDOWMANAGER$fg[red] not executable, startx will not work.${reset_color}">&2
1002 if [ -w "$XINITRC" ] ; then
1003 sed -i "s|^[^#]*exec.*| exec $WINDOWMANAGER|g" $XINITRC
1006 echo -e "#!/bin/sh\n exec $WINDOWMANAGER" >> $XINITRC
1011 ## END OF FILE #################################################################
1012 # vim:foldmethod=marker expandtab ai ft=zsh