slitaz-tools annotate tinyutils/tazx @ rev 534

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