slitaz-tools annotate tinyutils/tazx @ rev 821

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