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