slitaz-tools annotate tazbox/tazbox @ rev 807

Rewrite "desktopbox tazapps" using Yad (now "tazbox tazapps"), update pot and po; validate and normalize desktop files.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Tue Jul 16 18:31:59 2013 +0300 (2013-07-16)
parents 066dd36cc2cc
children 8e208c31ad8e
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@704 21 icon=/usr/share/pixmaps/slitaz-icon.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@632 47 new-file $(gettext "Create a new file or folder on the desktop")
paul@647 48 all-apps $(gettext "Display icons of all installed applications")
pankso@721 49 notify $(gettext "Notify user with a desktop centered box")
al@807 50 tazapps $(gettext "Configure SliTaz default applications")
pankso@553 51
pankso@553 52 EOT
pankso@553 53 }
pankso@553 54
pankso@587 55 # Su frontend GUI's
pankso@587 56 su_main() {
pankso@587 57 text=$(gettext "Slitaz admin password")
pankso@587 58 note=$(gettext "Please enter root password (default root) to execute:")
pankso@587 59 yad --title="Slitaz - su" --window-icon=$icon \
pankso@686 60 --width=520 --height=140 \
pankso@587 61 --text="<b>$text</b>\n$note\n$SU_CMD\n" \
pankso@704 62 --image="slitaz-icon" --image-on-top \
pankso@587 63 --center --on-top --form $PASSWD \
pankso@587 64 --field="`gettext "Password:"`:H" $CHECKED \
pankso@587 65 --field="`gettext "Autosave password"`:CHK"
pankso@587 66 }
pankso@587 67
pankso@587 68 su_error() {
pankso@587 69 text=$(gettext "Error: wrong password!")
pankso@587 70 yad --title="Slitaz - su error" --width=520 --height=60 \
pankso@587 71 --image="error" --image-on-top --center --on-top \
pankso@587 72 --text="\n\t<b>$text</b>" --button="gtk-close:1"
pankso@587 73 }
pankso@587 74
pankso@569 75 # User may press cancel on download.
pankso@562 76 cancel_dl() {
pankso@562 77 if [ "$?" == 1 ]; then
pankso@562 78 echo "CANCEL"
pankso@562 79 rm -f $DOWNLOADS/$(basename $url)
pankso@562 80 fi
pankso@562 81 }
pankso@562 82
paul@593 83 # Output a command in a GTK window
pankso@744 84 output_command() {
pankso@562 85 yad --text-info --title="TazBox Output" --window-icon=$icon \
pankso@562 86 --geometry="560x210+0-24" --fore="#ffffff" --back="#000000"
pankso@562 87 }
pankso@562 88
pankso@553 89 # Logout GUI function
pankso@553 90 logout_main() {
pankso@591 91 text=$(gettext "<b>SliTaz Logout.</b> Please choose an action:")
pankso@562 92 yad --entry --title="SliTaz Logout" --window-icon=$icon \
pankso@591 93 --width=440 --height=140 --text="$text" \
pankso@704 94 --image="slitaz-icon" --image-on-top \
pankso@553 95 --center --on-top --entry-text \
pankso@553 96 "`gettext \"Close X session\"` : exit" \
pankso@553 97 "`gettext \"Reboot system\"` : reboot" \
pankso@553 98 "`gettext \"Shutdown system\"` : halt"
pankso@553 99 }
pankso@553 100
pankso@610 101 # Generate keymap list
pankso@610 102 gen_kmap_list() {
pankso@610 103 echo > $tmp
pankso@610 104 cd /usr/share/kbd/keymaps/i386
pankso@610 105 # We first need a list to sort and then use \n for Yad list.
pankso@610 106 for i in $(find *rty *rtz dvorak -name *.map.gz)
pankso@610 107 do
pankso@610 108 keymap=$(basename $i)
pankso@610 109 type=$(dirname $i)
pankso@610 110 echo -e "$keymap|$type" >> $tmp
pankso@610 111 done
pankso@610 112 }
pankso@610 113
pankso@610 114 # Initial Config functions
pankso@610 115 setup_main() {
pankso@610 116 gen_kmap_list
pankso@610 117 title=$(gettext "SliTaz Initial Setup")
paul@647 118 message=$(gettext "\n<big>Here you can set your preferences\nfor <b>locale, keymap and timezone</b>.</big>\n\n")
pankso@610 119 locale=$(ls -1 $db | grep ^[a-z][a-z]_[A-Z][A-Z] | tr "\n" "!")
pankso@610 120 keymap=$(cat $tmp | cut -d. -f1 | sort | tr "\n" "!")
pankso@610 121 timezone=$(find $zi -type f | sed s,$zi,,g | tr "\n" "!")
pankso@610 122 yad --width=500 --height=380 \
pankso@610 123 --image=$icon --title="$title" --form --text="$message" \
al@807 124 --field "$(gettext 'Locale'):CB" \
al@807 125 --field "$(gettext 'Keymap'):CB" \
al@807 126 --field "$(gettext 'Timezone'):CB" \
pankso@744 127 $locale \ $keymap \ $timezone
pankso@610 128 }
pankso@610 129
pankso@610 130 setup() {
pankso@610 131 choices=$(setup_main)
pankso@610 132 locale=$(echo $choices | cut -d"|" -f1)
pankso@610 133 keymap=$(echo $choices | cut -d"|" -f2)
pankso@610 134 timezone=$(echo $choices | cut -d"|" -f3)
pankso@610 135 [ $locale ] && tazlocale init $locale
pankso@610 136 [ $keymap ] && tazkeymap init $keymap
pankso@610 137 [ $timezone ] && echo $timezone > /etc/TZ
pankso@610 138 }
pankso@610 139
pankso@569 140 # Locale functions
pankso@569 141 locale_main() {
pankso@569 142 text=$(gettext "Language configuration")
pankso@569 143 for locale in $(ls -1 $db | grep ^[a-z][a-z]_[A-Z][A-Z])
pankso@569 144 do
pankso@569 145 desc=$(grep ^title $db/$locale | cut -d '"' -f 2)
pankso@569 146 echo -e "$locale \n $desc"
pankso@569 147 done | \
pankso@573 148 yad --list --title="SliTaz locale" --window-icon=$icon \
pankso@569 149 --width=500 --height=380 --separator="" \
pankso@573 150 --center --sticky --on-top \
pankso@569 151 --image=preferences-desktop-locale --image-on-top \
pankso@569 152 --text="<b>$text</b>" --print-column=1 \
pankso@569 153 --column $(gettext "Name") --column $(gettext "Description")
pankso@569 154 }
pankso@569 155
pankso@569 156 locale() {
pankso@569 157 locale=$(locale_main)
pankso@569 158 # Deal with --button values
pankso@569 159 case $? in
pankso@569 160 1) exit 0 ;;
pankso@569 161 *) continue ;;
pankso@569 162 esac
pankso@573 163 # System language configuration.
pankso@752 164 [ "$locale" ] && tazlocale $locale
pankso@569 165 }
pankso@569 166
pankso@569 167 # Keymap functions
pankso@569 168 keymap_main() {
pankso@610 169 gen_kmap_list
paul@593 170 text=$(gettext "Keyboard configuration")
pankso@569 171 for i in $(sort $tmp)
pankso@569 172 do
pankso@569 173 keymap=$(echo $i | cut -d "|" -f 1)
pankso@569 174 type=$(echo $i | cut -d "|" -f 2)
pankso@569 175 echo -e "${keymap%.map.gz} \n $type"
pankso@569 176 done | \
pankso@573 177 yad --list $opts --title="SliTaz keymap" --window-icon=$icon \
pankso@569 178 --width=500 --height=380 --separator="" \
pankso@573 179 --center --sticky --on-top \
pankso@569 180 --image=input-keyboard --image-on-top \
pankso@569 181 --text="<b>$text</b>" --print-column=1 \
pankso@569 182 --column $(gettext "Keymap") --column $(gettext "Type")
pankso@573 183 rm -f $tmp
pankso@569 184 }
pankso@569 185
pankso@569 186 keymap() {
pankso@569 187 keymap=$(keymap_main)
pankso@569 188 # Deal with --button values
pankso@569 189 case $? in
pankso@569 190 1) exit 0 ;;
pankso@569 191 *) continue ;;
pankso@569 192 esac
pankso@573 193 # System keymap configuration
pankso@752 194 [ "$keymap" ] && tazkeymap $keymap
pankso@569 195 }
pankso@569 196
pankso@604 197 # TZ functions
pankso@604 198 tz_main() {
paul@608 199 text=$(gettext "TimeZone Configuration")
paul@608 200 for t in $(find $zi -type f | sed s,$zi,,g)
paul@608 201 do
paul@608 202 echo -e "$t"
paul@608 203 done | \
paul@608 204 yad --list --title="SliTaz TZ" --window-icon=$icon \
paul@608 205 --width=500 --height=380 --separator="" \
paul@608 206 --center --sticky --on-top \
paul@608 207 --image=preferences-desktop-locale --image-on-top \
paul@608 208 --text="<b>$text</b>" --print-column=1 \
paul@608 209 --column $(gettext "Name")
pankso@604 210 }
pankso@604 211
pankso@604 212 tz() {
paul@608 213 timezone=$(tz_main)
paul@608 214 case $? in
paul@608 215 1) exit 0 ;;
paul@608 216 *) continue ;;
paul@608 217 esac
paul@608 218 [ "$timezone" ] && echo $timezone > /etc/TZ
pankso@604 219 }
pankso@604 220
pankso@632 221 # New file functions
pankso@632 222 newfile_main() {
pankso@632 223 text=$(gettext "Create a new file or folder on your desktop")
pankso@632 224 yad --entry --title="$(gettext "New file")" --window-icon=$icon \
pankso@632 225 --text="<b>$text</b>" --width=460 --height=160 \
pankso@704 226 --center --on-top --image=slitaz-icon --image-on-top \
pankso@700 227 --entry-label="$(gettext "File name")" --always-print-result \
pankso@700 228 --button="$(gettext "SHell script"):4" \
pankso@700 229 --button="$(gettext "Folder"):3" \
pankso@632 230 --button="$(gettext "File"):2" \
pankso@632 231 --button="gtk-cancel:1"
pankso@632 232 }
pankso@632 233
pankso@632 234 newfile() {
pankso@632 235 file=$(newfile_main)
pankso@700 236 ret=$?
pankso@632 237 [ "$file" ] || exit 0
pankso@700 238 case $ret in
pankso@700 239 4)
pankso@632 240 cat > $HOME/Desktop/$file << EOT
pankso@632 241 #!/bin/sh
pankso@632 242 #
pankso@632 243
pankso@632 244 EOT
pankso@632 245 chmod +x $HOME/Desktop/$file ;;
pankso@700 246 3) mkdir -p $HOME/Desktop/$file ;;
pankso@700 247 2) touch $HOME/Desktop/$file ;;
pankso@700 248 1) exit 0 ;;
pankso@632 249 esac
pankso@632 250 }
pankso@632 251
pankso@637 252 # All applications
pankso@637 253 all_apps() {
pankso@637 254 yad --icons --title="$(gettext "All Applications")" \
pankso@637 255 --compact --read-dir=/usr/share/applications \
pankso@637 256 --window-icon=$icon --width=400 --height=400 \
pankso@637 257 --button="gtk-close:0"
pankso@637 258 }
pankso@637 259
pankso@553 260 #
pankso@553 261 # Commands
pankso@553 262 #
pankso@553 263 case "$1" in
pankso@553 264 su)
paul@593 265 # Keep command in an exported variable to be used by Yad. 4 arguments
paul@593 266 # should be enuff: appname --opt --opt -v /dev/sda. Nothing to do if
pankso@587 267 # we are root.
pascal@786 268 test $(id -u) = 0 && exec ${@:2}
pascal@786 269 export SU_CMD="${@:2}"
paul@593 270 # Check if a password has been saved before launching main dialog
pankso@744 271 if [ -s $HOME/.config/slitaz/subox.conf ]; then
pankso@587 272 PASSWD=$(cat $HOME/.config/slitaz/subox.conf)
pankso@587 273 CHECKED="TRUE"
pankso@587 274 fi
pankso@744 275 # Display the main dialog (ask for password)
pankso@587 276 main=$(su_main)
paul@593 277 # Deal with --button values and exit if cancelled to avoid erasing
pankso@587 278 # saved password.
pankso@587 279 case $? in
pankso@587 280 1) exit 0 ;;
pankso@587 281 *) continue ;;
pankso@587 282 esac
pankso@587 283 # Save or erase Autosaved password
pankso@744 284 if [ $(echo $main | cut -f2 -d"|") == "TRUE" ]; then
pankso@587 285 echo $main | cut -f 1 -d "|" > $HOME/.config/slitaz/subox.conf
pankso@744 286 chmod 0600 $HOME/.config/slitaz/subox.conf
pankso@587 287 else
pankso@587 288 cat /dev/null > $HOME/.config/slitaz/subox.conf
pankso@587 289 fi
pankso@744 290 # Try to login & execute. If password is wrong execute error dialog
pankso@587 291 echo $main | cut -f 1 -d "|" | su -c "$SU_CMD &" || su_error ;;
pankso@553 292 logout)
paul@593 293 # Logout window with actions
pankso@736 294 main=$(logout_main)
pankso@553 295 # Deal with --button values
pankso@553 296 case $? in
pankso@553 297 1) exit 0 ;;
pankso@553 298 *) continue ;;
pankso@553 299 esac
paul@763 300 # DE and WM started with a custom -session script should export
pankso@736 301 # XDG_CURRENT_DESKTOP
pankso@553 302 case "$main" in
pankso@744 303 *exit)
pankso@736 304 case $XDG_CURRENT_DESKTOP in
pankso@736 305 LXDE)
pankso@736 306 [ "$_LXSESSION_PID" ] && kill $_LXSESSION_PID
pankso@736 307 [ "$DESKTOP_SESSION" == "compiz" ] && \
pankso@736 308 killall compiz
pankso@736 309 openbox --exit ;;
pankso@736 310 openbox) openbox --exit ;;
pankso@736 311 compiz) killall compiz ;;
pankso@736 312 *)
pankso@736 313 # Try to kill other WM that dont set XDG var.
pankso@736 314 jwm -exit 2>/dev/null ;;
pankso@736 315 esac ;;
pankso@736 316 *reboot) reboot || reboot -f ;;
pankso@553 317 *halt) poweroff ;;
pankso@553 318 esac ;;
pankso@562 319 out)
pankso@562 320 # Pipe a command into a GTK window
pankso@562 321 output_command ;;
paul@593 322 out-dl)
pankso@562 323 # A tiny GTK window for Busybox wget output
pankso@562 324 url=$2
slaxemulator@594 325 [ -d $DOWNLOADS ] || mkdir -p $DOWNLOADS
pascal@648 326 busybox wget -c -P $DOWNLOADS $url 2>&1 | output_command
pankso@562 327 cancel_dl ;;
pankso@569 328 locale)
pankso@569 329 locale ;;
pankso@569 330 keymap)
pankso@569 331 keymap ;;
pankso@610 332 tz)
border@794 333 test $(id -u) != 0 && exec tazbox su tazbox $@ && exit 0 ;
border@794 334 tz ;;
pankso@610 335 setup)
pankso@610 336 setup ;;
pankso@632 337 new-file)
pankso@632 338 newfile ;;
pankso@637 339 all-apps)
pankso@637 340 all_apps ;;
pankso@689 341 notify|-n)
pankso@689 342 # On screen notification box.
pankso@721 343 icon="$3"
pankso@721 344 time="$4"
pankso@721 345 [ "$icon" ] || icon=info
pankso@689 346 [ "$time" ] || time=4
pankso@689 347 yad --text="<b>$2</b>" --width=520 --height=80 \
pankso@721 348 --center --on-top --image=$icon --image-on-top \
pankso@689 349 --timeout=$time --skip-taskbar --no-buttons \
pankso@689 350 --borders=12 --undecorated ;;
al@807 351 tazapps)
al@807 352 # Default applications configuration script. System wide config file
al@807 353 # is /etc/slitaz/applications.conf and each user can have personal
al@807 354 # settings. System wide for root and personal config for user.
al@807 355 export CONFIG="$HOME/.config/slitaz/applications.conf"
al@807 356 if [ ! -f $CONFIG ]; then
al@807 357 mkdir -p $HOME/.config/slitaz
al@807 358 cp /etc/slitaz/applications.conf $CONFIG
al@807 359 fi
al@807 360 . $CONFIG
al@807 361 eval $(yad --title="$(gettext 'SliTaz default applications')" \
al@807 362 --window-icon=preferences-desktop --image=preferences-desktop \
al@807 363 --text="<b>$(gettext 'SliTaz default applications configuration')</b>" \
al@807 364 --form \
al@807 365 --field="$(gettext 'File manager:')" \
al@807 366 --field="$(gettext 'Web browser:')" \
al@807 367 --field="$(gettext 'Text editor:')" \
al@807 368 --field="$(gettext 'Terminal:')" \
al@807 369 --field="$(gettext 'Window manager:')" \
al@807 370 "$FILE_MANAGER" "$BROWSER" "$EDITOR" "$TERMINAL" "$WINDOW_MANAGER" | \
al@807 371 awk -F'|' '{printf "FILE_MANAGER=\"%s\"\nBROWSER=\"%s\"\nEDITOR=\"%s\"\
al@807 372 TERMINAL=\"%s\"\nWINDOW_MANAGER=\"%s\"\n", $1, $2, $3, $4, $5}')
al@807 373 sed '/FILE_MANAGER=/s|"\([^"]*\)"|"'$FILE_MANAGER'"|; \
al@807 374 /BROWSER=/s|"\([^"]*\)"|"'$BROWSER'"|; \
al@807 375 /EDITOR=/s|"\([^"]*\)"|"'$EDITOR'"|; \
al@807 376 /TERMINAL=/s|"\([^"]*\)"|"'$TERMINAL'"|; \
al@807 377 /WINDOW_MANAGER=/s|"\([^"]*\)"|"'$WINDOW_MANAGER'"|' \
al@807 378 -i $CONFIG
al@807 379 ;;
al@807 380 gpl)
al@807 381 yad --text-info --title="GNU General Public License" \
al@807 382 --window-icon=text-x-generic --geometry="560x500+0-24" \
al@807 383 --button "OK" < /usr/share/licenses/gpl.txt
al@807 384 ;;
pankso@553 385 *)
pankso@553 386 usage ;;
pankso@553 387 esac
pankso@553 388
pankso@553 389 exit 0