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