slitaz-tools annotate tazbox/tazbox @ rev 1037

tazbox: lxpolkit support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Oct 23 10:41:01 2021 +0000 (2021-10-23)
parents 09a408773b37
children
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'
pascal@1032 32 prncf=~/.config/slitaz/printer
claudinei@611 33
al@939 34
pankso@553 35 #
pankso@553 36 # Functions
pankso@553 37 #
pankso@553 38
pankso@553 39 usage() {
al@813 40 newline; _ 'SliTaz tiny GUI boxes for the desktop'
pankso@553 41
al@813 42 newline; boldify $(_ 'Usage:')
al@813 43 echo " $(basename $0) [$(_n 'command')]"
pankso@553 44
al@813 45 newline; boldify $(_ 'Commands:')
al@813 46 optlist "\
al@813 47 usage $(_ 'Display this short help usage')
al@813 48 su $(_ 'Execute a command as super-user')
al@813 49 logout $(_ 'Desktop logout box with actions')
al@813 50 out $(_ 'Pipe a command output into a GTK window')
al@813 51 out-dl $(_ 'Pipe wget output into a GTK window')
al@813 52 locale $(_ 'Configure system language (root)')
al@813 53 keymap $(_ 'Configure system keymap (root)')
al@813 54 tz $(_ 'Configure system timezone (root)')
al@813 55 setup $(_ 'System initial setup (locale, keymap & timezone)')
al@813 56 new-file $(_ 'Create a new file or folder on the desktop')
al@813 57 all-apps $(_ 'Display icons of all installed applications')
al@813 58 notify $(_ 'Notify user with a desktop centered box')
pascal@967 59 tazapps $(_ 'Configure SliTaz default applications')
pascal@1028 60 vnc $(_ 'Launch a framebuffer VNC viewer')
pascal@1032 61 ssh $(_ 'Open a remote terminal')
pascal@1032 62 print $(_ 'Print PDF or PS files on a network printer')"
al@813 63 newline
pankso@553 64 }
pankso@553 65
al@939 66
al@813 67 # try to find icon in .desktop files
al@939 68
al@813 69 find_icon() {
al@943 70 local_desktop=$(find $HOME/.local/share/applications \
al@880 71 -name ${1##*/}.desktop 2&>/dev/null | head -n1)
al@939 72 system_desktop=$(find /usr/share/applications \
al@939 73 -name ${1##*/}.desktop 2&>/dev/null | head -n1)
al@939 74 desktop="${local_desktop:-$system_desktop}"
pascal@1031 75 [ "$desktop" ] && sed '/\[Desktop\ Entry\]/,/^\[/!d' $desktop | \
al@813 76 sed '/^Icon=/!d' | head -n1 | cut -d= -f2
al@813 77 }
al@813 78
al@939 79
paul@835 80 # su frontend GUIs
al@939 81
pankso@587 82 su_main() {
al@943 83 CMD1="${1%% *}"; CMD2="$(echo "${1#* }" | sed 's|&|&amp;|g')"
al@813 84 : ${icon=$(find_icon $CMD1)}
al@939 85 icon="${icon:-dialog-password}"
al@813 86
al@813 87 yad --title="$(_n 'SliTaz admin password')" --window-icon=$icon \
al@813 88 --width=520 --on-top --center \
al@813 89 --image=$icon --image-on-top \
al@813 90 --text="$(_n 'Please enter root password (default root) to execute:')\n
al@813 91 <span foreground=\"red\"><tt><b>$CMD1</b> $CMD2</tt></span>\n" \
al@813 92 --form \
al@813 93 --field="$(_n 'Password:'):H" $PASSWD \
al@813 94 --field="$(_n 'Autosave password'):CHK" $CHECKED
pankso@587 95 }
pankso@587 96
al@939 97
pankso@587 98 su_error() {
al@939 99 icon='dialog-error'
al@813 100 yad --title="$(_n 'Error')" --window-icon=$icon \
al@813 101 --width=320 --on-top --center \
al@813 102 --image=$icon --image-on-top \
al@813 103 --text="\n<b>$(_n 'Error: wrong password!')</b>\n" \
al@813 104 --button="gtk-close:1"
pankso@587 105 }
pankso@587 106
al@939 107
al@813 108 # user may press cancel on download.
al@939 109
pankso@562 110 cancel_dl() {
al@943 111 if [ "$?" -eq 1 ]; then
al@813 112 _ "CANCEL"
pankso@562 113 rm -f $DOWNLOADS/$(basename $url)
pankso@562 114 fi
pankso@562 115 }
pankso@562 116
al@939 117
al@813 118 # output a command in a GTK window
al@939 119
pankso@744 120 output_command() {
al@813 121 : ${title=$(_n 'TazBox Output')}
al@939 122 : ${icon=dialog-information}
al@813 123
al@943 124 yad --title="$title" --window-icon="$icon" \
al@943 125 --geometry='600x220+0-24' --fore='#ffffff' --back='#000000' \
al@813 126 --text-info --fontname=monospace --wrap $opts \
al@943 127 --button='gtk-close:1'
pankso@562 128 }
pankso@562 129
al@939 130
al@813 131 # logout GUI function
al@939 132
pankso@553 133 logout_main() {
al@939 134 icon='/usr/share/pixmaps/slitaz-icon.png'
al@943 135 yad --title="$(_n 'SliTaz Logout')" --window-icon="$icon" \
al@943 136 --on-top --center --height='130' \
al@943 137 --image="$icon" --image-on-top \
pankso@823 138 --text="<b>$(_n 'SliTaz Logout - Please choose an action:')</b>" \
al@813 139 --always-print-result \
al@878 140 --button "$(_n 'Close X session')!system-log-out:4" \
al@939 141 --button "$(_n 'Reboot system')!system-reboot:3" \
al@878 142 --button "$(_n 'Shutdown system')!system-shutdown:2"
al@813 143 }
pankso@553 144
al@939 145
al@1004 146 # logout functions with auto-confirmation
al@1004 147
al@1004 148 logout_confirm() {
al@1004 149 timeout=5
al@1004 150 case $1 in
al@1004 151 exit) action="$(_n 'Closing the X session...')"; icon='system-log-out';;
al@1004 152 reboot) action="$(_n 'Rebooting the system...')"; icon='system-reboot';;
al@1004 153 halt) action="$(_n 'Shutting down the system...')"; icon='system-shutdown';;
al@1004 154 *) exit;;
al@1004 155 esac
al@1004 156 warning="$(_ 'Selected action will be executed automatically in %s seconds.' "$timeout")"
al@1004 157 yad --title="$(_n 'SliTaz Logout')" --window-icon="$icon" \
al@1004 158 --on-top --center --width='300' --image="$icon" --image-on-top \
al@1004 159 --text="<b>$action</b>\n\n$warning" \
al@1004 160 --timeout $timeout --timeout-indicator=bottom \
pascal@1030 161 --button "gtk-cancel:252" --button "gtk-ok:0"
al@1004 162 [ "$?" -ne 252 ] || exit 0
al@1004 163 }
al@1004 164
al@1004 165
al@1004 166 # make logout menu in the right edge of LXPanel
al@1004 167
al@1004 168 mkmenu() {
al@1004 169 # (re)make the menu button with the user log name
al@1004 170 dd="$HOME/.local/share/desktop-directories"; mkdir -p "$dd"
al@1004 171 echo -e "[Desktop Entry]\nType=Directory\nName=$(whoami)" > "$dd/user.directory"
al@1004 172
al@1004 173 # check the panel config file existence, copy from default config if needed
al@1004 174 panels=$(find $HOME/.config/lxpanel -type f -name panel 2>/dev/null)
al@1004 175 if [ -z "$panels" ]; then
al@1004 176 mkdir -p "$HOME/.config/lxpanel"
al@1004 177 cp -a /etc/skel/.config/lxpanel/* "$HOME/.config/lxpanel"
al@1004 178 fi
al@1004 179
al@1004 180 for panel in $panels; do
al@1004 181 conf=$(tr '\n' '`' < $panel | sed 's|Plugin|\n&|g') # each plugin on its own line
al@1004 182 if fgrep -q 'user.directory' "$panel"; then
al@1004 183 # if menu already exists - shrink it to '@@@'
al@1004 184 newconf=$(echo "$conf" | sed 's|.*user\.directory.*$|@@@|')
al@1004 185 else
al@1019 186 # otherwise do nothing
al@1019 187 newconf="$conf"
al@1004 188 fi
al@1004 189 menu=$(cat <<EOT
al@1004 190 Plugin {
al@1004 191 type = menu
al@1004 192 Config {
al@1004 193 name=user.directory
al@1004 194 image=avatar-default
al@1004 195 tintcolor=#33230D
al@1004 196 item {
al@1004 197 image=system-log-out-panel
al@1004 198 name=$(_ 'Close X session')
al@1004 199 action=tazbox logout exit
al@1004 200 }
al@1004 201 item {
al@1004 202 image=system-reboot-panel
al@1004 203 name=$(_ 'Reboot system')
al@1004 204 action=tazbox logout reboot
al@1004 205 }
al@1004 206 item {
al@1004 207 image=system-shutdown-panel
al@1004 208 name=$(_ 'Shutdown system')
al@1004 209 action=tazbox logout halt
al@1004 210 }
al@1004 211 }
al@1004 212 }
al@1004 213
al@1004 214 EOT
al@1004 215 )
al@1004 216 # rebuild the menu: change '@@@' to the menu content
al@1004 217 echo "$newconf" | \
al@1004 218 awk -vmenu="$menu" '{if ($1=="@@@") {printf ("%s\n\n", menu)} else {print}}' | \
al@1004 219 tr '`' '\n' > $panel
al@1004 220 done
al@1004 221 }
al@1004 222
al@1004 223
al@813 224 # generate keymap list
al@939 225
pankso@610 226 gen_kmap_list() {
pankso@610 227 echo > $tmp
pankso@610 228 cd /usr/share/kbd/keymaps/i386
al@813 229 # we first need a list to sort and then use \n for Yad list.
al@813 230 for i in $(find -type f | sed '/include/d; s|./||'); do
al@813 231 echo "$(basename $i .map.gz)|$(dirname $i)" >> $tmp
pankso@610 232 done
pankso@610 233 }
pankso@610 234
al@939 235
pankso@610 236 # Initial Config functions
al@939 237
pankso@610 238 setup_main() {
al@958 239 icon='preferences-desktop-locale'
pankso@610 240 gen_kmap_list
pascal@1010 241 locale=$(ls -1 $db 2> /dev/null | grep ^[a-z][a-z]_[A-Z][A-Z] | tr "\n" "!")
al@813 242 keymap=$(cat $tmp | sort | tr "\n" "!")
al@880 243 timezone=$(find $zi -type f | sed s,$zi,,g | grep -v -F '.tab' | tr "\n" "!")
al@813 244 yad --title="$(_n 'SliTaz Initial Setup')" --window-icon=$icon \
al@943 245 --width='500' \
al@943 246 --image="$icon" --image-on-top \
al@813 247 --text="<big>$(_n 'Here you can set your preferences \n for <b>locale, keymap and timezone</b>.')</big>" \
al@813 248 --form \
al@813 249 --field "$(_n 'Locale'):CB" $locale \
al@813 250 --field "$(_n 'Keymap'):CB" $keymap \
al@813 251 --field "$(_n 'Timezone'):CB" $timezone
pankso@610 252 }
pankso@610 253
al@939 254
pankso@610 255 setup() {
pankso@610 256 choices=$(setup_main)
al@943 257 locale=$( echo $choices | cut -d'|' -f1)
al@943 258 keymap=$( echo $choices | cut -d'|' -f2)
al@943 259 timezone=$(echo $choices | cut -d'|' -f3)
al@943 260 [ -n "$locale" ] && tazlocale init $locale
al@943 261 [ -n "$keymap" ] && tazkeymap init $keymap
al@943 262 [ -n "$timezone" ] && echo $timezone > /etc/TZ
pankso@610 263 }
pankso@610 264
al@880 265
al@880 266 #
pankso@569 267 # Locale functions
al@880 268 #
al@880 269
pankso@569 270 locale_main() {
al@939 271 icon='preferences-desktop-locale'
pascal@1010 272 for locale in $(ls -1 $db 2> /dev/null | grep '[a-z]_[A-Z]'); do
al@813 273 desc=$(fgrep -m1 title $db/$locale | cut -d'"' -f2)
al@886 274 ll_CC=${locale%%@*}
al@886 275 echo -e "${ll_CC##*_}\n$locale\n$desc"
pankso@569 276 done | \
al@943 277 yad --title="$(_n 'SliTaz locale')" --window-icon="$icon" \
al@943 278 --width='600' --height='380' --sticky --on-top --center \
al@943 279 --image="$icon" --image-on-top \
al@880 280 --text="<b>$(_n 'Language configuration')</b> \
paul@884 281 \n\n$(_ 'Tip: manage locales list by installing/removing locale packages.')" \
al@880 282 --list --column="$(_n 'Flag'):IMG" --column $(_n 'Name') \
al@880 283 --column $(_n 'Description') \
al@943 284 --print-column='2' --separator='' \
al@957 285 --button="$(_n 'Manage')!document-properties:2" \
al@880 286 --button="gtk-cancel:1" --button="gtk-ok:0"
pankso@569 287 }
pankso@569 288
al@939 289
pankso@569 290 locale() {
pankso@569 291 locale=$(locale_main)
pankso@569 292 # Deal with --button values
pankso@569 293 case $? in
al@880 294 2) tazbox manage_i18n main ;;
pankso@569 295 1) exit 0 ;;
pankso@569 296 *) continue ;;
pankso@569 297 esac
pankso@573 298 # System language configuration.
al@880 299 if [ "$locale" ]; then
al@880 300 tazlocale $locale
al@943 301 tazbox notify "$(_ 'Locale was set to %s' "$locale")" \
al@880 302 preferences-desktop-locale 3
al@880 303 fi
pankso@569 304 }
pankso@569 305
al@939 306
pankso@569 307 # Keymap functions
al@939 308
pankso@569 309 keymap_main() {
al@939 310 icon='preferences-desktop-keyboard'
pankso@610 311 gen_kmap_list
al@813 312 for i in $(sort $tmp); do
al@813 313 echo "$i" | tr '|' '\n'
pankso@569 314 done | \
al@813 315 yad --title="$(_ 'SliTaz keymap')" --window-icon=$icon \
al@813 316 --width=500 --height=380 --sticky --on-top --center \
al@813 317 --image=$icon --image-on-top \
al@813 318 --text="<b>$(_n 'Keyboard configuration')</b>" \
al@813 319 --list --column $(_n 'Keymap') --column $(_n 'Type') \
al@813 320 --print-column=1 --separator=''
pankso@573 321 rm -f $tmp
pankso@569 322 }
pankso@569 323
al@939 324
pankso@569 325 keymap() {
pankso@569 326 keymap=$(keymap_main)
pankso@569 327 # Deal with --button values
al@943 328 [ "$?" -eq 1 ] && exit 0
pankso@573 329 # System keymap configuration
al@943 330 [ -n "$keymap" ] && tazkeymap $keymap
pankso@569 331 }
pankso@569 332
al@939 333
al@845 334 # Free GeoIP service
al@938 335 # Response: IP,CountryCode,CountryName, ...
al@939 336
al@845 337 geoip() {
al@958 338 # freegeoip.net can be in the blocked hosts list. Return only correct answer or nothing
al@958 339 [ ! -e $csv ] && wget -q -T3 -O - http://freegeoip.net/csv/ 2&>/dev/null | \
al@958 340 grep '[0-9.]*,.*,.*,.*,.*,.*,.*,.*,[0-9.]*,[0-9.]*' > $csv
al@938 341 [ -e $csv ] && cut -d, -f2 $csv
al@845 342 }
al@845 343
al@939 344
al@880 345 #
pankso@604 346 # TZ functions
al@880 347 #
al@880 348
al@939 349
al@880 350 # list of all existing available locations for country
al@939 351
al@880 352 tz_list() {
al@880 353 find $zi | \
al@957 354 grep -E "$(awk -F$'\t' -vv="$1" '{if ($1 == v || $2 ~ v) print $2}' $ztab | tr ' ' '|')" | \
al@880 355 grep -v -E "posix|right" | \
al@880 356 sed 's|.*/||g' | sort
al@880 357 }
al@880 358
al@939 359
al@880 360 # ask for confirmation only if we have what to choose
al@939 361
al@845 362 tz_suggest() {
al@845 363 CountryCode=$(geoip)
al@943 364 if [ -n "$CountryCode" ]; then
al@943 365 if [ -n "$(tz_list $CountryCode)" ]; then
al@939 366 CountryName=$(cut -d, -f3 $csv)
al@943 367 yad --title="$(_ 'SliTaz TZ')" --window-icon="$icon" \
al@845 368 --on-top --center \
al@943 369 --image="$CountryCode" --image-on-top \
al@845 370 --text="$(_ 'Suggested location:') <b>$CountryName</b>\n
paul@861 371 $(_ 'Are you agreed?')" \
al@943 372 --button='gtk-yes:0' --button='gtk-no:1'
al@943 373 [ "$?" -eq 0 ] && echo $CountryCode
al@880 374 fi
al@845 375 fi
al@813 376 }
al@813 377
al@939 378
al@813 379 tz_select() {
al@813 380 case x$1 in
al@813 381 x)
al@813 382 # first pass - country
al@845 383 tmpcc=$(mktemp)
al@845 384
al@845 385 for tzfile in $(find $zi -type f -regex '.*info/[ABCEIMP].*'); do
al@845 386 grep -m1 $(basename $tzfile) $ztab
al@943 387 done | cut -d$'\t' -f1 | sort -u > $tmpcc
al@845 388
pascal@1031 389 while read CC; do
al@813 390 cat << EOT
al@813 391 $CC
al@813 392 $CC
al@957 393 $(grep -m1 "$CC " ${zi}iso3166.tab | cut -d$'\t' -f2 | sed 's|\&|&amp;|g')
al@813 394 EOT
pascal@1031 395 done < $tmpcc | \
al@943 396 yad --title="$(_ 'SliTaz TZ')" --window-icon="$icon" \
al@943 397 --width='500' --height='380' --on-top --center \
al@943 398 --image="$icon" --image-on-top \
al@880 399 --text="<b>$(_ 'TimeZone Configuration')</b> \
paul@884 400 \n$(_ 'Select country and press "Forward" or manually select timezone file.') \
paul@884 401 \n\n$(_ 'Tip: manage timezones list by installing/removing locale packages.')" \
al@813 402 --list \
al@813 403 --column="$(_n 'Flag'):IMG" --column=$(_n 'Code') --column=$(_n 'Country') \
al@957 404 --button="$(_n 'Manage')!document-properties:4" \
al@880 405 --button="$(_n 'Manual')!gtk-index:2" \
al@880 406 --button="gtk-go-forward:0" \
al@813 407 --button="gtk-cancel:1" --always-print-result \
al@943 408 --print-column='2' --separator=''
al@813 409 ;;
al@813 410 xindex)
al@813 411 # manual selection of file with timezone info
al@943 412 yad --title="$(_ 'SliTaz TZ')" --window-icon="$icon" \
al@943 413 --width='500' --on-top --center \
al@943 414 --image="$icon" --image-on-top \
al@813 415 --text="<b>$(_ 'TimeZone Configuration')</b>\n$(_ 'Select time zone')" \
al@845 416 --form --field=":FL" ${zi}UTC --separator='' | \
al@845 417 sed "s|$zi||"
al@813 418 ;;
al@813 419 *)
al@813 420 # second pass - city/place
al@880 421 list=$(tz_list $1)
al@943 422 icon="$1"
al@813 423 if [ $(echo "$list" | wc -l) != 1 ]; then
al@813 424 echo "$list" | \
al@943 425 yad --title="$(_ 'SliTaz TZ')" --window-icon="$icon" \
al@943 426 --width='500' --height='380' --on-top --center \
al@943 427 --image="$icon" --image-on-top \
al@813 428 --text="<b>$(_ 'TimeZone Configuration')</b>\n$(_ 'Select location')" \
al@813 429 --list --column $(_n 'Location/City') --separator=''
al@813 430 else
al@813 431 echo $list
al@813 432 fi
al@813 433 ;;
al@813 434 esac
pankso@604 435 }
pankso@604 436
al@939 437
pankso@604 438 tz() {
al@957 439 icon='preferences-system-time'
al@845 440 arg=$(tz_suggest)
al@845 441
al@845 442 timezone=$(tz_select $arg)
al@813 443 case $? in
al@813 444 1) exit 0 ;;
al@957 445 0)
al@957 446 [ -n "$timezone" ] && timezone=$(tz_select "$timezone")
al@943 447 [ -z "$timezone" ] && exit 0
al@880 448 timezone=$(find $zi -name $timezone | grep -v -E "posix|right" | \
al@957 449 sed "s|$zi||")
al@957 450 ;;
al@813 451 2) timezone=$(tz_select "index") ;;
al@880 452 4) tazbox manage_i18n main;;
al@813 453 esac
al@845 454
al@943 455 [ -z "$timezone" ] && exit 0
al@813 456 echo $timezone > /etc/TZ
al@813 457 export TZ=$timezone
al@943 458 tazbox notify "$(_ 'TimeZone was set to %s' "$timezone")" $icon 3
al@845 459 rm -f $tmpcc
pankso@604 460 }
pankso@604 461
al@939 462
al@880 463 #
al@880 464 # Manage i18n packages
al@880 465 #
al@880 466
al@939 467
al@880 468 # if installed
al@939 469
al@880 470 if_installed() {
al@949 471 [ -d "$INSTALLED/$1" ]
al@880 472 }
al@880 473
al@939 474
al@880 475 # get package's description, install flag and sizes
al@939 476
al@943 477 desc_etc() {
al@949 478 if grep -q "^$1"$'\t' "$PKGS_DB/installed.info"; then
al@943 479 echo 'TRUE' >> $PKGS_LIST; echo $1 >> $ORIG_LIST
al@880 480 else
al@943 481 echo 'FALSE' >> $PKGS_LIST
al@880 482 fi
al@943 483 awk -F$'\t' -vp="$1" '
al@943 484 ($1==p){
al@943 485 split($7, s, " ");
al@943 486 printf "%s\n%s\n%s\n%s\n", $1, $4, s[1], s[2];
al@949 487 }' "$PKGS_DB/packages.info" >> $PKGS_LIST
al@880 488 }
al@880 489
al@939 490
al@880 491 # remove temp
al@939 492
al@880 493 rm_temp() {
al@880 494 rm -f $PKGS_LIST $ORIG_LIST $ANSWER $NEW_LIST $LIST1 $LIST2
al@880 495 }
al@880 496
al@939 497
al@880 498 # install/remove locale packages
al@939 499
al@880 500 manage_i18n() {
al@880 501 PKGS_LIST=$(mktemp)
al@880 502 ORIG_LIST=$(mktemp)
al@880 503 ANSWER=$(mktemp)
al@880 504 NEW_LIST=$(mktemp)
al@880 505 LIST1=$(mktemp)
al@880 506 LIST2=$(mktemp)
al@949 507 PINFO="$PKGS_DB/packages.info"
al@949 508
al@949 509 if [ ! -e "$PINFO" ]; then
al@949 510 icon='dialog-warning'
al@949 511 yad --title="$(_n 'Manage locale packages')" --window-icon="$icon" \
al@949 512 --width='400' --on-top --center \
al@949 513 --image="$icon" --image-on-top \
al@949 514 --text="$(_n 'Please, recharge packages database.')" \
al@957 515 --button="$(_n 'Recharge list')!view-refresh:2" \
al@949 516 --button="gtk-cancel:1"
al@949 517
al@949 518 case "$?" in
al@957 519 1) rm_temp; return;;
al@949 520 2) tazbox recharge;;
al@949 521 esac
al@949 522 fi
al@949 523
al@949 524 tazbox notify "$(_ 'Please wait')" appointment-soon &
al@880 525
al@943 526 for i in $(awk -F$'\t' '$1~/^locale-[a-z_A-Z]+$/{print $1}' $PINFO); do
al@880 527 desc_etc $i
al@880 528 done
al@880 529
al@943 530 if [ "$1" != 'main' ]; then
al@943 531 for i in $(awk -F$'\t' '$1~/^locale-[a-z_A-Z]+-extra$/{print $1}' $PINFO); do
al@880 532 desc_etc $i
al@880 533 done
al@943 534
al@880 535 if if_installed libQtCore; then
al@943 536 for i in $(awk -F$'\t' '$1~/^qt-locale/{print $1}' $PINFO); do
al@880 537 desc_etc $i
al@880 538 done
al@880 539 fi
al@943 540
al@880 541 if if_installed razorqt; then
al@943 542 for i in $(awk -F$'\t' '$1~/^razorqt-locale/{print $1}' $PINFO); do
al@880 543 desc_etc $i
al@880 544 done
al@880 545 fi
al@943 546
al@880 547 if if_installed firefox; then
al@943 548 for i in $(awk -F$'\t' '$1~/^firefox-langpack/{print $1}' $PINFO); do
al@880 549 desc_etc $i
al@880 550 done
al@880 551 fi
al@943 552
al@880 553 if if_installed thunderbird; then
al@943 554 for i in $(awk -F$'\t' '$1~/^thunderbird-langpack/{print $1}' $PINFO); do
al@880 555 desc_etc $i
al@880 556 done
al@880 557 fi
al@943 558
al@880 559 if if_installed squirrelmail; then
al@943 560 for i in $(awk -F$'\t' '$1~/^squirrelmail-[a-z][a-z][_-]/{print $1}' $PINFO); do
al@880 561 desc_etc $i
al@880 562 done
al@880 563 fi
al@943 564
al@880 565 if if_installed aspell; then
al@943 566 for i in $(awk -F$'\t' '$1~/^aspell-[a-z][a-z]_?[A-Z]?[A-Z]?$/{print $1}' $PINFO); do
al@880 567 desc_etc $i
al@880 568 done
al@880 569 fi
al@943 570
al@880 571 OTHER_LOCALE="gnome-commander|-i18n gnome-vfs|-i18n gpa|-langpack \
al@880 572 gucharmap|-i18n lxterminal|-locales lyx|-locales rox-filer|-locales \
al@880 573 ufraw|-locales qupzilla|-locales"
al@880 574 for i in $OTHER_LOCALE; do
al@880 575 if if_installed ${i%%|*}; then desc_etc ${i/|/}; fi
al@880 576 done
al@880 577 fi
al@880 578
al@957 579 icon='preferences-desktop-locale'
al@880 580 {
al@943 581 yad --title="$(_n 'Manage locale packages')" --window-icon="$icon" \
al@943 582 --width='600' --height='400' --on-top --center \
al@943 583 --image="$icon" --image-on-top \
al@880 584 --text="$(_n 'Check only locale packages you need and press "Install/Remove".')" \
al@943 585 --list --multiple --ellipsize='END' --expand-column='3' \
al@880 586 --column="$(_n 'Inst.'):CHK" --column="$(_n 'Package Name'):TEXT" \
al@880 587 --column="$(_n 'Description'):TEXT" --column="$(_n 'Size'):TEXT" \
al@880 588 --column="$(_n 'Installed'):TEXT" \
al@957 589 --button="$(_n 'Recharge list')!view-refresh:4" \
al@957 590 --button="$(_n 'Install/Remove')!gtk-execute:2" \
al@880 591 --button="gtk-cancel:1" \
al@880 592 --print-all
pascal@1031 593 } < $PKGS_LIST > $ANSWER
al@880 594
al@949 595 case "$?" in
al@949 596 1) rm_temp; exit 0;;
al@957 597 4) tazbox recharge; rm_temp; tazbox manage_i18n; exit 0;;
al@949 598 esac
al@880 599
al@880 600 grep -e 'TRUE' $ANSWER | cut -d'|' -f2 > $NEW_LIST
al@880 601
al@880 602 # check difference between ORIG_LIST and NEW_LIST
al@880 603 sort -o $LIST1 $ORIG_LIST
al@880 604 sort -o $LIST2 $NEW_LIST
al@880 605 DIFF=$(diff $LIST1 $LIST2 | sed '/---/d;/+++/d;/@@/d')
al@943 606 if [ -z "$DIFF" ]; then rm_temp; exit 0; fi
al@880 607
al@880 608 # output log to gtk window
al@957 609 title="$(_n 'TazPkg log')"; icon='system-software-update'; opts='--tail'
al@880 610 {
al@880 611 for pkg in $(echo "$DIFF" | grep -e '^-' | sed 's|^-||g'); do
al@943 612 _ 'REMOVE: %s' "$pkg"
al@943 613 yes | tazpkg -r $pkg --output='raw'
al@880 614 done
al@880 615 for pkg in $(echo "$DIFF" | grep -e '^+' | sed 's|^+||g'); do
al@943 616 _ 'INSTALL: %s' "$pkg"
al@943 617 tazpkg -gi $pkg --output='raw'
al@880 618 done
al@880 619 echo -e "\n\n$(_n 'Done!')\n"
al@880 620 } | output_command
al@880 621 rm_temp
al@880 622 }
al@880 623
al@880 624
al@880 625
pankso@632 626 # New file functions
al@939 627
pankso@632 628 newfile_main() {
al@957 629 icon='document-new'
al@943 630 yad --title="$(_n 'New file')" --window-icon="$icon" \
al@943 631 --width='460' --height='160' --on-top --center \
al@943 632 --image="$icon" --image-on-top \
al@943 633 --icon="$icon" \
al@813 634 --text="<b>$(_n 'Create a new file or folder on your desktop')</b>" \
al@813 635 --entry --entry-label="$(_n 'File name')" \
al@957 636 --ricon='edit-clear' \
al@813 637 --always-print-result \
al@878 638 --button="$(_n 'SHell script')!application-x-shellscript:4" \
al@939 639 --button="$(_n 'Folder')!folder:3" \
al@939 640 --button="$(_n 'File')!empty:2" \
al@943 641 --button='gtk-cancel:1'
pankso@632 642 }
pankso@632 643
al@939 644
pankso@632 645 newfile() {
pankso@632 646 file=$(newfile_main)
pankso@700 647 ret=$?
al@943 648 [ -z "$file" ] && exit 0
pankso@700 649 case $ret in
pankso@700 650 4)
al@943 651 cat > "$HOME/Desktop/$file" << EOT
pankso@632 652 #!/bin/sh
pankso@632 653 #
pankso@632 654
pankso@632 655 EOT
al@943 656 chmod +x "$HOME/Desktop/$file" ;;
al@943 657 3) mkdir -p "$HOME/Desktop/$file" ;;
al@943 658 2) touch "$HOME/Desktop/$file" ;;
pankso@700 659 1) exit 0 ;;
pankso@632 660 esac
pankso@632 661 }
pankso@632 662
al@939 663
pankso@637 664 # All applications
al@939 665
pankso@637 666 all_apps() {
al@957 667 icon='user-bookmarks'
al@943 668 yad --title="$(_n 'All Applications')" --window-icon="$icon" \
al@943 669 --width='400' --height='400' \
al@813 670 --icons --compact \
al@943 671 --read-dir='/usr/share/applications' \
al@943 672 --button='gtk-close:0'
pankso@637 673 }
pankso@637 674
al@939 675
al@813 676 # Ask root permissions for system settings
al@939 677
al@813 678 ask_root() {
al@943 679 if [ "$(id -u)" -ne 0 ]; then
al@813 680 exec tazbox su $0 $@
al@813 681 exit 0
al@813 682 fi
al@813 683 }
al@810 684
al@939 685
pascal@1032 686 # VNC gui
pascal@1032 687
pascal@967 688 vnc_main() {
pascal@967 689 icon='video-display'
pascal@967 690 yad --title="$(_n 'Framebuffer VNC viewer')" --window-icon="$icon" \
pascal@969 691 --width='250' --height='160' --on-top --center \
pascal@969 692 --image="$icon" --image-on-top --icon="$icon" \
pascal@969 693 --form \
pascal@969 694 --text="<b>$(_n 'Remote display connection')</b>" "localhost 5900" \
pascal@969 695 --field="$(_n 'VNC Server')" \
pascal@969 696 --field="$(_n 'Via a SSH tunnel'):CHK" \
pascal@967 697 --always-print-result \
pascal@969 698 --button="$(_n 'On this console'):1" \
pascal@969 699 --button="$(_n 'In a new console'):0"
pascal@967 700 }
pascal@967 701
pascal@967 702
pascal@1032 703 # SSH gui
pascal@1032 704
pascal@1015 705 ssh_main() {
pascal@1015 706 icon='xterm'
pascal@1027 707 yad --title="$(_n 'Remote connection')" --window-icon="$icon" \
pascal@1015 708 --width='250' --height='180' --on-top --center \
pascal@1015 709 --image="$icon" --image-on-top --icon="$icon" \
pascal@1015 710 --form \
pascal@1027 711 --text="<b>$(_n 'Remote terminal connection')</b>" "user@host:port" \
pascal@1027 712 --field="$(_n 'Server')" \
pascal@1015 713 --field="$(_n 'Password'):H" \
pascal@1020 714 --field="$(_n 'SSH Keys'):MFL" \
pascal@1020 715 --field="$(_n 'SSH Proxy')" \
pascal@1027 716 --field="$(_n 'Telnet protocol (instead of SSH)'):CHK" \
pascal@1015 717 --always-print-result
pascal@1015 718 }
pascal@1015 719
pascal@1015 720
pascal@1032 721 # Network printer gui
pascal@1032 722
pascal@1032 723 printer0_main() {
pascal@1032 724 icon='printer'
pascal@1032 725 yad --title="$(_n 'Printer server')" --window-icon="$icon" \
pascal@1032 726 --width='250' --height='180' --on-top --center \
pascal@1032 727 --image="$icon" --image-on-top --icon="$icon" \
pascal@1032 728 --form \
pascal@1032 729 --text="<b>$(_n 'Network printer server')</b>" \
pascal@1032 730 --field="$(_n 'Printer IP'):CB" 0.0.0.0!$(ifconfig | sed '/inet6\? addr/!d;s|[^:]*: *||;s| .*||;s|^127|^&|' | xargs | sed 's| |!|g') \
pascal@1032 731 "9100" --field="$(_n 'Port')" \
pascal@1032 732 --field="$(_n 'Device'):CB" $(ls /dev/*lp? | xargs | sed 's| |!|g') \
pascal@1032 733 --always-print-result
pascal@1032 734 }
pascal@1032 735
pascal@1032 736
pascal@1032 737 printer1_main() {
pascal@1032 738 icon='printer'
pascal@1032 739 yad --title="$(_n 'Remote printer')" --window-icon="$icon" \
pascal@1032 740 --width='250' --height='180' --on-top --center \
pascal@1032 741 --image="$icon" --image-on-top --icon="$icon" \
pascal@1032 742 --form \
pascal@1032 743 --text="<b>$(_n 'Remote PDF or PS printer')</b>" "192.168.0.254" \
pascal@1032 744 --field="$(_n 'Printer IP')" "9100" \
pascal@1032 745 --field="$(_n 'Port')" \
pascal@1032 746 $([ "$(ls /dev/*lp? 2> /dev/null)" ] && echo --button "$(_ 'Server'):2") \
pascal@1032 747 --button "gtk-cancel:1" --button "gtk-ok:0" \
pascal@1032 748 --always-print-result
pascal@1032 749 }
pascal@1032 750
pascal@1032 751
pascal@1032 752 # Parse printer configuration file
pascal@1032 753
pascal@1032 754 conf_printer()
pascal@1032 755 {
pascal@1032 756 awk 'BEGIN { state = -1 }
pascal@1032 757 {
pascal@1032 758 if (state < 0) {
pascal@1032 759 if (/@PJL INFO VARIABLES/) state=0
pascal@1032 760 }
pascal@1032 761 else {
pascal@1032 762 if (state == 0) {
pascal@1032 763 printf "%s " $0
pascal@1032 764 sub(/.*\[/,"")
pascal@1032 765 state=$0 + 0
pascal@1032 766 }
pascal@1032 767 else {
pascal@1032 768 printf "%s " $1
pascal@1032 769 state--
pascal@1032 770 }
pascal@1032 771 if (state == 0) print ""
pascal@1032 772 }
pascal@1032 773 }' < $prncf
pascal@1032 774 }
pascal@1032 775
pascal@1032 776 var_printer()
pascal@1032 777 {
pascal@1032 778 while read key name; do
pascal@1032 779 conf_printer | grep "^ *$key=" | grep -v '\[1 ' | \
pascal@1032 780 if [ "$1" ]; then
pascal@1032 781 #[ "$key=$1" = "COPIES=1" ] ||
pascal@1032 782 echo "@PJL SET $key=$1"
pascal@1032 783 else
pascal@1032 784 awk -vn=$name '{
pascal@1032 785 sub(/.*=/,"")
pascal@1032 786 if (/ RANGE\]/) {
pascal@1032 787 sub(/ \[.*\] /,"!")
pascal@1032 788 sub(/ /,"..")
pascal@1032 789 print "--field=" n ":NUM " $0 "!1!0"
pascal@1032 790 }
pascal@1032 791 else if (/ ENUMERATED\]/) {
pascal@1032 792 def=$0
pascal@1032 793 sub(/ .*/,"",def)
pascal@1032 794 sub(/.*\] /,"")
pascal@1032 795 gsub(/ /,"!")
pascal@1032 796 pos=index($0,def)
pascal@1032 797 print "--field=" n ":CB " substr($0,0,pos-1) "^" substr($0,pos)
pascal@1032 798 }
pascal@1032 799 }'
pascal@1032 800 fi
pascal@1032 801 shift
pascal@1032 802 done <<EOT
pascal@1032 803 COPIES $(_n 'Number')
pascal@1032 804 RESOLUTION $(_n 'Resolution')
pascal@1032 805 ORIENTATION $(_n 'Orientation')
pascal@1032 806 PAPER $(_n 'Paper')
pascal@1032 807 LPAPERSOURCE $(_n 'Source')
pascal@1032 808 DUPLEX $(_n 'Twosided')
pascal@1032 809 BINDING $(_n 'Binding')
pascal@1032 810 ECONOMODE $(_n 'Eco-Mode')
pascal@1032 811 DENSITY $(_n 'Density')
pascal@1032 812 MANUALFEED $(_n 'Manual-Feed')
pascal@1032 813 EOT
pascal@1032 814 }
pascal@1032 815
pascal@1032 816
pascal@1032 817 # File print gui
pascal@1032 818
pascal@1032 819 printer2_main() {
pascal@1032 820 icon='printer'
pascal@1032 821 support=
pascal@1032 822 filter=
pascal@1032 823 grep -q PDF $prncf && support="PDF" && filter="*.pdf *.PDF "
pascal@1032 824 if grep -q POSTSCRIPT $prncf ; then
pascal@1032 825 [ "$support" ] && support="$support or PostScript" ||
pascal@1032 826 support="PostScript"
pascal@1032 827 filter="${filter}*.ps *.eps *.PS *.EPS"
pascal@1032 828 fi
pascal@1032 829 yad --title="$(_n 'Print %s files' "$support")" --window-icon="$icon" \
pascal@1032 830 --width='250' --height='180' --on-top --center \
pascal@1032 831 --image="$icon" --image-on-top --icon="$icon" \
pascal@1032 832 --form \
pascal@1032 833 --text="<b>$(_n 'Print %s files' "$support")</b>" "" \
pascal@1032 834 --field="$(_n 'Files'):MFL" \
pascal@1032 835 --file-filter="$(_ 'All printable files')|$filter" \
pascal@1032 836 --file-filter="$(_ 'All files')|*" \
pascal@1032 837 $(var_printer) \
pascal@1032 838 --button "$(_ 'Printer'):2" \
pascal@1032 839 --button "gtk-cancel:1" --button "gtk-ok:0" \
pascal@1032 840 --always-print-result
pascal@1032 841 }
pascal@1032 842
pascal@1032 843 printer_server() {
pascal@1032 844 while true; do
pascal@1032 845 nc -l -p $2 $1 < $3 > $3
pascal@1032 846 done
pascal@1032 847 }
pascal@1032 848
pascal@1032 849 printer_query() {
pascal@1032 850 echo -e "\033%-12345X@PJL"
pascal@1032 851 echo "@PJL INFO CONFIG"
pascal@1032 852 echo "@PJL INFO VARIABLES"
pascal@1032 853 echo -e "\033%-12345X"
pascal@1032 854 sleep 5
pascal@1032 855 }
pascal@1032 856
pascal@1032 857 printer() {
pascal@1032 858 local tmpprncf=$prncf
pascal@1032 859 while true; do
pascal@1032 860 if [ ! -s "$tmpprncf" ]; then
pascal@1032 861 while true; do
pascal@1032 862 ip="$(printer1_main)"
pascal@1032 863 case "$?" in
pascal@1032 864 0) break ;;
pascal@1032 865 1) return ;;
pascal@1032 866 esac
pascal@1032 867 ip="$(printer0_main)"
pascal@1032 868 [ $? = 0 ] && $0 prnsvr ${ip//|/ }
pascal@1032 869 done
pascal@1032 870 echo -e "${ip//|/ }\n" > $prncf
pascal@1032 871 printer_query | nc ${ip//|/ } | sed 's|\r||;s|'$'^\f''|\n|g' >> $prncf
pascal@1032 872 fi
pascal@1032 873 if ! grep -q PDF$ $prncf && ! grep -q POSTSCRIPT$ $prncf; then
pascal@1032 874 yad --title="$(_n 'Print')" --window-icon="$icon" \
pascal@1032 875 --width='280' --height='80' --on-top --center \
pascal@1032 876 --image="$icon" --image-on-top --icon="$icon" \
pascal@1032 877 --text="Your printer doesn't support PDF or POSTSCRIPT" \
pascal@1032 878 --button="$(_n 'Remove'):0" \
pascal@1032 879 --button="$(_n 'Quit'):1"
pascal@1032 880 [ $? -eq 0 ] && rm -f $prncf
pascal@1032 881 return
pascal@1032 882 fi
pascal@1032 883 tmpprncf=
pascal@1032 884 result="$(printer2_main)"
pascal@1032 885 case "$?" in
pascal@1032 886 0) break ;;
pascal@1032 887 1) return ;;
pascal@1032 888 esac
pascal@1032 889 done
pascal@1032 890 for file in $(echo ${result%%|*} | sed 's|!| |g'); do
pascal@1036 891 case $(sed 'y/pdfsaobe/PDFSAOBE/;q' "$file") in
pascal@1032 892 %PDF*) LG="PDF" ;;
pascal@1032 893 %!PS-ADOBE*) LG="POSTSCRIPT" ;;
pascal@1032 894 esac
pascal@1032 895 if grep -q $LG$ $prncf; then
pascal@1032 896 {
pascal@1032 897 echo -e "\033%-12345X@PJL"
pascal@1032 898 var_printer $(echo ${result#*|} | sed 's/|/ /g')
pascal@1032 899 echo "@PJL ENTER LANGUAGE = $LG"
pascal@1032 900 cat $file
pascal@1032 901 echo -e "\033%-12345X"
pascal@1032 902 sleep 5
pascal@1032 903 } | nc $(sed 1q $prncf)
pascal@1032 904 else
pascal@1032 905 yad --title="$(_n 'Print')" --window-icon="$icon" \
pascal@1032 906 --width='280' --height='80' --on-top --center \
pascal@1032 907 --image="$icon" --image-on-top --icon="$icon" \
pascal@1032 908 --text="Your printer can't print the $LG file $file"
pascal@1032 909 fi
pascal@1032 910 done
pascal@1032 911 }
pascal@1032 912
pascal@1032 913
pascal@979 914 video() {
pascal@979 915 icon='video-x-generic'
pascal@979 916
pascal@985 917 # Get switchs
pascal@985 918 tazwebargs="--notoolbar"
pascal@985 919 while true ; do
pascal@985 920 case "$1" in
pascal@989 921 --fullscreen) tazwebargs="$tazwebargs --kiosk"
pascal@990 922 dpmstimeout=$(xset q | grep timeout | cut -d' ' -f5) ;;
pascal@989 923 --loop) loop="loop" ;;
pascal@985 924 *) break
pascal@985 925 esac
pascal@985 926 shift
pascal@985 927 done
pascal@985 928
pascal@979 929 # Get filename
pascal@979 930 [ "$1" ] && file="$PWD/$(basename "$1")"
pascal@1029 931 [ "${1:0:1}" = "/" ] && file="$1"
al@992 932 [ -s "$file" ] || file="$(yad --file --width='600' --height='500' --add-preview \
al@992 933 --window-icon $icon --title "$(_ 'Select the video file')" --center \
pascal@994 934 --file-filter="$(_ 'All video files')|*.mp4 *.m4v *.webm *.ogg *.ogv *.flv *.avi *.3gp" \
al@992 935 --file-filter="$(_ 'All files')|*")"
pascal@982 936 [ -s "$file" ] || return
pascal@979 937
pascal@979 938 # Extra parameters
pascal@979 939 text=
pascal@979 940 attr='autoplay="true"'
pascal@988 941 for i in jpg jpeg ; do
al@992 942 [ -s "${file%.*}.$i" ] &&
pascal@979 943 attr="poster=\"file://${file%.*}.$i\"" && break
pascal@979 944 done
al@992 945 IFS=$'\n'
pascal@988 946 for i in ${file%.*}_${LANG%%[._]*}.vtt ${file%.*}.vtt ; do
pascal@979 947 [ -s $i ] && text="
pascal@988 948 <track kind=\"captions\" src=\"file://$i\" srclang=\"${LANG%%[._]*}\" default>"
pascal@979 949 done
pascal@979 950
pascal@979 951 # Build the html5 page
pascal@979 952 tmp=/tmp/video-player-$$.html
pascal@979 953 cat > $tmp <<EOT
pascal@979 954 <html>
pascal@979 955 <head>
al@992 956 <meta charset="UTF-8">
pascal@979 957 <title>$(basename "$file")</title>
al@992 958 <style>
al@995 959 body{background:#000;margin:0}
al@992 960 a{color:#29F}
al@995 961 div{color:#FFF;position:absolute;bottom:2em;left:0;right:0;text-align:center}
pascal@985 962 </style>
pascal@979 963 </head>
pascal@979 964 <body>
pascal@988 965 <video width="100%" height="100%" src="file://$file" controls $attr$loop>$text
al@992 966 <div>$(_ 'Unsupported video file format.')<br>
al@992 967 $(IFS=$'\n'; _ 'Retry with %s, %s, %s, %s, %s or %s.' \
al@992 968 $(printf '<a href="http://127.0.0.1:82/user/pkgs.cgi?info=%s">%s</a>\n' \
al@992 969 vlc VLC gnome-mplayer 'GNOME MPlayer' mplayer MPlayer gxine gxine xine-ui xine ffplay ffplay))
al@992 970 </div>
pascal@979 971 </video>
pascal@979 972 </body>
pascal@979 973 </html>
pascal@979 974 EOT
pascal@993 975 unset IFS
pascal@990 976 [ -n "$dpmstimeout" ] && xset dpms 0 0 0 s 0 0
pascal@985 977 tazweb $tazwebargs file://$tmp || browser file://$tmp
pascal@990 978 [ -n "$dpmstimeout" ] && xset dpms $dpmstimeout $dpmstimeout $dpmstimeout s $dpmstimeout $dpmstimeout
pascal@979 979 rm -f $tmp
pascal@979 980 }
pascal@979 981
pascal@979 982
pascal@967 983 newvt()
pascal@967 984 {
pascal@967 985 ask_root newvt $@ || return
pascal@967 986 openvt -sw $@
pascal@967 987 deallocvt
pascal@967 988 }
pascal@967 989
pascal@967 990
pascal@967 991 vnc() {
pascal@967 992 server=$(vnc_main)
pascal@967 993 status=$?
pascal@967 994 # Deal with --button values
pascal@969 995 [ "$server" ] || return
pascal@969 996 case "$server" in
pascal@969 997 *TRUE\|) fbvnc=sshfbvnc ;;
pascal@969 998 *) fbvnc=fbvnc ;;
pascal@969 999 esac
pascal@969 1000 case "$status" in
pascal@969 1001 1) $fbvnc ${server%%|*} ;;
pascal@969 1002 0) newvt $fbvnc ${server%%|*} ;;
pascal@967 1003 esac
pascal@967 1004 }
pascal@967 1005
pascal@967 1006
pascal@1015 1007 ssh() {
pascal@1015 1008 IFS='|'; set -- $(ssh_main) ; unset IFS
pascal@1028 1009 export TERM=sakura; [ "$(which $TERM)" ] && XTERM=$TERM || XTERM=xterm
pascal@1015 1010 [ -n "$2" ] && export DROPBEAR_PASSWORD="$2"
pascal@1027 1011 s=${1#*@}; k="${3:+-i ${3//!/ -i }}"
pascal@1028 1012 case "$4$5" in
pascal@1028 1013 TRUE) $XTERM -e "telnet ${s/:/ }" ;;
pascal@1027 1014 *RUE) dbclient $k -B $s $4 ;;
pascal@1027 1015 *) export DBPROXY="$4"; sshx $k $1 ;;
pascal@1027 1016 esac
pascal@1015 1017 }
pascal@1015 1018
pascal@1015 1019
pankso@553 1020 #
pankso@553 1021 # Commands
pankso@553 1022 #
al@939 1023
pankso@553 1024 case "$1" in
pankso@553 1025 su)
al@943 1026 shift
al@813 1027 # Don't show dialog if we are root
al@943 1028 [ "$(id -u)" -eq 0 ] && exec "$@"
pascal@1037 1029
pascal@1037 1030 # lxpolkit support
pascal@1037 1031 [ -f "/var/run/ConsoleKit/pid" ] &&
pascal@1037 1032 exec pkexec env XAUTHORITY=$XAUTHORITY DISPLAY=$DISPLAY "$@"
pascal@1037 1033
al@943 1034 SU_CMD="$@"
al@943 1035 SUBOX_CONF="$HOME/.config/slitaz/subox.conf"
al@939 1036
paul@593 1037 # Check if a password has been saved before launching main dialog
al@943 1038 if [ -s "$SUBOX_CONF" ]; then
al@943 1039 PASSWD="$(cat $SUBOX_CONF)"
al@943 1040 CHECKED='TRUE'
pankso@587 1041 fi
al@939 1042
pankso@744 1043 # Display the main dialog (ask for password)
al@943 1044 main="$(su_main "$SU_CMD")"
al@939 1045
paul@593 1046 # Deal with --button values and exit if cancelled to avoid erasing
pankso@587 1047 # saved password.
al@943 1048 [ "$?" -eq 1 ] && exit 0
al@939 1049
pankso@587 1050 # Save or erase Autosaved password
pascal@1029 1051 if [ $(echo "$main" | cut -d"|" -f2) = 'TRUE' ]; then
al@943 1052 echo "$main" | cut -d"|" -f1 > $SUBOX_CONF
al@943 1053 chmod 0600 $SUBOX_CONF
pankso@587 1054 else
al@943 1055 cat /dev/null > $SUBOX_CONF
pankso@587 1056 fi
al@939 1057
pankso@744 1058 # Try to login & execute. If password is wrong execute error dialog
psychomaniak@978 1059 SU_CMD_QUOTED="$(echo "$SU_CMD" | sed 's|&|\\&|g')"
al@943 1060 echo $main | cut -d"|" -f1 | su -c "$SU_CMD_QUOTED &" || su_error
al@943 1061 ;;
al@943 1062
pankso@553 1063 logout)
paul@593 1064 # Logout window with actions
al@1004 1065 if [ -n "$2" ]; then
al@1004 1066 answer="$2"
al@1004 1067 logout_confirm $answer
al@813 1068 else
al@813 1069 logout_main; answer=$?
al@813 1070 fi
al@939 1071
pankso@553 1072 # Deal with --button values
paul@763 1073 # DE and WM started with a custom -session script should export
pankso@736 1074 # XDG_CURRENT_DESKTOP
al@813 1075 case $answer in
al@1004 1076 4|exit)
pankso@736 1077 case $XDG_CURRENT_DESKTOP in
pankso@736 1078 LXDE)
al@943 1079 [ -n "$_LXSESSION_PID" ] && kill $_LXSESSION_PID
pascal@1029 1080 [ "$DESKTOP_SESSION" = 'compiz' ] && killall compiz
pankso@736 1081 openbox --exit ;;
pankso@736 1082 openbox) openbox --exit ;;
pankso@736 1083 compiz) killall compiz ;;
pankso@736 1084 *)
pankso@736 1085 # Try to kill other WM that dont set XDG var.
pankso@736 1086 jwm -exit 2>/dev/null ;;
pankso@736 1087 esac ;;
al@1004 1088 3|reboot)
al@813 1089 reboot || reboot -f ;;
al@1004 1090 2|halt)
al@813 1091 poweroff ;;
al@943 1092 esac
al@943 1093 ;;
al@943 1094
pankso@562 1095 out)
pankso@562 1096 # Pipe a command into a GTK window
al@943 1097 sed 's|\[.m||g; s|\[[0-9][0-9]*G| |g' | output_command
al@943 1098 ;;
al@943 1099
paul@593 1100 out-dl)
pankso@562 1101 # A tiny GTK window for Busybox wget output
al@943 1102 url="$2"; opts='--tail --button=gtk-cancel:1'
al@957 1103 icon='folder-download'; title="$(_ 'Downloading...')"
slaxemulator@594 1104 [ -d $DOWNLOADS ] || mkdir -p $DOWNLOADS
pascal@648 1105 busybox wget -c -P $DOWNLOADS $url 2>&1 | output_command
al@943 1106 cancel_dl
al@943 1107 ;;
al@943 1108
pankso@569 1109 locale)
al@943 1110 ask_root $@ && locale
al@943 1111 ;;
al@943 1112
pankso@569 1113 keymap)
al@943 1114 ask_root $@ && keymap
al@943 1115 ;;
al@943 1116
al@813 1117 tz)
al@943 1118 ask_root $@ && tz
al@943 1119 ;;
al@943 1120
al@880 1121 manage_i18n)
al@943 1122 ask_root $@ && manage_i18n $2
al@943 1123 ;;
al@943 1124
al@880 1125 recharge)
al@949 1126 ask_root $@; opts='--on-top'; output=raw tazpkg recharge | output_command
al@943 1127 ;;
al@943 1128
al@813 1129 setup)
al@943 1130 ask_root $@ && setup
al@943 1131 ;;
al@943 1132
pankso@632 1133 new-file)
al@943 1134 newfile
al@943 1135 ;;
al@943 1136
pankso@637 1137 all-apps)
al@943 1138 all_apps
al@943 1139 ;;
al@943 1140
pankso@689 1141 notify|-n)
pankso@689 1142 # On screen notification box.
pankso@721 1143 icon="$3"
pankso@721 1144 time="$4"
al@957 1145 [ -z "$icon" ] && icon='dialog-information'
al@943 1146 [ -z "$time" ] && time='4'
al@943 1147 yad --width='520' --height='80' --timeout="$time" --timeout-indicator='right' \
al@943 1148 --on-top --center --no-buttons --borders='12' --undecorated \
al@943 1149 --skip-taskbar --image="$icon" --image-on-top --text="<b>$2</b>"
al@943 1150 ;;
al@943 1151
al@807 1152 tazapps)
al@807 1153 # Default applications configuration script. System wide config file
al@807 1154 # is /etc/slitaz/applications.conf and each user can have personal
al@807 1155 # settings. System wide for root and personal config for user.
al@807 1156 export CONFIG="$HOME/.config/slitaz/applications.conf"
al@943 1157 if [ "$(id -u)" -eq 0 ]; then
psychomaniak@912 1158 [ ! -f $CONFIG ] || mv -f $CONFIG /etc/slitaz/applications.conf
al@943 1159 export CONFIG='/etc/slitaz/applications.conf'
al@807 1160 fi
psychomaniak@912 1161
al@943 1162 for a in FILE_MANAGERS BROWSERS EDITORS TERMINALS WINDOW_MANAGERS; do
psychomaniak@918 1163 eval $(expr $a=$(echo $(LC_ALL=C tazx get-applist ${a%%S} \
psychomaniak@912 1164 only-installed yad) | sed 's/ /!/g ; s/!!//g; s/ //g'))
psychomaniak@912 1165 done
psychomaniak@912 1166
psychomaniak@912 1167 # Missing file was created by slitaz_apps_conf function from tazx
al@807 1168 . $CONFIG
al@810 1169
al@939 1170 icon='preferences-desktop-default-applications'
al@813 1171 eval $(yad --title="$(_n 'SliTaz default applications')" \
al@943 1172 --window-icon="$icon" --image="$icon" --image-on-top \
al@813 1173 --text="<b>$(_n 'SliTaz default applications configuration')</b>" \
al@807 1174 --form \
al@813 1175 --field="$(_n 'File manager:'):CBE" "$FILE_MANAGERS" \
al@813 1176 --field="$(_n 'Web browser:'):CBE" "$BROWSERS" \
al@813 1177 --field="$(_n 'Text editor:'):CBE" "$EDITORS" \
al@813 1178 --field="$(_n 'Terminal:'):CBE" "$TERMINALS" \
al@813 1179 --field="$(_n 'Window manager:'):CBE" "$WINDOW_MANAGERS" | \
al@807 1180 awk -F'|' '{printf "FILE_MANAGER=\"%s\"\nBROWSER=\"%s\"\nEDITOR=\"%s\"\
al@807 1181 TERMINAL=\"%s\"\nWINDOW_MANAGER=\"%s\"\n", $1, $2, $3, $4, $5}')
al@810 1182
al@807 1183 sed '/FILE_MANAGER=/s|"\([^"]*\)"|"'$FILE_MANAGER'"|; \
al@807 1184 /BROWSER=/s|"\([^"]*\)"|"'$BROWSER'"|; \
al@807 1185 /EDITOR=/s|"\([^"]*\)"|"'$EDITOR'"|; \
al@807 1186 /TERMINAL=/s|"\([^"]*\)"|"'$TERMINAL'"|; \
al@807 1187 /WINDOW_MANAGER=/s|"\([^"]*\)"|"'$WINDOW_MANAGER'"|' \
al@943 1188 -i $CONFIG
al@943 1189 ;;
al@943 1190
al@807 1191 gpl)
al@957 1192 yad --title='GNU General Public License' --window-icon='text-x-copying' \
al@943 1193 --geometry='650x500' \
al@943 1194 --image='/usr/share/pixmaps/gpl3.png' --image-on-top \
al@813 1195 --center \
al@813 1196 --text-info \
al@943 1197 --fontname='monospace' \
al@943 1198 --button 'OK' < /usr/share/licenses/gpl.txt
al@943 1199 ;;
al@943 1200
pascal@1032 1201 print)
pascal@1032 1202 printer
pascal@1032 1203 ;;
pascal@1032 1204 prnsvr)
pascal@1032 1205 shift
pascal@1032 1206 printer_server $@ &
pascal@1032 1207 ;;
pascal@1015 1208 ssh)
pascal@1015 1209 ssh
pascal@1015 1210 ;;
pascal@1015 1211
pascal@967 1212 vnc)
pascal@967 1213 vnc
pascal@967 1214 ;;
pascal@967 1215
pascal@979 1216 video)
pascal@985 1217 shift
pascal@985 1218 video "$@"
pascal@979 1219 ;;
pascal@979 1220
pascal@967 1221 newvt)
pascal@967 1222 $@
pascal@967 1223 ;;
pascal@967 1224
al@1004 1225 mkmenu) $@ ;;
al@1004 1226
pankso@553 1227 *)
al@943 1228 usage
al@943 1229 ;;
pankso@553 1230 esac
pankso@553 1231
pankso@553 1232 exit 0