slitaz-tools annotate tazbox/tazbox @ rev 969

Update tazbox vnc + fr translation
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Mar 27 11:07:41 2016 +0200 (2016-03-27)
parents 72f3c042d777
children 53c750021d6d
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 #
al@939 6 # Copyright (C) 2011-2015 SliTaz GNU/Linux - GNU GPL v3
pankso@553 7 # - Christophe Lincoln <pankso@slitaz.org>
al@845 8 # - Aleksej Bobylev <al.bobylev@gmail.com>
pankso@553 9 #
al@939 10
al@813 11 . /lib/libtaz.sh
al@813 12 export TEXTDOMAIN='tazbox' # i18n
pankso@553 13
al@939 14
al@949 15 # Get SliTaz settings
al@949 16
al@949 17 . /etc/slitaz/slitaz.conf
al@949 18
al@949 19
al@813 20 # download dir (may be in a config file)
al@939 21
al@943 22 DOWNLOADS="$HOME/Downloads"
pankso@562 23
al@939 24
claudinei@611 25 # some constants to be used inside functions
al@939 26
al@943 27 tmp='/tmp/keymap.list'
al@943 28 db='/usr/share/i18n/locales'
al@943 29 zi='/usr/share/zoneinfo/'
al@943 30 ztab="${zi}zone-mini.tab"
al@943 31 csv='/tmp/freegeoip.csv'
claudinei@611 32
al@939 33
pankso@553 34 #
pankso@553 35 # Functions
pankso@553 36 #
pankso@553 37
pankso@553 38 usage() {
al@813 39 newline; _ 'SliTaz tiny GUI boxes for the desktop'
pankso@553 40
al@813 41 newline; boldify $(_ 'Usage:')
al@813 42 echo " $(basename $0) [$(_n 'command')]"
pankso@553 43
al@813 44 newline; boldify $(_ 'Commands:')
al@813 45 optlist "\
al@813 46 usage $(_ 'Display this short help usage')
al@813 47 su $(_ 'Execute a command as super-user')
al@813 48 logout $(_ 'Desktop logout box with actions')
al@813 49 out $(_ 'Pipe a command output into a GTK window')
al@813 50 out-dl $(_ 'Pipe wget output into a GTK window')
al@813 51 locale $(_ 'Configure system language (root)')
al@813 52 keymap $(_ 'Configure system keymap (root)')
al@813 53 tz $(_ 'Configure system timezone (root)')
al@813 54 setup $(_ 'System initial setup (locale, keymap & timezone)')
al@813 55 new-file $(_ 'Create a new file or folder on the desktop')
al@813 56 all-apps $(_ 'Display icons of all installed applications')
al@813 57 notify $(_ 'Notify user with a desktop centered box')
pascal@967 58 tazapps $(_ 'Configure SliTaz default applications')
pascal@967 59 vnc $(_ 'Launch a framebuffer VNC viewer')"
al@813 60 newline
pankso@553 61 }
pankso@553 62
al@939 63
al@813 64 # try to find icon in .desktop files
al@939 65
al@813 66 find_icon() {
al@943 67 local_desktop=$(find $HOME/.local/share/applications \
al@880 68 -name ${1##*/}.desktop 2&>/dev/null | head -n1)
al@939 69 system_desktop=$(find /usr/share/applications \
al@939 70 -name ${1##*/}.desktop 2&>/dev/null | head -n1)
al@939 71 desktop="${local_desktop:-$system_desktop}"
al@939 72 [ -n "$desktop" ] && cat $desktop | sed '/\[Desktop\ Entry\]/,/^\[/!d' | \
al@813 73 sed '/^Icon=/!d' | head -n1 | cut -d= -f2
al@813 74 }
al@813 75
al@939 76
paul@835 77 # su frontend GUIs
al@939 78
pankso@587 79 su_main() {
al@943 80 CMD1="${1%% *}"; CMD2="$(echo "${1#* }" | sed 's|&|&amp;|g')"
al@813 81 : ${icon=$(find_icon $CMD1)}
al@939 82 icon="${icon:-dialog-password}"
al@813 83
al@813 84 yad --title="$(_n 'SliTaz admin password')" --window-icon=$icon \
al@813 85 --width=520 --on-top --center \
al@813 86 --image=$icon --image-on-top \
al@813 87 --text="$(_n 'Please enter root password (default root) to execute:')\n
al@813 88 <span foreground=\"red\"><tt><b>$CMD1</b> $CMD2</tt></span>\n" \
al@813 89 --form \
al@813 90 --field="$(_n 'Password:'):H" $PASSWD \
al@813 91 --field="$(_n 'Autosave password'):CHK" $CHECKED
pankso@587 92 }
pankso@587 93
al@939 94
pankso@587 95 su_error() {
al@939 96 icon='dialog-error'
al@813 97 yad --title="$(_n 'Error')" --window-icon=$icon \
al@813 98 --width=320 --on-top --center \
al@813 99 --image=$icon --image-on-top \
al@813 100 --text="\n<b>$(_n 'Error: wrong password!')</b>\n" \
al@813 101 --button="gtk-close:1"
pankso@587 102 }
pankso@587 103
al@939 104
al@813 105 # user may press cancel on download.
al@939 106
pankso@562 107 cancel_dl() {
al@943 108 if [ "$?" -eq 1 ]; then
al@813 109 _ "CANCEL"
pankso@562 110 rm -f $DOWNLOADS/$(basename $url)
pankso@562 111 fi
pankso@562 112 }
pankso@562 113
al@939 114
al@813 115 # output a command in a GTK window
al@939 116
pankso@744 117 output_command() {
al@813 118 : ${title=$(_n 'TazBox Output')}
al@939 119 : ${icon=dialog-information}
al@813 120
al@943 121 yad --title="$title" --window-icon="$icon" \
al@943 122 --geometry='600x220+0-24' --fore='#ffffff' --back='#000000' \
al@813 123 --text-info --fontname=monospace --wrap $opts \
al@943 124 --button='gtk-close:1'
pankso@562 125 }
pankso@562 126
al@939 127
al@813 128 # logout GUI function
al@939 129
pankso@553 130 logout_main() {
al@939 131 icon='/usr/share/pixmaps/slitaz-icon.png'
al@943 132 yad --title="$(_n 'SliTaz Logout')" --window-icon="$icon" \
al@943 133 --on-top --center --height='130' \
al@943 134 --image="$icon" --image-on-top \
pankso@823 135 --text="<b>$(_n 'SliTaz Logout - Please choose an action:')</b>" \
al@813 136 --always-print-result \
al@878 137 --button "$(_n 'Close X session')!system-log-out:4" \
al@939 138 --button "$(_n 'Reboot system')!system-reboot:3" \
al@878 139 --button "$(_n 'Shutdown system')!system-shutdown:2"
al@813 140 }
pankso@553 141
al@939 142
al@813 143 # generate keymap list
al@939 144
pankso@610 145 gen_kmap_list() {
pankso@610 146 echo > $tmp
pankso@610 147 cd /usr/share/kbd/keymaps/i386
al@813 148 # we first need a list to sort and then use \n for Yad list.
al@813 149 for i in $(find -type f | sed '/include/d; s|./||'); do
al@813 150 echo "$(basename $i .map.gz)|$(dirname $i)" >> $tmp
pankso@610 151 done
pankso@610 152 }
pankso@610 153
al@939 154
pankso@610 155 # Initial Config functions
al@939 156
pankso@610 157 setup_main() {
al@958 158 icon='preferences-desktop-locale'
pankso@610 159 gen_kmap_list
al@813 160 locale=$(ls -1 $db | grep ^[a-z][a-z]_[A-Z][A-Z] | tr "\n" "!")
al@813 161 keymap=$(cat $tmp | sort | tr "\n" "!")
al@880 162 timezone=$(find $zi -type f | sed s,$zi,,g | grep -v -F '.tab' | tr "\n" "!")
al@813 163 yad --title="$(_n 'SliTaz Initial Setup')" --window-icon=$icon \
al@943 164 --width='500' \
al@943 165 --image="$icon" --image-on-top \
al@813 166 --text="<big>$(_n 'Here you can set your preferences \n for <b>locale, keymap and timezone</b>.')</big>" \
al@813 167 --form \
al@813 168 --field "$(_n 'Locale'):CB" $locale \
al@813 169 --field "$(_n 'Keymap'):CB" $keymap \
al@813 170 --field "$(_n 'Timezone'):CB" $timezone
pankso@610 171 }
pankso@610 172
al@939 173
pankso@610 174 setup() {
pankso@610 175 choices=$(setup_main)
al@943 176 locale=$( echo $choices | cut -d'|' -f1)
al@943 177 keymap=$( echo $choices | cut -d'|' -f2)
al@943 178 timezone=$(echo $choices | cut -d'|' -f3)
al@943 179 [ -n "$locale" ] && tazlocale init $locale
al@943 180 [ -n "$keymap" ] && tazkeymap init $keymap
al@943 181 [ -n "$timezone" ] && echo $timezone > /etc/TZ
pankso@610 182 }
pankso@610 183
al@880 184
al@880 185 #
pankso@569 186 # Locale functions
al@880 187 #
al@880 188
pankso@569 189 locale_main() {
al@939 190 icon='preferences-desktop-locale'
al@813 191 for locale in $(ls -1 $db | grep '[a-z]_[A-Z]'); do
al@813 192 desc=$(fgrep -m1 title $db/$locale | cut -d'"' -f2)
al@886 193 ll_CC=${locale%%@*}
al@886 194 echo -e "${ll_CC##*_}\n$locale\n$desc"
pankso@569 195 done | \
al@943 196 yad --title="$(_n 'SliTaz locale')" --window-icon="$icon" \
al@943 197 --width='600' --height='380' --sticky --on-top --center \
al@943 198 --image="$icon" --image-on-top \
al@880 199 --text="<b>$(_n 'Language configuration')</b> \
paul@884 200 \n\n$(_ 'Tip: manage locales list by installing/removing locale packages.')" \
al@880 201 --list --column="$(_n 'Flag'):IMG" --column $(_n 'Name') \
al@880 202 --column $(_n 'Description') \
al@943 203 --print-column='2' --separator='' \
al@957 204 --button="$(_n 'Manage')!document-properties:2" \
al@880 205 --button="gtk-cancel:1" --button="gtk-ok:0"
pankso@569 206 }
pankso@569 207
al@939 208
pankso@569 209 locale() {
pankso@569 210 locale=$(locale_main)
pankso@569 211 # Deal with --button values
pankso@569 212 case $? in
al@880 213 2) tazbox manage_i18n main ;;
pankso@569 214 1) exit 0 ;;
pankso@569 215 *) continue ;;
pankso@569 216 esac
pankso@573 217 # System language configuration.
al@880 218 if [ "$locale" ]; then
al@880 219 tazlocale $locale
al@943 220 tazbox notify "$(_ 'Locale was set to %s' "$locale")" \
al@880 221 preferences-desktop-locale 3
al@880 222 fi
pankso@569 223 }
pankso@569 224
al@939 225
pankso@569 226 # Keymap functions
al@939 227
pankso@569 228 keymap_main() {
al@939 229 icon='preferences-desktop-keyboard'
pankso@610 230 gen_kmap_list
al@813 231 for i in $(sort $tmp); do
al@813 232 echo "$i" | tr '|' '\n'
pankso@569 233 done | \
al@813 234 yad --title="$(_ 'SliTaz keymap')" --window-icon=$icon \
al@813 235 --width=500 --height=380 --sticky --on-top --center \
al@813 236 --image=$icon --image-on-top \
al@813 237 --text="<b>$(_n 'Keyboard configuration')</b>" \
al@813 238 --list --column $(_n 'Keymap') --column $(_n 'Type') \
al@813 239 --print-column=1 --separator=''
pankso@573 240 rm -f $tmp
pankso@569 241 }
pankso@569 242
al@939 243
pankso@569 244 keymap() {
pankso@569 245 keymap=$(keymap_main)
pankso@569 246 # Deal with --button values
al@943 247 [ "$?" -eq 1 ] && exit 0
pankso@573 248 # System keymap configuration
al@943 249 [ -n "$keymap" ] && tazkeymap $keymap
pankso@569 250 }
pankso@569 251
al@939 252
al@845 253 # Free GeoIP service
al@938 254 # Response: IP,CountryCode,CountryName, ...
al@939 255
al@845 256 geoip() {
al@958 257 # freegeoip.net can be in the blocked hosts list. Return only correct answer or nothing
al@958 258 [ ! -e $csv ] && wget -q -T3 -O - http://freegeoip.net/csv/ 2&>/dev/null | \
al@958 259 grep '[0-9.]*,.*,.*,.*,.*,.*,.*,.*,[0-9.]*,[0-9.]*' > $csv
al@938 260 [ -e $csv ] && cut -d, -f2 $csv
al@845 261 }
al@845 262
al@939 263
al@880 264 #
pankso@604 265 # TZ functions
al@880 266 #
al@880 267
al@939 268
al@880 269 # list of all existing available locations for country
al@939 270
al@880 271 tz_list() {
al@880 272 find $zi | \
al@957 273 grep -E "$(awk -F$'\t' -vv="$1" '{if ($1 == v || $2 ~ v) print $2}' $ztab | tr ' ' '|')" | \
al@880 274 grep -v -E "posix|right" | \
al@880 275 sed 's|.*/||g' | sort
al@880 276 }
al@880 277
al@939 278
al@880 279 # ask for confirmation only if we have what to choose
al@939 280
al@845 281 tz_suggest() {
al@845 282 CountryCode=$(geoip)
al@943 283 if [ -n "$CountryCode" ]; then
al@943 284 if [ -n "$(tz_list $CountryCode)" ]; then
al@939 285 CountryName=$(cut -d, -f3 $csv)
al@943 286 yad --title="$(_ 'SliTaz TZ')" --window-icon="$icon" \
al@845 287 --on-top --center \
al@943 288 --image="$CountryCode" --image-on-top \
al@845 289 --text="$(_ 'Suggested location:') <b>$CountryName</b>\n
paul@861 290 $(_ 'Are you agreed?')" \
al@943 291 --button='gtk-yes:0' --button='gtk-no:1'
al@943 292 [ "$?" -eq 0 ] && echo $CountryCode
al@880 293 fi
al@845 294 fi
al@813 295 }
al@813 296
al@939 297
al@813 298 tz_select() {
al@813 299 case x$1 in
al@813 300 x)
al@813 301 # first pass - country
al@845 302 tmpcc=$(mktemp)
al@845 303
al@845 304 for tzfile in $(find $zi -type f -regex '.*info/[ABCEIMP].*'); do
al@845 305 grep -m1 $(basename $tzfile) $ztab
al@943 306 done | cut -d$'\t' -f1 | sort -u > $tmpcc
al@845 307
al@845 308 for CC in $(cat $tmpcc); do
al@813 309 cat << EOT
al@813 310 $CC
al@813 311 $CC
al@957 312 $(grep -m1 "$CC " ${zi}iso3166.tab | cut -d$'\t' -f2 | sed 's|\&|&amp;|g')
al@813 313 EOT
al@813 314 done | \
al@943 315 yad --title="$(_ 'SliTaz TZ')" --window-icon="$icon" \
al@943 316 --width='500' --height='380' --on-top --center \
al@943 317 --image="$icon" --image-on-top \
al@880 318 --text="<b>$(_ 'TimeZone Configuration')</b> \
paul@884 319 \n$(_ 'Select country and press "Forward" or manually select timezone file.') \
paul@884 320 \n\n$(_ 'Tip: manage timezones list by installing/removing locale packages.')" \
al@813 321 --list \
al@813 322 --column="$(_n 'Flag'):IMG" --column=$(_n 'Code') --column=$(_n 'Country') \
al@957 323 --button="$(_n 'Manage')!document-properties:4" \
al@880 324 --button="$(_n 'Manual')!gtk-index:2" \
al@880 325 --button="gtk-go-forward:0" \
al@813 326 --button="gtk-cancel:1" --always-print-result \
al@943 327 --print-column='2' --separator=''
al@813 328 ;;
al@813 329 xindex)
al@813 330 # manual selection of file with timezone info
al@943 331 yad --title="$(_ 'SliTaz TZ')" --window-icon="$icon" \
al@943 332 --width='500' --on-top --center \
al@943 333 --image="$icon" --image-on-top \
al@813 334 --text="<b>$(_ 'TimeZone Configuration')</b>\n$(_ 'Select time zone')" \
al@845 335 --form --field=":FL" ${zi}UTC --separator='' | \
al@845 336 sed "s|$zi||"
al@813 337 ;;
al@813 338 *)
al@813 339 # second pass - city/place
al@880 340 list=$(tz_list $1)
al@943 341 icon="$1"
al@813 342 if [ $(echo "$list" | wc -l) != 1 ]; then
al@813 343 echo "$list" | \
al@943 344 yad --title="$(_ 'SliTaz TZ')" --window-icon="$icon" \
al@943 345 --width='500' --height='380' --on-top --center \
al@943 346 --image="$icon" --image-on-top \
al@813 347 --text="<b>$(_ 'TimeZone Configuration')</b>\n$(_ 'Select location')" \
al@813 348 --list --column $(_n 'Location/City') --separator=''
al@813 349 else
al@813 350 echo $list
al@813 351 fi
al@813 352 ;;
al@813 353 esac
pankso@604 354 }
pankso@604 355
al@939 356
pankso@604 357 tz() {
al@957 358 icon='preferences-system-time'
al@845 359 arg=$(tz_suggest)
al@845 360
al@845 361 timezone=$(tz_select $arg)
al@813 362 case $? in
al@813 363 1) exit 0 ;;
al@957 364 0)
al@957 365 [ -n "$timezone" ] && timezone=$(tz_select "$timezone")
al@943 366 [ -z "$timezone" ] && exit 0
al@880 367 timezone=$(find $zi -name $timezone | grep -v -E "posix|right" | \
al@957 368 sed "s|$zi||")
al@957 369 ;;
al@813 370 2) timezone=$(tz_select "index") ;;
al@880 371 4) tazbox manage_i18n main;;
al@813 372 esac
al@845 373
al@943 374 [ -z "$timezone" ] && exit 0
al@813 375 echo $timezone > /etc/TZ
al@813 376 export TZ=$timezone
al@943 377 tazbox notify "$(_ 'TimeZone was set to %s' "$timezone")" $icon 3
al@845 378 rm -f $tmpcc
pankso@604 379 }
pankso@604 380
al@939 381
al@880 382 #
al@880 383 # Manage i18n packages
al@880 384 #
al@880 385
al@939 386
al@880 387 # if installed
al@939 388
al@880 389 if_installed() {
al@949 390 [ -d "$INSTALLED/$1" ]
al@880 391 }
al@880 392
al@939 393
al@880 394 # get package's description, install flag and sizes
al@939 395
al@943 396 desc_etc() {
al@949 397 if grep -q "^$1"$'\t' "$PKGS_DB/installed.info"; then
al@943 398 echo 'TRUE' >> $PKGS_LIST; echo $1 >> $ORIG_LIST
al@880 399 else
al@943 400 echo 'FALSE' >> $PKGS_LIST
al@880 401 fi
al@943 402 awk -F$'\t' -vp="$1" '
al@943 403 ($1==p){
al@943 404 split($7, s, " ");
al@943 405 printf "%s\n%s\n%s\n%s\n", $1, $4, s[1], s[2];
al@949 406 }' "$PKGS_DB/packages.info" >> $PKGS_LIST
al@880 407 }
al@880 408
al@939 409
al@880 410 # remove temp
al@939 411
al@880 412 rm_temp() {
al@880 413 rm -f $PKGS_LIST $ORIG_LIST $ANSWER $NEW_LIST $LIST1 $LIST2
al@880 414 }
al@880 415
al@939 416
al@880 417 # install/remove locale packages
al@939 418
al@880 419 manage_i18n() {
al@880 420 PKGS_LIST=$(mktemp)
al@880 421 ORIG_LIST=$(mktemp)
al@880 422 ANSWER=$(mktemp)
al@880 423 NEW_LIST=$(mktemp)
al@880 424 LIST1=$(mktemp)
al@880 425 LIST2=$(mktemp)
al@949 426 PINFO="$PKGS_DB/packages.info"
al@949 427
al@949 428 if [ ! -e "$PINFO" ]; then
al@949 429 icon='dialog-warning'
al@949 430 yad --title="$(_n 'Manage locale packages')" --window-icon="$icon" \
al@949 431 --width='400' --on-top --center \
al@949 432 --image="$icon" --image-on-top \
al@949 433 --text="$(_n 'Please, recharge packages database.')" \
al@957 434 --button="$(_n 'Recharge list')!view-refresh:2" \
al@949 435 --button="gtk-cancel:1"
al@949 436
al@949 437 case "$?" in
al@957 438 1) rm_temp; return;;
al@949 439 2) tazbox recharge;;
al@949 440 esac
al@949 441 fi
al@949 442
al@949 443 tazbox notify "$(_ 'Please wait')" appointment-soon &
al@880 444
al@943 445 for i in $(awk -F$'\t' '$1~/^locale-[a-z_A-Z]+$/{print $1}' $PINFO); do
al@880 446 desc_etc $i
al@880 447 done
al@880 448
al@943 449 if [ "$1" != 'main' ]; then
al@943 450 for i in $(awk -F$'\t' '$1~/^locale-[a-z_A-Z]+-extra$/{print $1}' $PINFO); do
al@880 451 desc_etc $i
al@880 452 done
al@943 453
al@880 454 if if_installed libQtCore; then
al@943 455 for i in $(awk -F$'\t' '$1~/^qt-locale/{print $1}' $PINFO); do
al@880 456 desc_etc $i
al@880 457 done
al@880 458 fi
al@943 459
al@880 460 if if_installed razorqt; then
al@943 461 for i in $(awk -F$'\t' '$1~/^razorqt-locale/{print $1}' $PINFO); do
al@880 462 desc_etc $i
al@880 463 done
al@880 464 fi
al@943 465
al@880 466 if if_installed firefox; then
al@943 467 for i in $(awk -F$'\t' '$1~/^firefox-langpack/{print $1}' $PINFO); do
al@880 468 desc_etc $i
al@880 469 done
al@880 470 fi
al@943 471
al@880 472 if if_installed thunderbird; then
al@943 473 for i in $(awk -F$'\t' '$1~/^thunderbird-langpack/{print $1}' $PINFO); do
al@880 474 desc_etc $i
al@880 475 done
al@880 476 fi
al@943 477
al@880 478 if if_installed squirrelmail; then
al@943 479 for i in $(awk -F$'\t' '$1~/^squirrelmail-[a-z][a-z][_-]/{print $1}' $PINFO); do
al@880 480 desc_etc $i
al@880 481 done
al@880 482 fi
al@943 483
al@880 484 if if_installed aspell; then
al@943 485 for i in $(awk -F$'\t' '$1~/^aspell-[a-z][a-z]_?[A-Z]?[A-Z]?$/{print $1}' $PINFO); do
al@880 486 desc_etc $i
al@880 487 done
al@880 488 fi
al@943 489
al@880 490 OTHER_LOCALE="gnome-commander|-i18n gnome-vfs|-i18n gpa|-langpack \
al@880 491 gucharmap|-i18n lxterminal|-locales lyx|-locales rox-filer|-locales \
al@880 492 ufraw|-locales qupzilla|-locales"
al@880 493 for i in $OTHER_LOCALE; do
al@880 494 if if_installed ${i%%|*}; then desc_etc ${i/|/}; fi
al@880 495 done
al@880 496 fi
al@880 497
al@957 498 icon='preferences-desktop-locale'
al@880 499 cat $PKGS_LIST | \
al@880 500 {
al@943 501 yad --title="$(_n 'Manage locale packages')" --window-icon="$icon" \
al@943 502 --width='600' --height='400' --on-top --center \
al@943 503 --image="$icon" --image-on-top \
al@880 504 --text="$(_n 'Check only locale packages you need and press "Install/Remove".')" \
al@943 505 --list --multiple --ellipsize='END' --expand-column='3' \
al@880 506 --column="$(_n 'Inst.'):CHK" --column="$(_n 'Package Name'):TEXT" \
al@880 507 --column="$(_n 'Description'):TEXT" --column="$(_n 'Size'):TEXT" \
al@880 508 --column="$(_n 'Installed'):TEXT" \
al@957 509 --button="$(_n 'Recharge list')!view-refresh:4" \
al@957 510 --button="$(_n 'Install/Remove')!gtk-execute:2" \
al@880 511 --button="gtk-cancel:1" \
al@880 512 --print-all
al@880 513 } > $ANSWER
al@880 514
al@949 515 case "$?" in
al@949 516 1) rm_temp; exit 0;;
al@957 517 4) tazbox recharge; rm_temp; tazbox manage_i18n; exit 0;;
al@949 518 esac
al@880 519
al@880 520 grep -e 'TRUE' $ANSWER | cut -d'|' -f2 > $NEW_LIST
al@880 521
al@880 522 # check difference between ORIG_LIST and NEW_LIST
al@880 523 sort -o $LIST1 $ORIG_LIST
al@880 524 sort -o $LIST2 $NEW_LIST
al@880 525 DIFF=$(diff $LIST1 $LIST2 | sed '/---/d;/+++/d;/@@/d')
al@943 526 if [ -z "$DIFF" ]; then rm_temp; exit 0; fi
al@880 527
al@880 528 # output log to gtk window
al@957 529 title="$(_n 'TazPkg log')"; icon='system-software-update'; opts='--tail'
al@880 530 {
al@880 531 for pkg in $(echo "$DIFF" | grep -e '^-' | sed 's|^-||g'); do
al@943 532 _ 'REMOVE: %s' "$pkg"
al@943 533 yes | tazpkg -r $pkg --output='raw'
al@880 534 done
al@880 535 for pkg in $(echo "$DIFF" | grep -e '^+' | sed 's|^+||g'); do
al@943 536 _ 'INSTALL: %s' "$pkg"
al@943 537 tazpkg -gi $pkg --output='raw'
al@880 538 done
al@880 539 echo -e "\n\n$(_n 'Done!')\n"
al@880 540 } | output_command
al@880 541 rm_temp
al@880 542 }
al@880 543
al@880 544
al@880 545
pankso@632 546 # New file functions
al@939 547
pankso@632 548 newfile_main() {
al@957 549 icon='document-new'
al@943 550 yad --title="$(_n 'New file')" --window-icon="$icon" \
al@943 551 --width='460' --height='160' --on-top --center \
al@943 552 --image="$icon" --image-on-top \
al@943 553 --icon="$icon" \
al@813 554 --text="<b>$(_n 'Create a new file or folder on your desktop')</b>" \
al@813 555 --entry --entry-label="$(_n 'File name')" \
al@957 556 --ricon='edit-clear' \
al@813 557 --always-print-result \
al@878 558 --button="$(_n 'SHell script')!application-x-shellscript:4" \
al@939 559 --button="$(_n 'Folder')!folder:3" \
al@939 560 --button="$(_n 'File')!empty:2" \
al@943 561 --button='gtk-cancel:1'
pankso@632 562 }
pankso@632 563
al@939 564
pankso@632 565 newfile() {
pankso@632 566 file=$(newfile_main)
pankso@700 567 ret=$?
al@943 568 [ -z "$file" ] && exit 0
pankso@700 569 case $ret in
pankso@700 570 4)
al@943 571 cat > "$HOME/Desktop/$file" << EOT
pankso@632 572 #!/bin/sh
pankso@632 573 #
pankso@632 574
pankso@632 575 EOT
al@943 576 chmod +x "$HOME/Desktop/$file" ;;
al@943 577 3) mkdir -p "$HOME/Desktop/$file" ;;
al@943 578 2) touch "$HOME/Desktop/$file" ;;
pankso@700 579 1) exit 0 ;;
pankso@632 580 esac
pankso@632 581 }
pankso@632 582
al@939 583
pankso@637 584 # All applications
al@939 585
pankso@637 586 all_apps() {
al@957 587 icon='user-bookmarks'
al@943 588 yad --title="$(_n 'All Applications')" --window-icon="$icon" \
al@943 589 --width='400' --height='400' \
al@813 590 --icons --compact \
al@943 591 --read-dir='/usr/share/applications' \
al@943 592 --button='gtk-close:0'
pankso@637 593 }
pankso@637 594
al@939 595
al@813 596 # Ask root permissions for system settings
al@939 597
al@813 598 ask_root() {
al@943 599 if [ "$(id -u)" -ne 0 ]; then
al@813 600 exec tazbox su $0 $@
al@813 601 exit 0
al@813 602 fi
al@813 603 }
al@810 604
al@939 605
pascal@967 606 vnc_main() {
pascal@967 607 icon='video-display'
pascal@967 608 yad --title="$(_n 'Framebuffer VNC viewer')" --window-icon="$icon" \
pascal@969 609 --width='250' --height='160' --on-top --center \
pascal@969 610 --image="$icon" --image-on-top --icon="$icon" \
pascal@969 611 --form \
pascal@969 612 --text="<b>$(_n 'Remote display connection')</b>" "localhost 5900" \
pascal@969 613 --field="$(_n 'VNC Server')" \
pascal@969 614 --field="$(_n 'Via a SSH tunnel'):CHK" \
pascal@967 615 --always-print-result \
pascal@969 616 --button="$(_n 'On this console'):1" \
pascal@969 617 --button="$(_n 'In a new console'):0"
pascal@967 618 }
pascal@967 619
pascal@967 620
pascal@967 621 newvt()
pascal@967 622 {
pascal@967 623 ask_root newvt $@ || return
pascal@967 624 openvt -sw $@
pascal@967 625 deallocvt
pascal@967 626 }
pascal@967 627
pascal@967 628
pascal@967 629 vnc() {
pascal@967 630 server=$(vnc_main)
pascal@967 631 status=$?
pascal@967 632 # Deal with --button values
pascal@969 633 [ "$server" ] || return
pascal@969 634 case "$server" in
pascal@969 635 *TRUE\|) fbvnc=sshfbvnc ;;
pascal@969 636 *) fbvnc=fbvnc ;;
pascal@969 637 esac
pascal@969 638 case "$status" in
pascal@969 639 1) $fbvnc ${server%%|*} ;;
pascal@969 640 0) newvt $fbvnc ${server%%|*} ;;
pascal@967 641 esac
pascal@967 642 }
pascal@967 643
pascal@967 644
pankso@553 645 #
pankso@553 646 # Commands
pankso@553 647 #
al@939 648
pankso@553 649 case "$1" in
pankso@553 650 su)
al@943 651 shift
al@813 652 # Don't show dialog if we are root
al@943 653 [ "$(id -u)" -eq 0 ] && exec "$@"
al@943 654 SU_CMD="$@"
al@943 655 SUBOX_CONF="$HOME/.config/slitaz/subox.conf"
al@939 656
paul@593 657 # Check if a password has been saved before launching main dialog
al@943 658 if [ -s "$SUBOX_CONF" ]; then
al@943 659 PASSWD="$(cat $SUBOX_CONF)"
al@943 660 CHECKED='TRUE'
pankso@587 661 fi
al@939 662
pankso@744 663 # Display the main dialog (ask for password)
al@943 664 main="$(su_main "$SU_CMD")"
al@939 665
paul@593 666 # Deal with --button values and exit if cancelled to avoid erasing
pankso@587 667 # saved password.
al@943 668 [ "$?" -eq 1 ] && exit 0
al@939 669
pankso@587 670 # Save or erase Autosaved password
al@943 671 if [ $(echo "$main" | cut -d"|" -f2) == 'TRUE' ]; then
al@943 672 echo "$main" | cut -d"|" -f1 > $SUBOX_CONF
al@943 673 chmod 0600 $SUBOX_CONF
pankso@587 674 else
al@943 675 cat /dev/null > $SUBOX_CONF
pankso@587 676 fi
al@939 677
pankso@744 678 # Try to login & execute. If password is wrong execute error dialog
psychomaniak@914 679 SU_CMD_QUOTED="$(echo "dbus-launch --exit-with-session $SU_CMD" | sed 's|&|\\&|g')"
al@943 680 echo $main | cut -d"|" -f1 | su -c "$SU_CMD_QUOTED &" || su_error
al@943 681 ;;
al@943 682
pankso@553 683 logout)
paul@593 684 # Logout window with actions
al@943 685 if [ -n "$oldstyle" ]; then
al@813 686 answer=$(logout_oldstyle)
al@813 687 else
al@813 688 logout_main; answer=$?
al@813 689 fi
al@939 690
pankso@553 691 # Deal with --button values
paul@763 692 # DE and WM started with a custom -session script should export
pankso@736 693 # XDG_CURRENT_DESKTOP
al@813 694 case $answer in
al@813 695 4|*exit)
pankso@736 696 case $XDG_CURRENT_DESKTOP in
pankso@736 697 LXDE)
al@943 698 [ -n "$_LXSESSION_PID" ] && kill $_LXSESSION_PID
al@943 699 [ "$DESKTOP_SESSION" == 'compiz' ] && killall compiz
pankso@736 700 openbox --exit ;;
pankso@736 701 openbox) openbox --exit ;;
pankso@736 702 compiz) killall compiz ;;
pankso@736 703 *)
pankso@736 704 # Try to kill other WM that dont set XDG var.
pankso@736 705 jwm -exit 2>/dev/null ;;
pankso@736 706 esac ;;
al@813 707 3|*reboot)
al@813 708 reboot || reboot -f ;;
al@813 709 2|*halt)
al@813 710 poweroff ;;
al@943 711 esac
al@943 712 ;;
al@943 713
pankso@562 714 out)
pankso@562 715 # Pipe a command into a GTK window
al@943 716 sed 's|\[.m||g; s|\[[0-9][0-9]*G| |g' | output_command
al@943 717 ;;
al@943 718
paul@593 719 out-dl)
pankso@562 720 # A tiny GTK window for Busybox wget output
al@943 721 url="$2"; opts='--tail --button=gtk-cancel:1'
al@957 722 icon='folder-download'; title="$(_ 'Downloading...')"
slaxemulator@594 723 [ -d $DOWNLOADS ] || mkdir -p $DOWNLOADS
pascal@648 724 busybox wget -c -P $DOWNLOADS $url 2>&1 | output_command
al@943 725 cancel_dl
al@943 726 ;;
al@943 727
pankso@569 728 locale)
al@943 729 ask_root $@ && locale
al@943 730 ;;
al@943 731
pankso@569 732 keymap)
al@943 733 ask_root $@ && keymap
al@943 734 ;;
al@943 735
al@813 736 tz)
al@943 737 ask_root $@ && tz
al@943 738 ;;
al@943 739
al@880 740 manage_i18n)
al@943 741 ask_root $@ && manage_i18n $2
al@943 742 ;;
al@943 743
al@880 744 recharge)
al@949 745 ask_root $@; opts='--on-top'; output=raw tazpkg recharge | output_command
al@943 746 ;;
al@943 747
al@813 748 setup)
al@943 749 ask_root $@ && setup
al@943 750 ;;
al@943 751
pankso@632 752 new-file)
al@943 753 newfile
al@943 754 ;;
al@943 755
pankso@637 756 all-apps)
al@943 757 all_apps
al@943 758 ;;
al@943 759
pankso@689 760 notify|-n)
pankso@689 761 # On screen notification box.
pankso@721 762 icon="$3"
pankso@721 763 time="$4"
al@957 764 [ -z "$icon" ] && icon='dialog-information'
al@943 765 [ -z "$time" ] && time='4'
al@943 766 yad --width='520' --height='80' --timeout="$time" --timeout-indicator='right' \
al@943 767 --on-top --center --no-buttons --borders='12' --undecorated \
al@943 768 --skip-taskbar --image="$icon" --image-on-top --text="<b>$2</b>"
al@943 769 ;;
al@943 770
al@807 771 tazapps)
al@807 772 # Default applications configuration script. System wide config file
al@807 773 # is /etc/slitaz/applications.conf and each user can have personal
al@807 774 # settings. System wide for root and personal config for user.
al@807 775 export CONFIG="$HOME/.config/slitaz/applications.conf"
al@943 776 if [ "$(id -u)" -eq 0 ]; then
psychomaniak@912 777 [ ! -f $CONFIG ] || mv -f $CONFIG /etc/slitaz/applications.conf
al@943 778 export CONFIG='/etc/slitaz/applications.conf'
al@807 779 fi
psychomaniak@912 780
al@943 781 for a in FILE_MANAGERS BROWSERS EDITORS TERMINALS WINDOW_MANAGERS; do
psychomaniak@918 782 eval $(expr $a=$(echo $(LC_ALL=C tazx get-applist ${a%%S} \
psychomaniak@912 783 only-installed yad) | sed 's/ /!/g ; s/!!//g; s/ //g'))
psychomaniak@912 784 done
psychomaniak@912 785
psychomaniak@912 786 # Missing file was created by slitaz_apps_conf function from tazx
al@807 787 . $CONFIG
al@810 788
al@939 789 icon='preferences-desktop-default-applications'
al@813 790 eval $(yad --title="$(_n 'SliTaz default applications')" \
al@943 791 --window-icon="$icon" --image="$icon" --image-on-top \
al@813 792 --text="<b>$(_n 'SliTaz default applications configuration')</b>" \
al@807 793 --form \
al@813 794 --field="$(_n 'File manager:'):CBE" "$FILE_MANAGERS" \
al@813 795 --field="$(_n 'Web browser:'):CBE" "$BROWSERS" \
al@813 796 --field="$(_n 'Text editor:'):CBE" "$EDITORS" \
al@813 797 --field="$(_n 'Terminal:'):CBE" "$TERMINALS" \
al@813 798 --field="$(_n 'Window manager:'):CBE" "$WINDOW_MANAGERS" | \
al@807 799 awk -F'|' '{printf "FILE_MANAGER=\"%s\"\nBROWSER=\"%s\"\nEDITOR=\"%s\"\
al@807 800 TERMINAL=\"%s\"\nWINDOW_MANAGER=\"%s\"\n", $1, $2, $3, $4, $5}')
al@810 801
al@807 802 sed '/FILE_MANAGER=/s|"\([^"]*\)"|"'$FILE_MANAGER'"|; \
al@807 803 /BROWSER=/s|"\([^"]*\)"|"'$BROWSER'"|; \
al@807 804 /EDITOR=/s|"\([^"]*\)"|"'$EDITOR'"|; \
al@807 805 /TERMINAL=/s|"\([^"]*\)"|"'$TERMINAL'"|; \
al@807 806 /WINDOW_MANAGER=/s|"\([^"]*\)"|"'$WINDOW_MANAGER'"|' \
al@943 807 -i $CONFIG
al@943 808 ;;
al@943 809
al@807 810 gpl)
al@957 811 yad --title='GNU General Public License' --window-icon='text-x-copying' \
al@943 812 --geometry='650x500' \
al@943 813 --image='/usr/share/pixmaps/gpl3.png' --image-on-top \
al@813 814 --center \
al@813 815 --text-info \
al@943 816 --fontname='monospace' \
al@943 817 --button 'OK' < /usr/share/licenses/gpl.txt
al@943 818 ;;
al@943 819
pascal@967 820 vnc)
pascal@967 821 vnc
pascal@967 822 ;;
pascal@967 823
pascal@967 824 newvt)
pascal@967 825 $@
pascal@967 826 ;;
pascal@967 827
pankso@553 828 *)
al@943 829 usage
al@943 830 ;;
pankso@553 831 esac
pankso@553 832
pankso@553 833 exit 0