tazpanel view settings.cgi @ rev 519

tazpanel.js, footer.html: fix AJAX loader display; misc tiny edits
author Aleksej Bobylev <al.bobylev@gmail.com>
date Tue Aug 04 02:32:11 2015 +0300 (2015-08-04)
parents 0e464ccf165e
children 2787498af74a
line source
1 #!/bin/sh
2 #
3 # System settings CGI interface: user, locale, keyboard, date. Since we
4 # don't have multiple pages here there is only one case used to get command
5 # values and the full content is followed directly.
6 #
7 # Copyright (C) 2011-2015 SliTaz GNU/Linux - BSD License
8 #
11 # Common functions from libtazpanel
13 . lib/libtazpanel
14 get_config
16 TITLE=$(_ 'System settings')
19 listdb() {
20 for item in $(getdb $1 | cut -d: -f1); do
21 echo "<option>$item</option>\n"
22 done
23 }
26 restart_lxpanel() {
27 # `lxpanelctl restart` exists, but it breaks often leaving us without any panel
28 lxpanel_pid="$(ps -o comm,pid | fgrep lxpanel | awk '{print $2}')"
29 lxpanel_user="$(ps -o comm,user | fgrep lxpanel | awk '{print $2}')"
30 lxpanel_comm="$(ps -o pid,args | grep -e "^\ *$lxpanel_pid " | awk '{$1="";print}')"
32 if [ "$USER" == "$lxpanel_user" ]; then
33 kill $lxpanel_pid
34 DISPLAY=':0.0' XAUTHORITY='/var/run/slim.auth' $lxpanel_comm &
35 fi
36 }
40 #
41 # Commands executed before page loading.
42 #
44 case " $(GET) " in
45 *\ do\ *)
46 users=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="user") print $2}')
47 groups=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="group")print $2}')
49 case $(GET do) in
51 # Groups page
52 delgroups) for i in $groups; do delgroup $i; done ;;
53 addgroup) addgroup $groups ;;
54 addmember) addgroup $(GET member) $groups ;;
55 delmember) delgroup $(GET member) $groups ;;
57 # Users page
58 delusers) for i in $users; do deluser $i; done ;;
59 lockusers) for i in $users; do passwd -l $i | log; done ;;
60 unlockusers) for i in $users; do passwd -u $i | log; done ;;
61 chpasswd) echo "$users:$(GET password)" | chpasswd -m | log ;;
62 adduser)
63 if [ -n "$users" ]; then
64 name="$(GET name)"
65 adduser -D -s /bin/sh -g "${name:-SliTaz User}" -G users -h /home/$users $users
66 echo "$user:$(GET passwd)" | chpasswd -m | log
67 for i in audio cdrom floppy video tty; do addgroup $users $i; done
68 passwd -u $users | log
69 fi ;;
71 # System time
72 calendar) # display Yad date picker (AJAX)
73 new_date="$(DISPLAY=':0.0' XAUTHORITY='/var/run/slim.auth' \
74 yad --calendar --on-top --mouse --undecorated \
75 --window-icon=config-date --title="$(_ 'Set date')" \
76 --date-format='%x<span style="display:none">%F</span>')"
77 header
78 echo "$new_date"; exit 0;;
80 settz) # set timezone
81 GET tz > /etc/TZ ;;
83 date) # only accepted format is MMDDhhmm[[YY]YY][.ss]
84 if [ -n "$(GET dateFull)" ]; then
85 dateFull="$(GET dateFull)" # %F = YYYY-MM-DD
86 date $(printf '%02d%02d%02d%02d%d.%02d' "${dateFull:5:2}" \
87 "${dateFull:8:2}" "$(GET hour)" "$(GET min)" \
88 "${dateFull:0:4}" "$(GET sec)") >/dev/null
89 else
90 date $(printf '%02d%02d%02d%02d%d.%02d' "$(GET month)" \
91 "$(GET day)" "$(GET hour)" "$(GET min)" "$(GET year)" \
92 "$(GET sec)") >/dev/null
93 fi;;
95 rdate) # get and possibly set the system date/time from a remote host
96 rdate -s tick.greyware.com ;;
98 hwclock) # query and set hardware clock (RTC)
99 hwclock -w -u ;;
101 gethwclock) # get date/time from hardware clock (AJAX)
102 header; hwclock -ur | sed 's|0.000000 seconds||'; exit 0;;
104 esac
105 ;;
108 *\ gen_locale\ *) new_locale=$(GET gen_locale) ;;
109 *\ gen_keymap\ *) new_keymap=$(GET gen_keymap) ;;
111 *\ apply_xorg_kbd\ *)
112 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \
113 /etc/X11/xorg.conf.d/40-Keyboard.conf ;;
114 *\ style*)
115 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
116 . $CONFIG ;;
119 *\ tweak\ *)
120 HOME="$(getdb passwd | awk -F: -vu=$REMOTE_USER '$1==u{print $6}')"
121 [ -d "$HOME" ] && exit 0
123 dd="$HOME/.local/share/desktop-directories"; sd="$dd/SliTazMenu.directory"
125 case "$REMOTE_USER" in
126 root) color='31'; ind='#';;
127 *) color='32'; ind='$';;
128 esac
130 case $(GET tweak) in
131 monochrome)
132 # PS1='\u@\h:\w\$ '
133 sed -i "s|^PS1=.*|PS1='\\\\u@\\\\h:\\\\w\\\\$ind '|" $HOME/.profile;;
134 colored)
135 # PS1='\[\e[0;32m\]\u@\h\[\e[0m\]:\[\e[0;33m\]\w\[\e[0m\]\$ '
136 sed -i "s|^PS1=.*|PS1='\\\\\\[\\\\e\[0;${color}m\\\\\\]\\\\u@\\\\h\\\\\\[\\\\e\\[0m\\\\\\]:\\\\\\[\\\\e\\[0;33m\\\\\\]\\\\w\\\\\\[\\\\e\\[0m\\\\\\]\\\\$ind '|" $HOME/.profile;;
137 slitaz-*)
138 lxpanel="$HOME/.config/lxpanel"
139 if [ ! -e "$lxpanel" ]; then
140 mkdir -p "$lxpanel"; cp /etc/lxpanel/default /etc/lxpanel/slitaz $lxpanel
141 fi
143 for panel in $(find $lxpanel -type f -iname panel); do
144 awk -vicon="/usr/share/pixmaps/$(GET tweak).png" '
145 BEGIN{ found = "0"; }
146 {
147 if ($1 == "Plugin") { found = "1"; }
149 if (found == "1" && $1 == "type") {
150 if ($3 == "menu") found = "2"; else found = "0";
151 }
153 if (found == "2" && $1 == "Plugin") { found = "0"; }
155 if (found == "2" && index($1, "image")) {
156 printf " image=%s\n", icon;
157 found = 0;
158 } else {
159 print;
160 }
161 }
162 ' $panel > $panel.new
163 mv -f $panel.new $panel
164 done
166 restart_lxpanel;;
167 menu-notext)
168 mkdir -p $dd
169 echo -e '[Desktop Entry]\nType=Directory\nName=' > $sd
170 restart_lxpanel;;
171 menu-text)
172 [ -f "$sd" ] && rm "$sd"
173 restart_lxpanel;;
174 esac
175 exit 0
176 ;;
179 *\ menuIcon\ *) # return specified image (AJAX)
180 icon="/usr/share/pixmaps/$(GET menuIcon).png"
181 [ ! -r $icon ] && exit 0
182 header "Content-Type: image/png"; cat $icon; exit 0
183 ;;
184 esac
190 #
191 # Default xHTML content
192 #
194 header
196 case " $(GET) " in
197 *\ group*)
198 #
199 # Groups management
200 #
201 xhtml_header "$(_ 'Manage groups')"
202 check_root_tazpanel
204 cat <<EOT
205 <section id="groups">
206 <form class="wide">
207 <header>
208 <input type="hidden" name="groups"/>
209 <!-- $(_ 'Selection:') -->
210 <button name="do" value="delgroups" data-icon="delete">$(_ 'Delete group')</button>
211 </header>
213 <div class="scroll">
214 <table class="wide zebra scroll">
215 <thead>
216 <tr class="thead">
217 <td>$(_ 'Group')</td>
218 <td>$(_ 'Group ID')</td>
219 <td>$(_ 'Members')</td>
220 </tr>
221 </thead>
222 <tbody>
223 EOT
224 for group in $(getdb group | cut -d: -f1); do
225 IFS=':'
226 set -- $(getdb group | grep "^$group:")
227 unset IFS
228 cat <<EOT
229 <tr>
230 <td><input type="checkbox" name="group" value="$group" id="$group"/>
231 <label for="$group" data-icon="group">$group</label></td>
232 <td>$3</td>
233 <td>${4//,/, }</td>
234 </tr>
235 EOT
236 done
237 cat <<EOT
238 </tbody>
239 </table>
240 </div>
241 </form>
242 </section>
245 <section>
246 <header>$(_ 'Add a new group')</header>
247 <form class="wide">
248 <input type="hidden" name="groups"/>
249 <footer>$(_ 'Group name:') <input type="text" name="group"/>
250 <button type="submit" name="do" value="addgroup" data-icon="add">$(_ 'Create group')</button>
251 </footer>
252 </form>
253 </section>
256 <section>
257 <header>$(_ 'Manage group membership')</header>
258 <form class="wide">
259 <input type="hidden" name="groups"/>
260 <div>
261 $(_ 'Group name:') <select name="group">$(listdb group)</select>
262 $(_ 'User name:') <select name="member">$(listdb passwd)</select>
263 </div>
264 <footer>
265 <button name="do" value="addmember" data-icon="add">$(_ 'Add user')</button>
266 <button name="do" value="delmember" data-icon="delete">$(_ 'Remove user')</button>
267 </footer>
268 </form>
269 </section>
271 EOT
272 ;;
275 *\ user*)
276 #
277 # Users management
278 #
279 xhtml_header "$(_ 'Manage users')"
280 check_root_tazpanel
282 cat <<EOT
283 <section id="users">
284 <form class="wide">
285 <header>
286 <!--$(_ 'Selection:')-->
287 <button name="do" value="delusers" data-icon="delete">$(_ 'Delete user')</button>
288 <button name="do" value="lockusers" data-icon="lock" >$(_ 'Lock user' )</button>
289 <button name="do" value="unlockusers" data-icon="unlock">$(_ 'Unlock user')</button>
290 </header>
292 <table class="wide zebra center">
293 <thead>
294 <tr>
295 <td>$(_ 'Login')</td>
296 <td>$(_ 'User ID')</td>
297 <td>$(_ 'User Name')</td>
298 <td>$(_ 'Home')</td>
299 <td>$(_ 'Shell')</td>
300 </tr>
301 </thead>
302 </tbody>
303 EOT
304 for login in $(getdb passwd | cut -d: -f1); do
305 if [ -d "/home/$login" ]; then
306 blocked=''; usericon='user'
307 if getdb shadow | grep -qs "^$login:!"; then
308 blocked='class="color31"'
309 usericon="lock"
310 fi
311 IFS=':'
312 set -- $(getdb passwd | grep "^$login:")
313 unset IFS
314 cat <<EOT
315 <tr>
316 <td style="white-space: nowrap">
317 <input type="checkbox" name="user" value="$login" id="$login"/>
318 <label for="$login" data-icon="$usericon" $blocked>$login</label></td>
319 <td>$3:$4</td>
320 <td>$(echo $5 | sed s/,.*//)</td>
321 <td>$6</td>
322 <td>$7</td>
323 </tr>
324 EOT
325 fi
326 done
327 cat <<EOT
328 </tbody>
329 </table>
330 EOT
331 cat <<EOT
332 <footer>
333 $(_ 'Password:')
334 <input type="password" name="password" placeholder="$(_ 'New password')"/>
335 <button type="submit" name="do" value="chpasswd" data-icon="ok">$(_ 'Change password')</button>
336 </footer>
337 </form>
338 </section>
341 <section>
342 <header>$(_ 'Add a new user')</header>
344 <form>
345 <input type="hidden" name="users"/>
346 <table class="summary">
347 <tr><td>$(_ 'User login:')</td>
348 <td><input type="text" name="user" size="30" pattern="[a-z]*"/></td></tr>
349 <tr><td>$(_ 'User name:')</td>
350 <td><input type="text" name="name" size="30"/></td></tr>
351 <tr><td>$(_ 'User password:')</td>
352 <td><input type="password" name="passwd" size="30"/></td></tr>
353 </table>
355 <footer>
356 <button type="submit" name="do" value="adduser" data-icon="add">$(_ 'Create user')</button>
357 </footer>
358 </form>
359 </section>
360 EOT
362 # `who` output is empty in the SLiM sessions
363 if [ -n "$(who)" ]; then
364 cat <<EOT
365 <section>
366 <header>$(_ 'Current user sessions')</header>
367 <pre>$(who)</pre>
368 </section>
369 EOT
370 fi
372 # `last` output is empty (just header) in the Live mode
373 if [ "$(last | wc -l)" != "1" ]; then
374 cat <<EOT
375 <section>
376 <header>$(_ 'Last user sessions')</header>
377 <div class="scroll"><pre>$(last)</pre></div>
378 </section>
379 EOT
380 fi
381 ;;
384 *\ locale*)
385 #
386 # Choose locale
387 #
388 xhtml_header "$(_ 'Choose locale')"
389 check_root_tazpanel
391 loading_msg "$(_ 'Please wait...')"
393 cur_loc=$(locale | grep LANG | cut -d= -f2)
394 cat <<EOT
395 <section id="locale">
396 <header>$(_ 'Current locale settings:')</header>
397 <div>
398 <pre>$(locale)</pre>
399 </div>
400 </section>
402 <section>
403 <header>$(_ 'Locales that are currently installed on the machine:')</header>
404 <div>
405 <pre>$(locale -a)</pre>
406 </div>
407 </section>
408 EOT
410 is_installed "glibc-locale"
411 [ $? = 1 ] &&
412 msg tip $(_ \
413 "Can't see your language?<br/>You can \
414 <a href='pkgs.cgi?do=Install&amp;glibc-locale'>install glibc-locale</a> \
415 to see a larger list of available locales.")
418 cat <<EOT
419 <section>
420 <header>$(_ 'Available locales:')</header>
421 <form class="wide">
422 <table class="wide zebra">
423 <thead>
424 <tr><td>$(_ 'Code')</td>
425 <td>$(_ 'Language')</td>
426 <td>$(_ 'Territory')</td>
427 <td>$(_ 'Description')</td>
428 </tr>
429 </thead>
430 <tbody>
431 EOT
432 for locale in $(find /usr/share/i18n/locales -type f | sort); do
433 locale_name=$(basename $locale)
434 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2)
435 if [ -n "$locale_title" ]; then
436 sel=''; [ "$locale_name" == "$cur_loc" ] && sel='checked="checked"'
437 cat <<EOT
438 <tr>
439 <td>
440 <input type="radio" name="gen_locale" value="$locale_name" $sel id="$locale_name"/>
441 <label for="$locale_name">$locale_name</label>
442 </td>
443 <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td>
444 <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td>
445 <td>$locale_title</td>
446 </tr>
447 EOT
448 fi
449 done
450 cat <<EOT
451 </tbody>
452 </table>
454 <footer>
455 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
456 </footer>
457 </form>
458 </section>
459 EOT
460 ;;
463 *\ tweaks\ *)
464 #
465 # Small tweaks for user
466 #
467 user="$REMOTE_USER"; host="$(hostname)"
468 xhtml_header "$(_ 'Small quick tweaks for user %s' "$user")"
470 HOME="$(getdb passwd | awk -F: -vu=$user '$1==u{print $6}')"
471 font="${TERM_FONT:-monospace}"; palette=$(echo $TERM_PALETTE | tr A-Z a-z)
472 case $user in
473 root) color=31; ind="#";;
474 *) color=32; ind="$";;
475 esac
477 prompt_bw="$user@$host:/usr/bin$ind"
478 prompt_c="<span class=\"color$color\">$user@$host</span>:<span class=\"color33\">/usr/bin</span>$ind"
479 cursor="<span class=\"color47\">_</span>"
480 cat <<EOT
481 <script type="text/javascript">
482 function tweak(tweakName) {
483 // Send request to the server
484 var hiddenImg = document.createElement('IMG');
485 hiddenImg.src = "settings.cgi?tweak=" + tweakName;
486 }
487 </script>
489 <section>
490 <header>$(_ 'Small quick tweaks for user %s' "$user")</header>
492 <div>
493 <fieldset><legend>$(_ 'Terminal prompt')</legend>
494 <table class="wide">
495 <tr>
496 <td>
497 <label>
498 <input type="radio" name="termPrompt" onclick="tweak('monochrome')"/>
499 $(_ 'Monochrome')
500 </label>
501 <pre class="term $palette" style="font-family: '$font'; height: 5rem;">
502 $prompt_bw uname -r<br/>$(uname -r)<br/>$prompt_bw date<br/>$(date)<br/>$prompt_bw $cursor
503 </pre>
504 </td>
505 <td>
506 <label>
507 <input type="radio" name="termPrompt" onclick="tweak('colored')"/>
508 $(_ 'Colored')
509 </label>
510 <pre class="term $palette" style="font-family: '$font'; height: 5rem;">
511 $prompt_c uname -r<br/>$(uname -r)<br/>$prompt_c date<br/>$(date)<br/>$prompt_c $cursor
512 </pre>
513 </td>
514 </tr>
515 </table>
517 <p>$(_ 'Manual edit: %s' "<a data-icon=\"conf\" href="index.cgi?file=$HOME/.profile">~/.profile</a>")<br/>
518 $(_ 'To take effect: log out and log in to system or execute command in the terminal:')</p>
520 <pre>. ~/.profile</pre>
521 </fieldset>
523 <br/>
525 <fieldset>
526 <legend>$(_ 'Menu button appearance')</legend>
527 <table class="wide">
528 <tr>
529 <td style="vertical-align: top">
530 <fieldset>
531 <legend>$(_ 'Icon:')</legend>
532 <label>
533 <input type="radio" name="menuIcon" onclick="tweak('slitaz-menu-empty')"/>
534 $(_ 'Do not show')
535 </label><br/>
536 <label>
537 <input type="radio" name="menuIcon" onclick="tweak('slitaz-button-red')"/>
538 <img src="?menuIcon=slitaz-button-red"/>
539 </label><br/>
540 <label>
541 <input type="radio" name="menuIcon" onclick="tweak('slitaz-menu')"/>
542 <img src="?menuIcon=slitaz-menu"/>
543 </label><br/>
544 <label>
545 <input type="radio" name="menuIcon" onclick="tweak('slitaz-button')"/>
546 <img src="?menuIcon=slitaz-button"/>
547 </label>
548 </fieldset>
549 </td>
550 <td style="vertical-align: top">
551 <fieldset>
552 <legend>$(_ 'Text:')</legend>
553 <label>
554 <input type="radio" name="menuText" onclick="tweak('menu-notext')"/>
555 $(_ 'Do not show')
556 </label><br/>
557 <label>
558 <input type="radio" name="menuText" onclick="tweak('menu-text')"/>
559 $(_ 'Show text')
560 </label>
561 </fieldset>
562 </td>
563 </tr>
564 </table>
565 <p>$(_ 'Manual edit: %s' \
566 "<a data-icon=\"conf\" href=\"index.cgi?file=$HOME/.local/share/desktop-directories/SliTazMenu.directory\">~/.local/share/desktop-directories/SliTazMenu.directory</a>
567 $(
568 find $HOME/.config/lxpanel -type f -name panel | awk -vh="$HOME" \
569 '{ printf "<a data-icon=\"conf\" href=\"index.cgi?file=%s\">%s</a> ", $1, gensub(h, "~", "")}'
570 )")</p>
571 </fieldset>
572 </div>
573 </section>
574 EOT
575 ;;
578 *)
579 #
580 # Default system settings page
581 #
582 xhtml_header "$(_ 'Manage system time, users or language settings')"
583 check_root_tazpanel
585 cat <<EOT
586 <form><!--
587 --><button name="users" data-icon="user" >$(_ 'Manage users' )</button><!--
588 --><button name="groups" data-icon="group">$(_ 'Manage groups')</button>
589 </form>
591 <section>
592 <header>$(_ 'System time')</header>
593 <div>
594 <form class="wide" id="sysTimeForm">
595 <fieldset><legend>$(_ 'Time zone:')</legend>
596 <select name="tz">
597 $(cd /usr/share/zoneinfo; find * -type f ! -name '*.tab' | sort | \
598 awk -vtz="$(cat /etc/TZ)" \
599 '{printf("<option%s>%s</option>", ($1 == tz)?" selected":"", $1)}')
600 </select>
601 <button name="do" value="settz" data-icon="ok">$(_ 'Change')</button>
602 </fieldset>
604 <fieldset><legend>$(_ 'System time:')</legend>
605 $(date | sed 's|[0-9][0-9]:[0-9:]*|<span id="time">&</span>|')
606 <button name="do" value="rdate" data-icon="sync">$(_ 'Sync online')</button>
607 </fieldset>
609 <fieldset id="hwclock1"><legend>$(_ 'Hardware clock:')</legend>
610 <span id="hwclocks">$(hwclock -ur | sed 's|0.000000 seconds||')</span>
611 <button name="do" value="hwclock" id="hwclock" data-icon="clock">$(_ 'Set hardware clock')</button>
612 </fieldset>
614 <fieldset><legend>$(_ 'Set date')</legend>
615 EOT
616 if [ -z "$(which yad)" ]; then
617 cat <<EOT
618 <input type="number" name="day" value="$(date +%d)" min="1" max="31" size="4" required/>
619 <select name="month" value="$(date +%m)">
620 $(for i in $(seq 12); do
621 sel=''; [ "$i" == "$(date +%-m)" ] && sel=' selected'
622 printf "<option value=\"%s\"$sel>%s</option>" $(date -d $i.01-01:01 '+%m %B')
623 done)
624 </select>
625 <input type="number" name="year" value="$(date +%Y)" min="2015" max="2030" size="6" required/>
626 EOT
627 else
628 cat <<EOT
629 <button onclick="datePicker(); return false">
630 <span id="dateTime" data-icon="calendar">$(date +%x)<span style="display:none">$(date +%F)</span></span>
631 </button>
632 EOT
633 fi
634 cat <<EOT
635 - <input type="number" name="hour" value="$(date +%H)" min="0" max="23" size="4" required/><!--
636 -->:<input type="number" name="min" value="$(date +%M)" min="0" max="59" size="4" required/><!--
637 -->:<input type="number" name="sec" value="00" min="0" max="59" size="4" required/>
638 EOT
639 if [ -z "$(which yad)" ]; then
640 cat <<EOT
641 <button name="do" value="date" data-icon="ok">$(_ 'Set date')</button>
642 EOT
643 else
644 cat <<EOT
646 <button data-icon="ok" onclick="submitSysTimeForm()">$(_ 'Set date')</button>
647 EOT
648 fi
649 cat <<EOT
650 </fieldset>
651 </form>
652 </div>
654 <script type="text/javascript">
655 // Live time on page
656 Date.prototype.timeNow = function() {
657 return ((this.getHours() < 10)?"0":"") + this.getHours() + ":" + ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ":" + ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
658 }
659 setInterval(function(){
660 document.getElementById('time').innerText = new Date().timeNow();
661 //ajax('settings.cgi?do=gethwclock', '1', 'hwclocks');
662 }, 1000);
665 // Run date picker and return value to the 'dateTime' element
666 function datePicker() {
667 ajax('settings.cgi?do=calendar', '1', 'dateTime');
668 }
670 // Actions to do before form submit and submit
671 function submitSysTimeForm() {
672 sysTimeForm = document.getElementById('sysTimeForm');
674 var dateFull = document.createElement('INPUT');
675 dateFull.name = 'dateFull';
676 dateFull.value = document.getElementById('dateTime').childNodes[1].innerText;
677 dateFull.type = 'hidden';
678 sysTimeForm.appendChild(dateFull);
680 var submitDo = document.createElement('INPUT');
681 submitDo.name = 'do'; submitDo.value = 'date';
682 submitDo.type = 'hidden';
683 sysTimeForm.appendChild(submitDo);
685 sysTimeForm.submit();
686 }
687 </script>
688 </section>
689 EOT
692 #
693 # Locale settings
694 #
695 cat <<EOT
696 <section>
697 <header id="locale">$(_ 'System language')</header>
698 <div>
699 <form>
700 EOT
701 # Check if a new locale was requested
702 if [ -n "$new_locale" ]; then
703 rm -rf /usr/lib/locale/$new_locale
704 localedef -i $new_locale -c -f UTF-8 \
705 /usr/lib/locale/$new_locale
706 # System configuration
707 echo "LANG=$new_locale" > /etc/locale.conf
708 echo "LC_ALL=$new_locale" >> /etc/locale.conf
709 msg warn "$(_ \
710 'You must logout and login again to your current session to use %s locale.' $new_locale)"
711 else
712 cat <<EOT
713 $(_ 'Current system locale:')
714 <strong>$(locale | grep LANG | cut -d= -f2)</strong>
715 <button name="locale" data-icon="locale">$(_ 'Change')</button>
716 EOT
717 fi
718 cat <<EOT
719 </div>
720 </form>
721 </section>
724 <section>
725 <header id="keymap">$(_ 'Keyboard layout')</header>
726 <div>
727 EOT
728 # Check if a new keymap was requested
729 if [ -n "$new_keymap" ]; then
730 echo "$new_keymap" > /etc/keymap.conf
731 if [ -x /bin/loadkeys ]; then
732 loadkeys $new_keymap
733 else
734 loadkmap < /usr/share/kmap/$new_keymap.kmap
735 fi
736 fi
738 keymap=$(cat /etc/keymap.conf)
739 _ 'Current console keymap: %s' $keymap
740 if [ -n "$keymap" ]; then
741 case "$keymap" in
742 fr_CH*)
743 keymap="ch" ;;
744 ru)
745 keymap="us,ru" ;;
746 slovene)
747 keymap=si ;;
748 *)
749 keymap=${keymap%-lat*}
750 keymap=${keymap%-abnt2} ;;
751 esac
752 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
753 cat <<EOT
754 <form id="settings"></form>
755 <form id="index" action="index.cgi"></form>
756 <br/>
757 $(_ 'Suggested keymap for Xorg:') $keymap
758 <button form="settings" name="apply_xorg_kbd" value="$keymap" data-icon="ok">$(_ 'Activate')</button>
759 <button form="index" name="file" value="$keyboard_config" data-icon="edit">$(_ 'Edit')</button>
760 <input form="index" type="hidden" name="action" value="edit" />
761 <br/>
762 EOT
763 fi
764 cat <<EOT
765 <form>
766 $(_ 'Available keymaps:')
767 <select name="gen_keymap">
768 $(list_keymaps)
769 </select>
770 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
771 </form>
772 </div>
773 </section>
776 <section>
777 <header>$(_ 'Panel configuration')</header>
778 <div>
779 <form class="wide">
780 <fieldset><legend>$(_ 'Style:')</legend>
781 <select name="style">$(list_styles)</select>
782 <button data-icon="ok">$(_ 'Activate')</button>
783 </fieldset>
784 </form>
786 <fieldset><legend>$(_ 'Configuration files:')</legend>
787 <button form="index" name="file" value="$CONFIG" data-icon="edit">$(_ 'Panel')</button>
788 <button form="index" name="file" value="$HTTPD_CONF" data-icon="edit">$(_ 'Server')</button>
789 </fieldset>
791 <p>$(_ 'TazPanel provides a debugging mode and page:')
792 <a href="index.cgi?debug">debug</a>
793 </p>
794 </div>
795 </section>
796 EOT
797 ;;
798 esac
800 xhtml_footer
801 exit 0