slitaz-tools annotate tazbox/tazbox @ rev 611

tazbox: turn some constants into global
author Claudinei Pereira <claudinei@slitaz.org>
date Thu Jun 02 09:28:12 2011 -0300 (2011-06-02)
parents 4365931d7dd2
children 21047e4243e0
rev   line source
pankso@553 1 #!/bin/sh
pankso@553 2 #
pankso@569 3 # SliTaz tiny GUI boxes for the desktop (su, logout, locale, etc)
pankso@569 4 # and as usual, please: KISS
pankso@553 5 #
paul@559 6 # Note: $(gettext "text") doesn't work inside Yad so use `gettext \"text\"`
pankso@553 7 #
pankso@553 8 # Copyright (C) 2011 SliTaz GNU/linux - GNU gpl v3
pankso@553 9 # - Christophe Lincoln <pankso@slitaz.org>
pankso@553 10 #
pankso@553 11
pankso@562 12 # Download dir (may be in a config file)
pankso@562 13 DOWNLOADS=$HOME/Downloads
pankso@562 14
pankso@553 15 # Internationalization
pankso@553 16 . /usr/bin/gettext.sh
pankso@553 17 TEXTDOMAIN='tazbox'
pankso@553 18 export TEXTDOMAIN
pankso@553 19
pankso@562 20 # Icons for most windows
pankso@562 21 icon=/usr/share/pixmaps/slitaz-menu.png
pankso@562 22
claudinei@611 23 # some constants to be used inside functions
claudinei@611 24 tmp="/tmp/keymap.list"
claudinei@611 25 db="/usr/share/i18n/locales"
claudinei@611 26 zi="/usr/share/zoneinfo/"
claudinei@611 27
pankso@553 28 #
pankso@553 29 # Functions
pankso@553 30 #
pankso@553 31
pankso@553 32 usage() {
pankso@553 33 cat << EOT
pankso@553 34
pankso@553 35 $(gettext "Usage:") $(basename $0) [command]
pankso@553 36
pankso@553 37 $(gettext "Commands:")
pankso@553 38 usage $(gettext "Display this short help usage")
paul@593 39 su $(gettext "Execute a command as super-user")
pankso@562 40 logout $(gettext "Desktop logout box with actions")
pankso@562 41 out $(gettext "Pipe a command output into a GTK window")
pankso@562 42 out-dl $(gettext "Pipe Wget output into a GTK window")
pankso@573 43 locale $(gettext "Configure system language (root)")
pankso@573 44 keymap $(gettext "Configure system keymap (root)")
pankso@604 45 tz $(gettext "Configure system timezone (root)")
pankso@610 46 setup $(gettext "System initial setup (locale, keymap & timezone)")
pankso@553 47
pankso@553 48 EOT
pankso@553 49 }
pankso@553 50
pankso@587 51 # Su frontend GUI's
pankso@587 52 su_main() {
pankso@587 53 text=$(gettext "Slitaz admin password")
pankso@587 54 note=$(gettext "Please enter root password (default root) to execute:")
pankso@587 55 yad --title="Slitaz - su" --window-icon=$icon \
pankso@587 56 --width=520 --height=160 \
pankso@587 57 --text="<b>$text</b>\n$note\n$SU_CMD\n" \
pankso@587 58 --image="slitaz-menu" --image-on-top \
pankso@587 59 --center --on-top --form $PASSWD \
pankso@587 60 --field="`gettext "Password:"`:H" $CHECKED \
pankso@587 61 --field="`gettext "Autosave password"`:CHK"
pankso@587 62 }
pankso@587 63
pankso@587 64 su_error() {
pankso@587 65 text=$(gettext "Error: wrong password!")
pankso@587 66 yad --title="Slitaz - su error" --width=520 --height=60 \
pankso@587 67 --image="error" --image-on-top --center --on-top \
pankso@587 68 --text="\n\t<b>$text</b>" --button="gtk-close:1"
pankso@587 69 }
pankso@587 70
pankso@569 71 # User may press cancel on download.
pankso@562 72 cancel_dl() {
pankso@562 73 if [ "$?" == 1 ]; then
pankso@562 74 echo "CANCEL"
pankso@562 75 rm -f $DOWNLOADS/$(basename $url)
pankso@562 76 fi
pankso@562 77 }
pankso@562 78
paul@593 79 # Output a command in a GTK window
pankso@562 80 output_command() {
pankso@562 81 yad --text-info --title="TazBox Output" --window-icon=$icon \
pankso@562 82 --geometry="560x210+0-24" --fore="#ffffff" --back="#000000"
pankso@562 83 }
pankso@562 84
pankso@553 85 # Logout GUI function
pankso@553 86 logout_main() {
pankso@591 87 text=$(gettext "<b>SliTaz Logout.</b> Please choose an action:")
pankso@562 88 yad --entry --title="SliTaz Logout" --window-icon=$icon \
pankso@591 89 --width=440 --height=140 --text="$text" \
pankso@553 90 --image="slitaz-menu" --image-on-top \
pankso@553 91 --center --on-top --entry-text \
pankso@553 92 "`gettext \"Close X session\"` : exit" \
pankso@553 93 "`gettext \"Reboot system\"` : reboot" \
pankso@553 94 "`gettext \"Shutdown system\"` : halt"
pankso@553 95 }
pankso@553 96
pankso@610 97 # Generate keymap list
pankso@610 98 gen_kmap_list() {
pankso@610 99 echo > $tmp
pankso@610 100 cd /usr/share/kbd/keymaps/i386
pankso@610 101 # We first need a list to sort and then use \n for Yad list.
pankso@610 102 for i in $(find *rty *rtz dvorak -name *.map.gz)
pankso@610 103 do
pankso@610 104 keymap=$(basename $i)
pankso@610 105 type=$(dirname $i)
pankso@610 106 echo -e "$keymap|$type" >> $tmp
pankso@610 107 done
pankso@610 108 }
pankso@610 109
pankso@610 110 # Initial Config functions
pankso@610 111 setup_main() {
pankso@610 112 gen_kmap_list
pankso@610 113 title=$(gettext "SliTaz Initial Setup")
pankso@610 114 message=$(gettext "\n<big>Here you can set your preferences\nfor <b>locale, keymap and timezone</b></big>\n\n")
pankso@610 115 locale=$(ls -1 $db | grep ^[a-z][a-z]_[A-Z][A-Z] | tr "\n" "!")
pankso@610 116 keymap=$(cat $tmp | cut -d. -f1 | sort | tr "\n" "!")
pankso@610 117 timezone=$(find $zi -type f | sed s,$zi,,g | tr "\n" "!")
pankso@610 118 yad --width=500 --height=380 \
pankso@610 119 --image=$icon --title="$title" --form --text="$message" \
pankso@610 120 --field "Locale:CB" \
pankso@610 121 --field "Keymap:CB" \
pankso@610 122 --field "Timezone:CB" \
pankso@610 123 $locale \ $keymap \ $timezone
pankso@610 124 }
pankso@610 125
pankso@610 126 setup() {
pankso@610 127 choices=$(setup_main)
pankso@610 128 locale=$(echo $choices | cut -d"|" -f1)
pankso@610 129 keymap=$(echo $choices | cut -d"|" -f2)
pankso@610 130 timezone=$(echo $choices | cut -d"|" -f3)
pankso@610 131 [ $locale ] && tazlocale init $locale
pankso@610 132 [ $keymap ] && tazkeymap init $keymap
pankso@610 133 [ $timezone ] && echo $timezone > /etc/TZ
pankso@610 134 }
pankso@610 135
pankso@569 136 # Locale functions
pankso@569 137 locale_main() {
pankso@569 138 text=$(gettext "Language configuration")
pankso@569 139 for locale in $(ls -1 $db | grep ^[a-z][a-z]_[A-Z][A-Z])
pankso@569 140 do
pankso@569 141 desc=$(grep ^title $db/$locale | cut -d '"' -f 2)
pankso@569 142 echo -e "$locale \n $desc"
pankso@569 143 done | \
pankso@573 144 yad --list --title="SliTaz locale" --window-icon=$icon \
pankso@569 145 --width=500 --height=380 --separator="" \
pankso@573 146 --center --sticky --on-top \
pankso@569 147 --image=preferences-desktop-locale --image-on-top \
pankso@569 148 --text="<b>$text</b>" --print-column=1 \
pankso@569 149 --column $(gettext "Name") --column $(gettext "Description")
pankso@569 150 }
pankso@569 151
pankso@569 152 locale() {
pankso@569 153 locale=$(locale_main)
pankso@569 154 # Deal with --button values
pankso@569 155 case $? in
pankso@569 156 1) exit 0 ;;
pankso@569 157 *) continue ;;
pankso@569 158 esac
pankso@573 159 # System language configuration.
pankso@573 160 [ "$locale" ] && tazlocale init $locale
pankso@569 161 }
pankso@569 162
pankso@569 163 # Keymap functions
pankso@569 164 keymap_main() {
pankso@610 165 gen_kmap_list
paul@593 166 text=$(gettext "Keyboard configuration")
pankso@569 167 for i in $(sort $tmp)
pankso@569 168 do
pankso@569 169 keymap=$(echo $i | cut -d "|" -f 1)
pankso@569 170 type=$(echo $i | cut -d "|" -f 2)
pankso@569 171 echo -e "${keymap%.map.gz} \n $type"
pankso@569 172 done | \
pankso@573 173 yad --list $opts --title="SliTaz keymap" --window-icon=$icon \
pankso@569 174 --width=500 --height=380 --separator="" \
pankso@573 175 --center --sticky --on-top \
pankso@569 176 --image=input-keyboard --image-on-top \
pankso@569 177 --text="<b>$text</b>" --print-column=1 \
pankso@569 178 --column $(gettext "Keymap") --column $(gettext "Type")
pankso@573 179 rm -f $tmp
pankso@569 180 }
pankso@569 181
pankso@569 182 keymap() {
pankso@569 183 keymap=$(keymap_main)
pankso@569 184 # Deal with --button values
pankso@569 185 case $? in
pankso@569 186 1) exit 0 ;;
pankso@569 187 *) continue ;;
pankso@569 188 esac
pankso@573 189 # System keymap configuration
pankso@573 190 [ "$keymap" ] && tazkeymap init $keymap
pankso@569 191 }
pankso@569 192
pankso@604 193 # TZ functions
pankso@604 194 tz_main() {
paul@608 195 text=$(gettext "TimeZone Configuration")
paul@608 196 for t in $(find $zi -type f | sed s,$zi,,g)
paul@608 197 do
paul@608 198 echo -e "$t"
paul@608 199 done | \
paul@608 200 yad --list --title="SliTaz TZ" --window-icon=$icon \
paul@608 201 --width=500 --height=380 --separator="" \
paul@608 202 --center --sticky --on-top \
paul@608 203 --image=preferences-desktop-locale --image-on-top \
paul@608 204 --text="<b>$text</b>" --print-column=1 \
paul@608 205 --column $(gettext "Name")
pankso@604 206 }
pankso@604 207
pankso@604 208 tz() {
paul@608 209 timezone=$(tz_main)
paul@608 210 case $? in
paul@608 211 1) exit 0 ;;
paul@608 212 *) continue ;;
paul@608 213 esac
paul@608 214 [ "$timezone" ] && echo $timezone > /etc/TZ
pankso@604 215 }
pankso@604 216
pankso@553 217 #
pankso@553 218 # Commands
pankso@553 219 #
pankso@553 220 case "$1" in
pankso@553 221 su)
paul@593 222 # Keep command in an exported variable to be used by Yad. 4 arguments
paul@593 223 # should be enuff: appname --opt --opt -v /dev/sda. Nothing to do if
pankso@587 224 # we are root.
pankso@587 225 test $(id -u) = 0 && exec $2 $3 $4 $5
pankso@587 226 export SU_CMD="$2 $3 $4 $5"
paul@593 227 # Check if a password has been saved before launching main dialog
pankso@587 228 if [ -s $HOME/.config/slitaz/subox.conf ]; then
pankso@587 229 PASSWD=$(cat $HOME/.config/slitaz/subox.conf)
pankso@587 230 CHECKED="TRUE"
pankso@587 231 fi
pankso@587 232 # Display the main dialog (ask for password)
pankso@587 233 main=$(su_main)
paul@593 234 # Deal with --button values and exit if cancelled to avoid erasing
pankso@587 235 # saved password.
pankso@587 236 case $? in
pankso@587 237 1) exit 0 ;;
pankso@587 238 *) continue ;;
pankso@587 239 esac
pankso@587 240 # Save or erase Autosaved password
paul@593 241 if [ $(echo $main | cut -f2 -d"|") == "TRUE" ]; then
pankso@587 242 echo $main | cut -f 1 -d "|" > $HOME/.config/slitaz/subox.conf
pankso@587 243 chmod 0600 $HOME/.config/slitaz/subox.conf
pankso@587 244 else
pankso@587 245 cat /dev/null > $HOME/.config/slitaz/subox.conf
pankso@587 246 fi
pankso@587 247 # Try to login & execute. If password is wrong execute error dialog
pankso@587 248 echo $main | cut -f 1 -d "|" | su -c "$SU_CMD &" || su_error ;;
pankso@553 249 logout)
paul@593 250 # Logout window with actions
pankso@562 251 main=`logout_main`
pankso@553 252 # Deal with --button values
pankso@553 253 case $? in
pankso@553 254 1) exit 0 ;;
pankso@553 255 *) continue ;;
pankso@553 256 esac
pankso@553 257 # Deal with $main values
pankso@553 258 case "$main" in
pankso@553 259 *exit) openbox --exit || jwm -exit ;;
pankso@553 260 *reboot) reboot ;;
pankso@553 261 *halt) poweroff ;;
pankso@553 262 esac ;;
pankso@562 263 out)
pankso@562 264 # Pipe a command into a GTK window
pankso@562 265 output_command ;;
paul@593 266 out-dl)
pankso@562 267 # A tiny GTK window for Busybox wget output
pankso@562 268 url=$2
slaxemulator@594 269 [ -d $DOWNLOADS ] || mkdir -p $DOWNLOADS
pankso@595 270 busybox wget -c -P $DOWNLOADS $url 2>1 | output_command
pankso@562 271 cancel_dl ;;
pankso@569 272 locale)
pankso@569 273 locale ;;
pankso@569 274 keymap)
pankso@569 275 keymap ;;
pankso@610 276 tz)
pankso@610 277 tz ;;
pankso@610 278 setup)
pankso@610 279 setup ;;
pankso@573 280 boot)
pankso@573 281 # This command is used at first boot to configure system.
pankso@579 282 Xorg -br -quiet -nolisten tcp :1 &
pankso@573 283 DISPLAY=:1 openbox &
pankso@569 284 locale
pankso@573 285 keymap
pankso@595 286 killall Xorg 2>/dev/null ;;
pankso@553 287 *)
pankso@553 288 usage ;;
pankso@553 289 esac
pankso@553 290
pankso@553 291 exit 0