slitaz-tools annotate tinyutils/tazx @ rev 516

tazx: incorrect tux; slitaz installer creates 1008 user
author Rohit Joshi <jozee@slitaz.org>
date Wed Nov 10 20:26:12 2010 -0500 (2010-11-10)
parents b1d5d569e454
children a5216abd91c5
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@351 4 # This tinyutils is part of slitaz-tools. Tazx can configure Xvesa kdrive
paul@515 5 # and Xorg with several Window Managers.
pankso@4 6 #
pankso@450 7 # (c) 2010 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 #
pascal@190 11 : ${DIALOG=tazdialog}
pankso@4 12
pankso@450 13 # Default value fo Xvesa.
pankso@4 14 XSERVER=Xvesa
pankso@351 15 KEYBD=keyboard
pankso@351 16 MOUSE=mouse,5,/dev/input/mice
pankso@351 17 WM=openbox
pankso@351 18
pankso@339 19 # Default user for config files in Live mode.
jozee@516 20 USER=`cat /etc/passwd | grep "/home" | cut -d ":" -f 1`
pankso@4 21
pankso@66 22 ####################
pankso@66 23 # Tazx functions #
pankso@66 24 ####################
pankso@66 25
gokhlayeh@492 26 # Populate xorg.conf.d.
gokhlayeh@492 27 xorg_conf_d()
pankso@260 28 {
gokhlayeh@492 29 # Define the xorg.conf.d (can be /etc/X11/xorg.conf.d or /usr/share/X11/xorg.conf.d)
gokhlayeh@492 30 xorg_config=/etc/X11/xorg.conf.d
gokhlayeh@492 31
gokhlayeh@492 32 # Define the xorg.conf.new place.
gokhlayeh@492 33 xorg_template=/root/xorg.conf.new
gokhlayeh@492 34
gokhlayeh@492 35 # Obtain a default configuration file from Xorg.
gokhlayeh@492 36 Xorg -configure :1
gokhlayeh@492 37
paul@515 38 # Backup existing config.
gokhlayeh@513 39 tar -cf $xorg_config/../Previous_xorg.conf.d.tar $xorg_config/ &> /dev/null
gokhlayeh@513 40
gokhlayeh@492 41 # Put the differents sections in separate files in the configuration directory.
gokhlayeh@492 42 sed -e '/Section "ServerLayout"/,/EndSection/!d' -e "s/EndSection/EndSection\n/" $xorg_template | grep -v Core > $xorg_config/10-ServerLayout.conf
gokhlayeh@492 43 sed -e '/Section "Files"/,/EndSection/!d' -e "s/EndSection/EndSection\n/" $xorg_template > $xorg_config/20-Files.conf
gokhlayeh@492 44 sed -e '/Section "Module"/,/EndSection/!d' -e "s/EndSection/EndSection\n/" $xorg_template > $xorg_config/30-Module.conf
gokhlayeh@492 45 sed -e '/Section "Monitor"/,/EndSection/!d' -e "s/EndSection/EndSection\n/" $xorg_template > $xorg_config/50-Monitor.conf
gokhlayeh@492 46 sed -e '/Section "Device"/,/EndSection/!d' -e "s/EndSection/EndSection\n/" $xorg_template > $xorg_config/60-Device.conf
gokhlayeh@492 47 sed -e '/Section "Screen"/,/EndSection/!d' -e "s/EndSection/EndSection\n/" $xorg_template > $xorg_config/70-Screen.conf
gokhlayeh@492 48
gokhlayeh@492 49 # Remove the template.
gokhlayeh@492 50 rm $xorg_template
gokhlayeh@492 51
gokhlayeh@492 52 # Configure the keyboard with the right keymap.
gokhlayeh@492 53 keymap=`cat /etc/keymap.conf`
gokhlayeh@492 54 keyboard_config=$xorg_config/40-Keyboard.conf
gokhlayeh@492 55 echo 'Section "InputClass"
gokhlayeh@494 56 Identifier "Keyboard Defaults"
gokhlayeh@494 57 MatchIsKeyboard "yes"' > $keyboard_config
gokhlayeh@494 58 case $keymap in
pankso@260 59 fr_CH-latin1)
pankso@260 60 # Swiss FrenCH
gokhlayeh@492 61 echo ' Option "XkbLayout" "ch"
gokhlayeh@494 62 Option "XkbVariant" "fr"' >> $keyboard_config
gokhlayeh@492 63 ;;
pankso@260 64 en)
pankso@260 65 # Englisk UK
gokhlayeh@492 66 echo ' Option "XkbLayout" "en"
gokhlayeh@494 67 Option "XkbVariant" "en"' >> $keyboard_config
gokhlayeh@492 68 ;;
pankso@260 69 ru)
pankso@260 70 # Russian
gokhlayeh@492 71 echo ' Option "XkbLayout" "us,ru(winkeys)"
gokhlayeh@494 72 Option "XkbVariant" "grp:alt_shift_toggle"' >> $keyboard_config
gokhlayeh@492 73 ;;
pankso@303 74 slovene)
pankso@303 75 # Slovenian
gokhlayeh@492 76 echo ' Option "XkbLayout" "si"
gokhlayeh@494 77 Option "XkbOptions" "grp:alt_shift_toggle"' >> $keyboard_config
gokhlayeh@492 78 ;;
pankso@260 79 *)
pankso@260 80 # Use clean /etc/keymap.conf value.
gokhlayeh@492 81 keymap=${keymap%-latin1}
gokhlayeh@492 82 keymap=${keymap%-lat2}
gokhlayeh@492 83 keymap=${keymap%-lat6}
gokhlayeh@492 84 keymap=${keymap%-abnt2}
gokhlayeh@492 85 echo ' Option "XkbLayout" "'$keymap\" >> $keyboard_config
pankso@260 86 ;;
pankso@260 87 esac
gokhlayeh@492 88
gokhlayeh@492 89 echo 'Endsection' >> $keyboard_config
gokhlayeh@492 90
gokhlayeh@492 91 # Create a xorg.conf if needed.
paul@515 92 [ ! -f /etc/X11/xorg.conf ] && echo "# You can put here your own Xorg configurations.
paul@515 93 # This configuration file is read before all files in /etc/X11/xorg.conf.d
paul@515 94 # This file will not be erased by any updates." > /etc/X11/xorg.conf
pankso@260 95 }
pankso@260 96
pankso@117 97 # Install xorg server
pankso@117 98 install_xorg()
pankso@117 99 {
pankso@117 100 tazpkg recharge
pankso@117 101 exec 3>&1
pankso@117 102 value=`$DIALOG --clear --colors --title " Install Xorg " \
pankso@117 103 --menu \
paul@334 104 "The 'tazx' application helps you to select your X driver." 16 70 5 \
pankso@117 105 $(grep xorg-xf86-video /var/lib/tazpkg/packages.list | cut -d- -f4 | while read x; do echo $x; echo driver; done) \
pankso@117 106 "quit" "Quitter" \
pankso@117 107 2>&1 1>&3`
pankso@117 108 retval=$?
pankso@117 109 exec 3>&-
pankso@117 110 # Continue, exit...
pankso@117 111 case $retval in
pankso@117 112 1)
pankso@117 113 echo "Cancel pressed..."
pankso@117 114 exit 0 ;;
pankso@117 115 255)
pankso@117 116 if test -z "$value"; then
pankso@117 117 echo "ESC pressed..."
pankso@117 118 exit 0
pankso@117 119 fi ;;
pankso@117 120 esac
pankso@117 121 # Set selected value.
pankso@117 122 case $value in
pankso@117 123 quit)
pankso@117 124 echo "Quit..."
pankso@117 125 exit 0 ;;
pankso@117 126 *)
pankso@117 127 tazpkg get-install xorg-server
pankso@117 128 tazpkg get-install xorg-xf86-video-$value
gokhlayeh@492 129 xorg_conf_d
pankso@117 130 sed -i 's|/usr/bin/Xvesa|/usr/bin/Xorg|' /etc/slim.conf
pankso@117 131 sed -i s/"^xserver_arguments"/'\#xserver_arguments'/ /etc/slim.conf
pankso@351 132 XSERVER=Xorg ;;
pankso@117 133 esac
pankso@117 134 }
pankso@117 135
pankso@66 136 # Screen configuration dialog.
pankso@66 137 screen_config_dialog()
pankso@66 138 {
pankso@66 139 exec 3>&1
pankso@450 140 if [ -x /usr/bin/Xvesa ]; then
pankso@450 141 value=`$DIALOG \
pankso@450 142 --clear --colors \
pankso@450 143 --title " Configure X " \
pankso@450 144 --menu \
pankso@450 145 "The 'tazx' application helps you to configure your X session.\n\
pankso@450 146 Window Manager : \Z2$WM\Zn \n\
pankso@450 147 X server : \Z2Xvesa\Zn" 16 70 5 \
pankso@450 148 $(Xvesa -listmodes 2>&1 | grep ^0x | awk '{ printf "%s %s\n",$2,$3 }' | sort -nr | grep x[1-2][4-6]) \
pankso@450 149 "xterm" "800x600x16" \
pankso@450 150 "xorg" "Install or reconfigure Xorg" \
pankso@450 151 "text" "Disable X autostart" \
pankso@450 152 "quit" "Quit Tazx utility" \
pankso@450 153 2>&1 1>&3`
pankso@450 154 else
pankso@450 155 value=`$DIALOG \
pankso@450 156 --clear --colors \
pankso@450 157 --title " Configure X " \
pankso@450 158 --menu \
pankso@450 159 "The 'tazx' application helps you to configure your X session.\n\
pankso@450 160 Window Manager : \Z2$WM\Zn \n\
pankso@450 161 X server : \Z2Xorg\Zn" 16 70 5 \
pankso@450 162 "xorg" "Install or reconfigure Xorg" \
pankso@450 163 "text" "Disable X autostart" \
pankso@450 164 "quit" "Quit Tazx utility" \
pankso@450 165 2>&1 1>&3`
pankso@450 166 fi
pankso@66 167 retval=$?
pankso@66 168 exec 3>&-
pankso@66 169 # Continue, exit or help...
pankso@66 170 case $retval in
pankso@66 171 0)
pankso@66 172 continue ;;
pankso@66 173 1)
pankso@66 174 echo "Cancel pressed..."
pankso@66 175 exit 0 ;;
pankso@66 176 255)
pankso@66 177 if test -n "$value"; then
pankso@66 178 continue
pankso@66 179 else
pankso@66 180 echo "ESC pressed..."
pankso@66 181 exit 0
pankso@66 182 fi ;;
pankso@66 183 esac
pankso@66 184 # Set selected value.
pankso@66 185 case $value in
pankso@117 186 xorg)
pankso@339 187 install_xorg ;;
pankso@66 188 xterm)
paul@515 189 # Only with Xvesa.
pankso@66 190 Xvesa -ac -shadow -screen 800x600x16 -br &
pankso@66 191 exec xterm -cr orange -geometry 80x35+0-0 ;;
pascal@386 192 text)
pascal@386 193 sed -i s/'slim'/''/ /etc/rcS.conf
pascal@386 194 exit 0 ;;
pankso@66 195 *)
pankso@68 196 NEW_SCREEN=$value ;;
pankso@66 197 esac
pankso@66 198 }
pankso@4 199
pankso@65 200 # Slim config if root.
pankso@66 201 slim_config()
pankso@66 202 {
pankso@66 203 if test $(id -u) = 0; then
paul@317 204 # /etc/X11/screen.conf exists for Live mode, if this file does not
pankso@68 205 # exist tazx is executed at boot time.
pankso@68 206 mkdir -p /etc/X11
pankso@68 207 echo "SCREEN=$NEW_SCREEN" > /etc/X11/screen.conf
pankso@67 208 # Get current screen size and sed config file with the new value.
pankso@66 209 if [ -f /etc/slim.conf ]; then
gokhlayeh@513 210 XSERV_ARGS=$(grep ^xserver_arguments /etc/slim.conf)
gokhlayeh@513 211 RES=$( echo $XSERV_ARGS | sed 's/xserver_arguments.*-screen *//' | awk '{print $1 }')
gokhlayeh@513 212 NEW_XSERV_ARGS=$(echo $XSERV_ARGS | sed s/"-screen $RES"/"-screen $NEW_SCREEN"/)
gokhlayeh@513 213 # Comment the old one and put the new one in the config file
gokhlayeh@513 214 sed -i 's/"$XSERV_ARGS"/"# $XSERV_ARGS\n$NEW_XSERV_ARGS"/' /etc/slim.conf
gokhlayeh@513 215
pankso@66 216 fi
pankso@65 217 fi
pankso@66 218 }
pankso@66 219
pankso@339 220 # Window manager specific configuration.
pankso@339 221 wm_config()
pankso@66 222 {
pankso@339 223 case $WM in
pankso@339 224 ob|openbox)
pankso@339 225 WM=openbox-session
pankso@339 226 XSEVER_OPTS="dpms +extension Composite"
pankso@339 227 # Check if a personal autostart script exists if OB is installed.
pankso@339 228 if [ -d "/var/lib/tazpkg/installed/openbox" ]; then
pankso@339 229 if [ ! -f "$HOME/.config/openbox/autostart.sh" ]; then
pankso@339 230 mkdir -p $HOME/.config/openbox
pankso@339 231 cp /etc/xdg/openbox/autostart.sh $HOME/.config/openbox
pankso@339 232 fi
pankso@339 233 # Script for default user (uid=1000).
pankso@339 234 if [ ! -f "/home/$USER/.config/openbox/autostart.sh" ]; then
pankso@339 235 mkdir -p /home/$USER/.config/openbox
pankso@339 236 cp /etc/xdg/openbox/autostart.sh /home/$USER/.config/openbox
pankso@339 237 fi
pankso@339 238 if [ ! -f "/home/$USER/.config/openbox/menu.xml" ]; then
pankso@339 239 mkdir -p /home/$USER/.config/openbox
pankso@339 240 cp /etc/xdg/openbox/menu.xml /home/$USER/.config/openbox
pankso@339 241 fi
pankso@339 242 chown -R $USER.$USER /home/$USER/.config
pankso@339 243 fi ;;
pankso@339 244 jwm)
pankso@339 245 WM=jwm
pankso@339 246 XSEVER_OPTS="dpms +extension Composite"
pankso@339 247 JWM_CONFIG=$HOME/.jwmrc
pankso@339 248 if [ -d "/var/lib/tazpkg/installed/jwm" ]; then
pankso@339 249 if [ ! -f "$JWM_CONFIG" ]; then
pankso@339 250 cp /etc/jwm/system.jwmrc $JWM_CONFIG
pankso@339 251 fi
pankso@339 252 # In Live mode default user/root JWM config does not exist and
pankso@402 253 # $HOME is not set, this is because tazx is executed by boot
pankso@339 254 # scripts.
pankso@339 255 if [ ! -f "/home/$USER/.jwmrc" ]; then
pankso@339 256 cp /etc/jwm/system.jwmrc /home/$USER/.jwmrc
pankso@339 257 chown $USER.$USER /home/$USER/.jwmrc
pankso@339 258 fi
pankso@339 259 if [ ! -f "/root/.jwmrc" -a `id -u` = 0 ]; then
pankso@339 260 cp /etc/jwm/system.jwmrc /root/.jwmrc
pankso@339 261 fi
pankso@339 262 fi ;;
pankso@339 263 pekwm)
pankso@339 264 WM=pekwm
pankso@339 265 XSEVER_OPTS="dpms"
pankso@339 266 if [ -d "/var/lib/tazpkg/installed/pekwm" ]; then
pankso@339 267 if [ -d "$HOME/.pekwm" ]; then
pankso@339 268 cp -R /etc/pekwm $HOME/.pekwm
pankso@339 269 fi
pankso@339 270 # In Live mode we want config before starting pekwm the first time.
pankso@339 271 if [ ! -d "/home/$USER/.pekwm" ]; then
pankso@339 272 cp -R /etc/pekwm /home/$USER/.pekwm
pankso@339 273 chown -R $USER.$USER /home/$USER/.pekwm
pankso@339 274 chmod +x /home/$USER/.pekwm/start
pankso@339 275 fi
pankso@339 276 if [ ! -d "/root/.pekwm" -a `id -u` = 0 ]; then
pankso@339 277 cp -R /etc/pekwm /root/.pekwm
pankso@339 278 chmod +x /root/.pekwm/start
pankso@339 279 fi
pankso@339 280 fi ;;
pankso@339 281 e17|enlightenment)
pankso@339 282 WM=enlightenment_start
pankso@339 283 XSEVER_OPTS="dpms -terminate" ;;
pankso@339 284 fluxbox)
pankso@339 285 WM=startfluxbox
pankso@339 286 XSEVER_OPTS="dpms" ;;
pankso@339 287 dwm|karmen)
pankso@339 288 WM=$WM-session
pankso@339 289 XSEVER_OPTS="dpms" ;;
pankso@339 290 awesome)
pankso@339 291 WM=awesome
pankso@339 292 XSEVER_OPTS="dpms" ;;
erjo@396 293 xfce|xfce4)
erjo@396 294 WM=xfce4-session
erjo@396 295 XSEVER_OPTS="dpms -terminate" ;;
pankso@339 296 esac
pankso@81 297 }
pankso@81 298
pankso@68 299 # Sample xinitrc for user (WM can be specified with F1 at slim login).
pankso@68 300 xinitrc_sample()
pankso@68 301 {
pankso@68 302 cat > $FILE << "EOF"
pankso@68 303 # ~/.xinitrc: Executed by slim login manager to startx X session.
paul@515 304 # You can use F1 with Slim to change your window manager or configure
paul@515 305 # it permanently with your personal applications.conf file.
pankso@68 306 #
pankso@339 307 . $HOME/.config/slitaz/applications.conf
pankso@99 308
pankso@117 309 case $1 in
pankso@339 310 e17|enlightenment*)
pankso@315 311 exec enlightenment_start ;;
pankso@162 312 openbox|openbox-session|ob)
pankso@315 313 exec openbox-session ;;
pankso@315 314 dwm|dwm-session)
pankso@315 315 exec dwm-session ;;
pankso@339 316 fluxbox|startfluxbox)
pankso@339 317 exec startfluxbox ;;
pankso@339 318 awesome)
pankso@339 319 exec awesome ;;
pankso@339 320 pekwm)
pankso@339 321 exec pekwm ;;
pankso@339 322 karmen|karmen-session)
pankso@339 323 exec karmen-session ;;
pankso@117 324 jwm)
pankso@81 325 lxpanel &
pankso@315 326 exec jwm ;;
erjo@396 327 xfce|xfce4|xfce4-session)
erjo@396 328 xfce4-session ;;
pankso@117 329 *)
pankso@339 330 exec $WINDOW_MANAGER ;;
pankso@68 331 esac
pankso@68 332 EOF
pankso@339 333 # Set default WM in applications.conf user file. Default WM can be
paul@515 334 # configured graphically with 'desktopbox tazapps'
pankso@339 335 . $CONFIG
pankso@339 336 sed -i s/"WINDOW_MANAGER=.*"/"WINDOW_MANAGER=\"$WM\""/ \
pankso@339 337 $CONFIG
pankso@68 338 }
pankso@68 339
pankso@65 340 # ~/.xinitrc for slim login.
pankso@66 341 creat_xinitrc()
pankso@66 342 {
pankso@68 343 FILE=$HOME/.xinitrc
pankso@339 344 CONFIG=$HOME/.config/slitaz/applications.conf
pankso@339 345 if [ ! -f $CONFIG ]; then
pankso@339 346 mkdir -p $HOME/.config/slitaz
pankso@339 347 cp /etc/slitaz/applications.conf $CONFIG
pankso@339 348 fi
pankso@68 349 xinitrc_sample
pankso@209 350 # In Live mode default user needs a xinitrc, since tazx
pankso@68 351 # is executed only by root.
pankso@209 352 if [ ! -f /home/$USER/.xinitrc ]; then
pankso@209 353 FILE=/home/$USER/.xinitrc
pankso@339 354 CONFIG=/home/$USER/.config/slitaz/applications.conf
pankso@339 355 if [ ! -f $CONFIG ]; then
pankso@339 356 mkdir -p /home/$USER/.config/slitaz
pankso@339 357 cp /etc/slitaz/applications.conf $CONFIG
pankso@339 358 fi
pankso@68 359 xinitrc_sample
pankso@209 360 chown $USER.$USER $FILE
pankso@339 361 chown -R $USER.$USER /home/$USER/.config/slitaz
pankso@105 362 fi
pankso@66 363 }
pankso@45 364
MikeDSmith25@252 365 # Create ~/.xsession to keep the configuration selected (used
MikeDSmith25@252 366 # only by startx, Slim login manager uses .xinitrc).
pankso@66 367 creat_xsession()
pankso@66 368 {
gokhlayeh@513 369 [ -f $HOME/.xsession ] && cp -f $HOME/.xsession $HOME/.previous_xsession
pankso@68 370 cat > $HOME/.xsession << _EOF_
pankso@68 371 # ~/.xsession: Start X window session manually on your system (startx).
pankso@37 372 #
pankso@68 373 _EOF_
pankso@450 374 if [ -x /usr/bin/Xorg ]; then
pankso@117 375 echo 'Xorg &' >> $HOME/.xsession
pankso@117 376 else
pankso@351 377 cat >> $HOME/.xsession << _EOT_
pankso@450 378 Xvesa -ac -shadow $XSEVER_OPTS \\
pankso@351 379 -screen $NEW_SCREEN \\
pankso@351 380 -keybd $KEYBD \\
pankso@351 381 -mouse $MOUSE &
pankso@351 382 _EOT_
pankso@117 383 fi
pankso@117 384 echo '#xterm &' >> $HOME/.xsession
pankso@117 385 echo '#xpad &' >> $HOME/.xsession
pankso@99 386 # LXpanel by default with JWM.
pankso@117 387 if [ "$WM" = "jwm" ]; then
pankso@99 388 echo 'lxpanel &' >> $HOME/.xsession
pankso@99 389 fi
pankso@104 390 echo "exec $WM" >> $HOME/.xsession
pankso@66 391 chmod 700 $HOME/.xsession
pankso@66 392 }
pankso@4 393
pankso@66 394 ###################
pankso@66 395 # Tazx sequence #
pankso@66 396 ###################
pankso@66 397
pankso@351 398 case "$1" in
pankso@351 399 show-config)
pankso@351 400 . /etc/X11/screen.conf
pankso@351 401 echo ""
pankso@351 402 echo "X11 screen resolution: $SCREEN"
pankso@351 403 echo ""
pankso@351 404 echo "Slim configuration for X server:"
pankso@351 405 cat /etc/slim.conf | grep ^default_xserver
pankso@351 406 cat /etc/slim.conf | grep ^xserver_arguments
pankso@351 407 echo "" ;;
pankso@351 408 install-xorg)
pankso@351 409 # WM can be specified on cmdline.
pankso@351 410 if [ -n "$2" ]; then
pankso@402 411 WM=$2
pankso@351 412 fi
pankso@351 413 install_xorg
pankso@351 414 slim_config
pankso@351 415 wm_config
pankso@351 416 creat_xinitrc
pankso@351 417 creat_xsession ;;
pankso@415 418 config-xorg)
pankso@415 419 # WM can be specified on cmdline.
pankso@415 420 if [ -n "$2" ]; then
pankso@415 421 WM=$2
pankso@415 422 fi
pankso@415 423 XSERVER="Xorg"
pankso@415 424 wm_config
pankso@415 425 creat_xinitrc
pankso@415 426 creat_xsession
gokhlayeh@492 427 xorg_conf_d ;;
pankso@351 428 *)
pankso@351 429 # WM can be specified on cmdline.
pankso@351 430 if [ -n "$1" ]; then
pankso@402 431 WM=$1
pankso@351 432 fi
pankso@351 433 [ -n "$NEW_SCREEN" ] || screen_config_dialog
pankso@351 434 slim_config
pankso@351 435 wm_config
pankso@351 436 creat_xinitrc
pankso@351 437 creat_xsession ;;
pankso@351 438 esac
pankso@4 439
pankso@4 440 exit 0