slitaz-tools annotate tinyutils/tazx @ rev 719

tazx: Configure Xorg on DISPLAY 2 to avoid any conflict
author Christophe Lincoln <pankso@slitaz.org>
date Sat Mar 24 13:56:00 2012 +0100 (2012-03-24)
parents 4e9851adef56
children 29fe613b2eb6
rev   line source
pankso@4 1 #!/bin/sh
pankso@4 2 #
pankso@66 3 # Tazx - Ncurses X configuration for SliTaz GNU/Linux using Dialog boxes.
pankso@535 4 # This tinyutils is part of slitaz-tools. Tazx can configure Xorg with
pankso@626 5 # several Window Managers. The GTK interface to configure X is in tazbox.
pankso@4 6 #
pankso@535 7 # (c) 2011 SliTaz GNU/Linux - GNU gpl v3.
pankso@209 8 # Authors: Christophe Lincoln <pankso@slitaz.org>
pankso@209 9 # Pascal Bellard <pascal.bellard@slitaz.org>
pankso@4 10 #
pankso@626 11 : ${DIALOG=dialog}
pankso@4 12
pankso@535 13 # Default value.
pankso@351 14 WM=openbox
pankso@351 15
pankso@534 16 # Default user for config files in Live mode, id is 1000 since it is
pankso@534 17 # created by /etc/init.d/bootopts.sh.
pankso@626 18 USER=$(cat /etc/passwd | grep 1000 | cut -d ":" -f 1)
pankso@4 19
pankso@626 20 # Internationalization
pankso@626 21 . /usr/bin/gettext.sh
pankso@626 22 TEXTDOMAIN='slitaz-tools'
pankso@626 23 export TEXTDOMAIN
pankso@615 24
pankso@628 25 #
pankso@615 26 # Functions
pankso@628 27 #
pankso@615 28
pankso@615 29 # Be sure we're root.
pankso@615 30 check_root() {
pankso@628 31 if [ $(id -u) != 0 ]; then
pankso@628 32 gettext "You must be root to configure X server."
pankso@628 33 echo "" && exit 0
pankso@628 34 fi
pankso@615 35 }
pankso@66 36
gokhlayeh@492 37 # Populate xorg.conf.d.
gokhlayeh@492 38 xorg_conf_d()
pankso@260 39 {
gokhlayeh@492 40 # Define the xorg.conf.d (can be /etc/X11/xorg.conf.d or /usr/share/X11/xorg.conf.d)
gokhlayeh@492 41 xorg_config=/etc/X11/xorg.conf.d
gokhlayeh@492 42
gokhlayeh@492 43 # Define the xorg.conf.new place.
gokhlayeh@492 44 xorg_template=/root/xorg.conf.new
gokhlayeh@492 45
gokhlayeh@492 46 # Obtain a default configuration file from Xorg.
pankso@719 47 Xorg -configure :2
gokhlayeh@492 48
paul@515 49 # Backup existing config.
gokhlayeh@513 50 tar -cf $xorg_config/../Previous_xorg.conf.d.tar $xorg_config/ &> /dev/null
gokhlayeh@513 51
pankso@628 52 # Put the differents sections in separate files in the config directory.
pankso@628 53 sed -e '/Section "ServerLayout"/,/EndSection/!d' \
pankso@628 54 -e "s/EndSection/EndSection\n/" $xorg_template | \
pankso@628 55 grep -v Core > $xorg_config/10-ServerLayout.conf
pankso@628 56 sed -e '/Section "Files"/,/EndSection/!d' \
pankso@628 57 -e "s/EndSection/EndSection\n/" $xorg_template > \
pankso@628 58 $xorg_config/20-Files.conf
pankso@628 59 sed -e '/Section "Module"/,/EndSection/!d' \
pankso@628 60 -e "s/EndSection/EndSection\n/" $xorg_template > \
pankso@628 61 $xorg_config/30-Module.conf
pankso@628 62 sed -e '/Section "Monitor"/,/EndSection/!d' \
pankso@628 63 -e "s/EndSection/EndSection\n/" $xorg_template > \
pankso@628 64 $xorg_config/50-Monitor.conf
pankso@628 65 sed -e '/Section "Device"/,/EndSection/!d' \
pankso@628 66 -e "s/EndSection/EndSection\n/" $xorg_template > \
pankso@628 67 $xorg_config/60-Device.conf
pankso@628 68 sed -e '/Section "Screen"/,/EndSection/!d' \
pankso@628 69 -e "s/EndSection/EndSection\n/" $xorg_template > \
pankso@628 70 $xorg_config/70-Screen.conf
gokhlayeh@492 71
gokhlayeh@492 72 # Remove the template.
gokhlayeh@492 73 rm $xorg_template
gokhlayeh@492 74
gokhlayeh@492 75 # Configure the keyboard with the right keymap.
gokhlayeh@492 76 keymap=`cat /etc/keymap.conf`
gokhlayeh@492 77 keyboard_config=$xorg_config/40-Keyboard.conf
gokhlayeh@492 78 echo 'Section "InputClass"
gokhlayeh@494 79 Identifier "Keyboard Defaults"
gokhlayeh@494 80 MatchIsKeyboard "yes"' > $keyboard_config
gokhlayeh@494 81 case $keymap in
pankso@260 82 fr_CH-latin1)
pankso@260 83 # Swiss FrenCH
gokhlayeh@492 84 echo ' Option "XkbLayout" "ch"
pankso@577 85 Option "XkbVariant" "fr"' >> $keyboard_config ;;
pankso@597 86 uk)
paul@617 87 # English UK
pankso@597 88 echo ' Option "XkbLayout" "gb"' >> $keyboard_config ;;
pankso@260 89 ru)
pankso@260 90 # Russian
gokhlayeh@492 91 echo ' Option "XkbLayout" "us,ru(winkeys)"
pankso@711 92 Option "XkbOptions" "grp:ctrl_shift_toggle, grp_led:scroll"' >> $keyboard_config ;;
pankso@303 93 slovene)
pankso@303 94 # Slovenian
gokhlayeh@492 95 echo ' Option "XkbLayout" "si"
pankso@577 96 Option "XkbOptions" "grp:alt_shift_toggle"' >> $keyboard_config ;;
pankso@577 97 us-acentos)
pankso@577 98 echo ' Option "XkbLayout" "us"
pankso@577 99 Option "XkbVariant" "intl"' >> $keyboard_config ;;
pankso@260 100 *)
pankso@260 101 # Use clean /etc/keymap.conf value.
gokhlayeh@492 102 keymap=${keymap%-latin1}
gokhlayeh@492 103 keymap=${keymap%-lat2}
gokhlayeh@492 104 keymap=${keymap%-lat6}
gokhlayeh@492 105 keymap=${keymap%-abnt2}
pankso@628 106 echo ' Option "XkbLayout" "'$keymap\" >> $keyboard_config ;;
pankso@260 107 esac
gokhlayeh@492 108
gokhlayeh@492 109 echo 'Endsection' >> $keyboard_config
gokhlayeh@492 110
gokhlayeh@492 111 # Create a xorg.conf if needed.
pankso@628 112 if [ ! -f /etc/X11/xorg.conf ]; then
pankso@628 113 cat > /etc/X11/xorg.conf << EOT
pankso@628 114 # You can put here your own Xorg configurations. This config file is read
pankso@628 115 # before all files in /etc/X11/xorg.conf.d and will NOT be erased by any
slaxemulator@645 116 # updates.
pankso@628 117 EOT
pankso@628 118 fi
pankso@260 119 }
pankso@260 120
paul@549 121 # Install xorg server.
pankso@117 122 install_xorg()
pankso@117 123 {
pankso@628 124 [ -f "/var/lib/tazpkg/packages.list" ] || tazpkg recharge
pankso@117 125 exec 3>&1
pankso@634 126 value=`$DIALOG --clear --colors --title " $(gettext "Install Xorg") " \
pankso@634 127 --menu "\
pankso@634 128 $(gettext "Tazx helps you to select your X driver.")" 16 70 5 \
pankso@635 129 $(fgrep xorg-xf86-video /var/lib/tazpkg/packages.list | cut -d- -f4 | \
pankso@635 130 while read x; do echo $x; echo driver; done) \
pankso@117 131 "quit" "Quitter" \
pankso@117 132 2>&1 1>&3`
pankso@117 133 retval=$?
pankso@117 134 exec 3>&-
pankso@628 135
pankso@628 136 # Continue or exit.
pankso@117 137 case $retval in
pankso@628 138 0) continue ;;
pankso@628 139 1|255) exit 0 ;;
pankso@117 140 esac
pankso@628 141
pankso@117 142 # Set selected value.
pankso@117 143 case $value in
pankso@628 144 quit) exit 0 ;;
pankso@117 145 *)
pankso@628 146 installed=/var/lib/tazpkg/installed/
pankso@628 147 [ -d "$installed/xorg-server" ] || tazpkg get-install xorg-server
pankso@628 148 [ -d "$installed/xorg-xf86-video-$value" ] || \
pankso@628 149 tazpkg get-install xorg-xf86-video-$value
pankso@628 150 xorg_conf_d ;;
pankso@117 151 esac
pankso@117 152 }
pankso@117 153
pankso@628 154 # Screen configuration dialog. TODO: menus items to enable/disable X on boot
pankso@628 155 # and sed /etc/rcS.conf to remove slim from RUN_DAEMONS.
pankso@628 156 config_dialog()
pankso@66 157 {
pankso@66 158 exec 3>&1
pankso@535 159 value=`$DIALOG \
pankso@535 160 --clear --colors \
pankso@535 161 --title " Configure X " \
pankso@628 162 --menu "\
pankso@634 163 $(gettext "Tazx dialog helps you to configure your Xorg sever.")\n\
pankso@628 164 $(gettext "Window Manager:") \Z2$WM\Zn \
pankso@628 165 $(gettext "X server:") \Z2Xorg\Zn" 16 70 5 \
pankso@628 166 "xorg" "$(gettext "Install or reconfigure Xorg")" \
pankso@628 167 "xfbdev" "$(gettext "Install TinyX server Xfbdev")" \
pankso@628 168 "quit" "$(gettext "Quit Tazx utility")" \
pankso@535 169 2>&1 1>&3`
pankso@66 170 retval=$?
pankso@66 171 exec 3>&-
pankso@628 172
pankso@628 173 # Continue or exit.
pankso@66 174 case $retval in
pankso@628 175 0) continue ;;
pankso@628 176 1|255) exit 0 ;;
pankso@66 177 esac
pankso@628 178
pankso@66 179 # Set selected value.
pankso@66 180 case $value in
pankso@117 181 xorg)
pankso@339 182 install_xorg ;;
pankso@628 183 xfbdev)
pankso@628 184 # FIXME: Much to do here, for now just install Xfbdev.
pankso@685 185 tazpkg get-install xorg-server-Xfbdev ;;
pankso@628 186 *) exit 0 ;;
pankso@66 187 esac
pankso@66 188 }
pankso@4 189
pankso@339 190 # Window manager specific configuration.
pankso@339 191 wm_config()
pankso@66 192 {
pankso@339 193 case $WM in
pankso@339 194 ob|openbox)
pankso@339 195 WM=openbox-session
pankso@339 196 # Check if a personal autostart script exists if OB is installed.
pankso@339 197 if [ -d "/var/lib/tazpkg/installed/openbox" ]; then
pankso@339 198 if [ ! -f "$HOME/.config/openbox/autostart.sh" ]; then
pankso@339 199 mkdir -p $HOME/.config/openbox
pankso@339 200 cp /etc/xdg/openbox/autostart.sh $HOME/.config/openbox
pankso@339 201 fi
pankso@339 202 # Script for default user (uid=1000).
pankso@339 203 if [ ! -f "/home/$USER/.config/openbox/autostart.sh" ]; then
pankso@339 204 mkdir -p /home/$USER/.config/openbox
pankso@339 205 cp /etc/xdg/openbox/autostart.sh /home/$USER/.config/openbox
pankso@339 206 fi
pankso@339 207 if [ ! -f "/home/$USER/.config/openbox/menu.xml" ]; then
pankso@339 208 mkdir -p /home/$USER/.config/openbox
pankso@339 209 cp /etc/xdg/openbox/menu.xml /home/$USER/.config/openbox
pankso@339 210 fi
slaxemulator@540 211 chown -R $USER.users /home/$USER/.config
pankso@339 212 fi ;;
pankso@339 213 jwm)
pankso@339 214 WM=jwm
pankso@339 215 JWM_CONFIG=$HOME/.jwmrc
pankso@339 216 if [ -d "/var/lib/tazpkg/installed/jwm" ]; then
pankso@339 217 if [ ! -f "$JWM_CONFIG" ]; then
pankso@339 218 cp /etc/jwm/system.jwmrc $JWM_CONFIG
pankso@339 219 fi
pankso@339 220 # In Live mode default user/root JWM config does not exist and
pankso@402 221 # $HOME is not set, this is because tazx is executed by boot
pankso@339 222 # scripts.
pankso@339 223 if [ ! -f "/home/$USER/.jwmrc" ]; then
pankso@339 224 cp /etc/jwm/system.jwmrc /home/$USER/.jwmrc
slaxemulator@540 225 chown $USER.users /home/$USER/.jwmrc
pankso@339 226 fi
pankso@339 227 if [ ! -f "/root/.jwmrc" -a `id -u` = 0 ]; then
pankso@339 228 cp /etc/jwm/system.jwmrc /root/.jwmrc
pankso@339 229 fi
pankso@339 230 fi ;;
pankso@339 231 pekwm)
pankso@339 232 WM=pekwm
pankso@339 233 if [ -d "/var/lib/tazpkg/installed/pekwm" ]; then
pankso@339 234 if [ -d "$HOME/.pekwm" ]; then
pankso@339 235 cp -R /etc/pekwm $HOME/.pekwm
pankso@339 236 fi
pankso@339 237 # In Live mode we want config before starting pekwm the first time.
pankso@339 238 if [ ! -d "/home/$USER/.pekwm" ]; then
pankso@339 239 cp -R /etc/pekwm /home/$USER/.pekwm
slaxemulator@540 240 chown -R $USER.users /home/$USER/.pekwm
pankso@339 241 chmod +x /home/$USER/.pekwm/start
pankso@339 242 fi
pankso@339 243 if [ ! -d "/root/.pekwm" -a `id -u` = 0 ]; then
pankso@339 244 cp -R /etc/pekwm /root/.pekwm
pankso@339 245 chmod +x /root/.pekwm/start
pankso@339 246 fi
pankso@339 247 fi ;;
pankso@339 248 e17|enlightenment)
pankso@535 249 WM=enlightenment_start ;;
pankso@339 250 fluxbox)
pankso@535 251 WM=startfluxbox ;;
pankso@339 252 dwm|karmen)
pankso@535 253 WM=$WM-session ;;
pankso@339 254 awesome)
pankso@535 255 WM=awesome ;;
erjo@396 256 xfce|xfce4)
pankso@535 257 WM=xfce4-session ;;
pankso@339 258 esac
pankso@81 259 }
pankso@81 260
pankso@68 261 # Sample xinitrc for user (WM can be specified with F1 at slim login).
pankso@68 262 xinitrc_sample()
pankso@68 263 {
pankso@68 264 cat > $FILE << "EOF"
pankso@68 265 # ~/.xinitrc: Executed by slim login manager to startx X session.
paul@515 266 # You can use F1 with Slim to change your window manager or configure
paul@515 267 # it permanently with your personal applications.conf file.
pankso@68 268 #
pankso@339 269 . $HOME/.config/slitaz/applications.conf
pankso@99 270
pankso@117 271 case $1 in
pankso@339 272 e17|enlightenment*)
pankso@315 273 exec enlightenment_start ;;
pankso@162 274 openbox|openbox-session|ob)
pankso@315 275 exec openbox-session ;;
pankso@315 276 dwm|dwm-session)
pankso@315 277 exec dwm-session ;;
pankso@339 278 fluxbox|startfluxbox)
pankso@339 279 exec startfluxbox ;;
pankso@339 280 awesome)
pankso@339 281 exec awesome ;;
pankso@339 282 pekwm)
pankso@339 283 exec pekwm ;;
pankso@339 284 karmen|karmen-session)
pankso@339 285 exec karmen-session ;;
pankso@117 286 jwm)
pankso@81 287 lxpanel &
pankso@315 288 exec jwm ;;
erjo@396 289 xfce|xfce4|xfce4-session)
erjo@396 290 xfce4-session ;;
pankso@117 291 *)
pankso@339 292 exec $WINDOW_MANAGER ;;
pankso@68 293 esac
pankso@68 294 EOF
pankso@339 295 # Set default WM in applications.conf user file. Default WM can be
paul@515 296 # configured graphically with 'desktopbox tazapps'
pankso@339 297 . $CONFIG
pankso@339 298 sed -i s/"WINDOW_MANAGER=.*"/"WINDOW_MANAGER=\"$WM\""/ \
pankso@339 299 $CONFIG
pankso@68 300 }
pankso@68 301
pankso@535 302 # ~/.xinitrc for X login from a DM.
pankso@66 303 creat_xinitrc()
pankso@66 304 {
pankso@68 305 FILE=$HOME/.xinitrc
pankso@339 306 CONFIG=$HOME/.config/slitaz/applications.conf
pankso@339 307 if [ ! -f $CONFIG ]; then
pankso@339 308 mkdir -p $HOME/.config/slitaz
pankso@339 309 cp /etc/slitaz/applications.conf $CONFIG
pankso@339 310 fi
pankso@68 311 xinitrc_sample
pankso@535 312 # .xinitrc and config for /etc/skel so new added user will get
pankso@535 313 # a working X session.
pankso@535 314 if test $(id -u) = 0; then
pankso@535 315 FILE=/etc/skel/.xinitrc
pankso@535 316 CONFIG=/etc/skel/.config/slitaz/applications.conf
pankso@535 317 mkdir -p /etc/skel/.config/slitaz
pankso@535 318 cp -f /etc/slitaz/applications.conf $CONFIG
pankso@535 319 xinitrc_sample
pankso@535 320 fi
pankso@209 321 # In Live mode default user needs a xinitrc, since tazx
pankso@68 322 # is executed only by root.
slaxemulator@538 323 CONFIG=/home/$USER/.config/slitaz/applications.conf
slaxemulator@538 324 if [ ! -f $CONFIG ]; then
slaxemulator@538 325 mkdir -p /home/$USER/.config/slitaz
slaxemulator@538 326 cp /etc/slitaz/applications.conf $CONFIG
slaxemulator@538 327 fi
slaxemulator@540 328 chown -R $USER.users /home/$USER/.config/slitaz
pankso@209 329 if [ ! -f /home/$USER/.xinitrc ]; then
pankso@209 330 FILE=/home/$USER/.xinitrc
pankso@68 331 xinitrc_sample
slaxemulator@540 332 chown $USER.users $FILE
pankso@105 333 fi
pankso@66 334 }
pankso@45 335
MikeDSmith25@252 336 # Create ~/.xsession to keep the configuration selected (used
MikeDSmith25@252 337 # only by startx, Slim login manager uses .xinitrc).
pankso@66 338 creat_xsession()
pankso@66 339 {
gokhlayeh@513 340 [ -f $HOME/.xsession ] && cp -f $HOME/.xsession $HOME/.previous_xsession
pankso@68 341 cat > $HOME/.xsession << _EOF_
pankso@68 342 # ~/.xsession: Start X window session manually on your system (startx).
pankso@37 343 #
pankso@535 344 Xorg &
pankso@535 345 #xterm &
pankso@68 346 _EOF_
pankso@99 347 # LXpanel by default with JWM.
pankso@117 348 if [ "$WM" = "jwm" ]; then
pankso@99 349 echo 'lxpanel &' >> $HOME/.xsession
pankso@99 350 fi
pankso@104 351 echo "exec $WM" >> $HOME/.xsession
pankso@66 352 chmod 700 $HOME/.xsession
pankso@66 353 }
pankso@4 354
pankso@615 355
pankso@615 356 # Commands - WM can be specified on cmdline.
pankso@66 357
pankso@351 358 case "$1" in
pankso@351 359 install-xorg)
pankso@615 360 check_root
pankso@351 361 if [ -n "$2" ]; then
pankso@402 362 WM=$2
pankso@351 363 fi
pankso@535 364 echo "xorg" > /etc/X11/screen.conf
pankso@351 365 install_xorg
pankso@351 366 wm_config
pankso@351 367 creat_xinitrc
pankso@351 368 creat_xsession ;;
pankso@415 369 config-xorg)
pankso@615 370 check_root
pankso@415 371 if [ -n "$2" ]; then
pankso@415 372 WM=$2
pankso@415 373 fi
pankso@535 374 echo "xorg" > /etc/X11/screen.conf
pankso@415 375 wm_config
pankso@415 376 creat_xinitrc
pankso@415 377 creat_xsession
pascal@564 378 xorg_conf_d
pascal@564 379 if grep -qs screen= /proc/cmdline ; then
pascal@564 380 MODE="$(sed 's/.*screen=\([0-9]*x[0-9]*\).*/\1/' < /proc/cmdline)"
pascal@564 381 sed -i "s/.*EndSubSection.*/\\t\\tModes\\t\"$MODE\"\\n&/" \
pascal@564 382 /etc/X11/xorg.conf.d/70-Screen.conf
pascal@564 383 fi ;;
pankso@351 384 *)
pankso@615 385 # User can get a new .xinitrc with tazx from cmdline.
pankso@351 386 if [ -n "$1" ]; then
pankso@402 387 WM=$1
pankso@351 388 fi
pankso@535 389 if test $(id -u) = 0; then
pankso@535 390 echo "xorg" > /etc/X11/screen.conf
pankso@628 391 config_dialog
pankso@535 392 fi
pankso@351 393 wm_config
pankso@351 394 creat_xinitrc
pankso@351 395 creat_xsession ;;
pankso@351 396 esac
pankso@4 397
pankso@4 398 exit 0