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|&|&|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|\&|&|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
|