tazpanel view settings.cgi @ rev 498

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