slitaz-tools annotate tinyutils/tazx @ rev 837

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