tazpanel view settings.cgi @ rev 446

Default user is nobody
author Pascal Bellard <pascal.bellard@slitaz.org>
date Thu Apr 09 20:37:35 2015 +0200 (2015-04-09)
parents adedebded23a
children 2c1f491aca05
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
15 header
17 TITLE=$(_ 'TazPanel - Settings')
20 # Get system database. LDAP compatible.
22 getdb() {
23 getent $1 2>/dev/null || cat /etc/$1
24 }
26 listdb() {
27 for item in $(getdb $1 | cut -d ":" -f 1); do
28 echo "<option>$item</option>\n"
29 done
30 }
33 #############################
34 # Get info from locale file #
35 #############################
37 get_locale_info()
38 {
39 # Commands like `LC_ALL=fr_FR locale -k LC_MEASUREMENT` will do the job
40 # only when your locale is generated and exists in the /usr/lib/locale.
41 # Here we manually parse locale definition files from /usr/share/i18n/locales/.
42 # Strange, bloated and not script-friendly format :(
44 [ ! -e /usr/share/i18n/locales/$1 ] && return
46 # Prepare file
47 if [ ! -e /tmp/tazpanel-$1 ]; then
48 sed 's|^[ \t]*||;/^%/d;/^comment_char/d;/^escape_char/d' /usr/share/i18n/locales/$1 | tr '\n' '&' | sed 's|/&||g' | tr '&' '\n' | sed 's|<U\([0-9a-fA-F]*\)>|\&#x\1;|g' | sed 's|&#x00|\&#x|g' > /tmp/tazpanel-$1
49 fi
51 local ANS=$(grep -e "^$2[ ]" /tmp/tazpanel-$1 | sed 's|^[^ \t][^ \t]* *||')
52 if [ -z "$ANS" ]; then
53 # Not found, then section is copied from other locale definition file...
54 case $2 in
55 measurement)
56 section='LC_MEASUREMENT';;
57 width|height)
58 section='LC_PAPER';;
59 currency_symbol|int_curr_symbol)
60 section='LC_MONETARY';;
61 day|abday|mon|abmon|d_t_fmt|d_fmt|t_fmt|am_pm|t_fmt_ampm|date_fmt)
62 section='LC_TIME';;
63 esac
64 # Recursive call
65 get_locale_info $(sed -n '/^'$section'/,/^END '$section'/p' /tmp/tazpanel-$1 | grep 'copy' | cut -d'"' -f2) $2
66 else
67 case $2 in
68 day|abday|mon|abmon|am_pm) # semicolon-separated list in double quotes
69 echo "$ANS";;
70 *) # single value in double qoutes
71 echo "$ANS" | cut -d'"' -f2;;
72 esac
73 fi
74 }
77 # Get info from locale file about measurement system
79 get_locale_info_measurement()
80 {
81 # faster to use pre-processed values
82 case $1 in
83 en_AG|en_US|es_PR|es_US|nl_AW|yi_US) _ 'US' ;;
84 POSIX) ;;
85 *) _ 'metric' ;;
86 esac
87 }
90 # Get info from locale file about paper size
92 get_locale_info_paper()
93 {
94 # faster to use pre-processed values
95 case $1 in
96 en_AG|en_US|es_PR|es_US|nl_AW|yi_US) echo '8½×11 (US Letter)';;
97 en_CA|en_PH|es_CL|es_CO|es_CR|es_GT|es_MX|es_NI|es_PA|es_SV|es_VE|fil_PH|fr_CA|ik_CA|iu_CA|shs_CA|tl_PH) echo '216×279 (US Letter)';;
98 POSIX) ;;
99 *) echo '210×297 (A4)';;
100 esac
101 }
104 # Get info from locale file about date and time format
106 get_locale_info_date_time()
107 {
108 case $2 in
109 c) get_locale_info $1 d_t_fmt ;;
110 x) get_locale_info $1 d_fmt ;;
111 X) get_locale_info $1 t_fmt ;;
112 r) get_locale_info $1 t_fmt_ampm ;;
113 *) get_locale_info $1 date_fmt ;;
114 esac | sed 's|&#x20;| |g; s|&#x25;|%|g; s|&#x2C;|,|g; s|&#x2D;|-|g; s|&#x2E;|.|g; s|&#x2F;|/|g; s|&#x3A;|:|g; s|&#x41;|A|g; s|&#x42;|B|g; s|&#x43;|C|g; s|&#x46;|F|g; s|&#x48;|H|g; s|&#x49;|I|g; s|&#x4D;|M|g; s|&#x4F;|O|g; s|&#x52;|R|g; s|&#x53;|S|g; s|&#x54;|T|g; s|&#x58;|X|g; s|&#x59;|Y|g; s|&#x5A;|Z|g; s|&#x61;|a|g; s|&#x62;|b|g; s|&#x65;|e|g; s|&#x64;|d|g; s|&#x6B;|k|g; s|&#x6D;|m|g; s|&#x6E;|n|g; s|&#x6F;|o|g; s|&#x70;|p|g; s|&#x72;|r|g; s|&#x74;|t|g; s|&#x78;|x|g; s|&#x79;|y|g; s|&#x7A;|z|g;'
116 }
119 parse_date()
120 {
121 local weekday month day abday mon abmon rtime d_fmt t_fmt am_pm
122 weekday=$(( $(date +%w) + 1 )) # 1=Sunday ...
123 month=$(date +%-m) # 1=January ...
124 day=$(get_locale_info $1 day | cut -d'"' -f$(( 2 * $weekday )) | sed 's|&|\\\&|g') # translated day of week
125 abday=$(get_locale_info $1 abday | cut -d'"' -f$(( 2 * $weekday )) | sed 's|&|\\\&|g') # same, abbreviated
126 mon=$(get_locale_info $1 mon | cut -d'"' -f$(( 2 * $month )) | sed 's|&|\\\&|g') # translated month
127 abmon=$(get_locale_info $1 abmon | cut -d'"' -f$(( 2 * $month )) | sed 's|&|\\\&|g') # same, abbreviated
128 # next %-codes expanded into other %-codes
129 rtime=$(get_locale_info_date_time $1 r | sed 's|&|\\\&|g') # %r: 12-hour time
130 d_fmt=$(get_locale_info_date_time $1 x | sed 's|&|\\\&|g') # %x: date
131 t_fmt=$(get_locale_info_date_time $1 X | sed 's|&|\\\&|g') # %X: time
133 case $(LC_ALL=POSIX date +%P) in # translated am/pm
134 am) am_pm=$(get_locale_info $1 am_pm | cut -d'"' -f2 | sed 's|&|\\\&|g');;
135 pm) am_pm=$(get_locale_info $1 am_pm | cut -d'"' -f4 | sed 's|&|\\\&|g');;
136 esac
138 # r x X | OC | Y y Oy Ey | m -m Om | d -d Od | e -e Oe | F | H OH k | I OI l | M OM | S OS | R T | Z z | t | P p Op A a B b
139 # Note: %P=am/pm; %p=AM/PM. But here they the same because it is not a simple job to convert letters.
140 echo "$2" | sed "s|%r|$rtime|; s|%x|$d_fmt|; s|%X|$t_fmt|; \
141 s|%OC|S(date +%OC)|; \
142 s|%Y|$(date +%Y)|; s|%y|$(date +%y )|; s|%Oy|$(date +%Oy)|; s|%Ey|$(date +%Ey)|; \
143 s|%m|$(date +%m)|; s|%-m|$(date +%-m)|; s|%Om|$(date +%Om)|; \
144 s|%d|$(date +%d)|; s|%-d|$(date +%-d)|; s|%Od|$(date +%Od)|; \
145 s|%e|$(date +%e)|; s|%-e|$(date +%-e)|; s|%Oe|$(date +%Oe)|; \
146 s|%F|$(date +%F)|; \
147 s|%H|$(date +%H)|; s|%OH|$(date +%OH)|; s|%k|$(date +%k)|; \
148 s|%I|$(date +%I)|; s|%OI|$(date +%OI)|; s|%l|$(date +%l)|; \
149 s|%M|$(date +%M)|; s|%OM|$(date +%OM)|; \
150 s|%S|$(date +%S)|; s|%OS|$(date +%OS)|; \
151 s|%R|$(date +%R)|; s|%T|$(date +%T )|; \
152 s|%Z|$(date +%Z)|; s|%z|$(date +%z )|; \
153 s|%t|\t|; \
154 s|%P|$am_pm|; s|%p|$am_pm|; s|%Op|$am_pm|; s|%A|$day|; s|%a|$abday|; s|%B|$mon|; s|%b|$abmon|;"
156 }
158 list_of()
159 {
160 cd /usr/share/i18n/locales
161 #mon=$(date +%-m); monn=$(( $mon * 2 ))
162 #echo "mon=\"$mon\" monn=\"$monn\""
164 echo '<pre>'
165 for LOC in be_BY ca_IT el_CY fr_CH ru_RU ru_UA; do
166 case $LOC in
167 iso*|translit*) ;;
168 *)
169 #echo -e "$LOC:\t$(parse_date $LOC $(get_locale_info_date_time $LOC c | sed 's|&|\\\&|g'))";;
170 FMT="$(get_locale_info_date_time $LOC c)"
171 echo -e "$LOC:\t$FMT"
172 parse_date $LOC "$FMT"
173 echo;;
174 esac
175 done
176 echo '</pre>'
177 }
183 #
184 # Commands executed before page loading.
185 #
187 case " $(GET) " in
188 *\ do\ *)
189 users=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="user") print $2}')
190 groups=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="group")print $2}')
192 case $(GET do) in
194 # Groups page
195 delgroups)
196 for i in $groups; do delgroup $i; done ;;
197 addgroup)
198 addgroup $groups ;;
199 addmember)
200 addgroup $(GET member) $groups ;;
201 delmember)
202 delgroup $(GET member) $groups ;;
204 # Users page
205 delusers)
206 for i in $users; do deluser $i; done ;;
207 lockusers)
208 for i in $users; do passwd -l $i | log; done ;;
209 unlockusers)
210 for i in $users; do passwd -u $i | log; done ;;
211 chpasswd)
212 echo "$users:$(GET password)" | chpasswd -m | log ;;
213 adduser)
214 if [ -n "$users" ]; then
215 name=$(GET name); name=${name:-SliTaz User}
216 adduser -D -s /bin/sh -g "$name" -G users -h /home/$users $users
217 echo "$user:$(GET passwd)" | chpasswd -m | log
218 for i in audio cdrom floppy video tty; do addgroup $users $i; done
219 fi ;;
221 # System time
222 settz)
223 GET tz > /etc/TZ;;
224 date) # normalize to two digits
225 date $(printf '%02d%02d%02d%02d%d.%02d' "$(GET month)" "$(GET day)" "$(GET hour)" "$(GET min)" "$(GET year)" "$(GET sec)") >/dev/null;;
226 rdate)
227 rdate -s tick.greyware.com ;;
228 hwclock)
229 hwclock -w -u ;;
231 esac
232 ;;
235 *\ gen_locale\ *)
236 new_locale=$(GET gen_locale) ;;
237 *\ gen_keymap\ *)
238 new_keymap=$(GET gen_keymap) ;;
239 *\ apply_xorg_kbd\ *)
240 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \
241 /etc/X11/xorg.conf.d/40-Keyboard.conf ;;
242 *\ panel_pass*)
243 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF ;;
244 *\ style*)
245 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
246 . $CONFIG ;;
247 esac
253 #
254 # Default xHTML content
255 #
257 xhtml_header
258 check_root_tazpanel
260 case " $(GET) " in
261 *\ group*)
262 #
263 # Groups management
264 #
265 cat <<EOT
266 <h2 id="groups">$(_ 'Manage groups')</h2>
269 <section>
270 <form class="wide">
271 <header>
272 <input type="hidden" name="groups"/>
273 <!-- $(_ 'Selection:') -->
274 <button name="do" value="delgroups" data-icon="delete">$(_ 'Delete group')</button>
275 </header>
277 <div class="scroll">
278 <table class="wide zebra scroll">
279 <thead>
280 <tr class="thead">
281 <td>$(_ 'Group')</td>
282 <td>$(_ 'Group ID')</td>
283 <td>$(_ 'Members')</td>
284 </tr>
285 </thead>
286 <tbody>
287 EOT
288 for group in $(getdb group | cut -d ":" -f 1); do
289 IFS=':'
290 set -- $(getdb group | grep "^$group:")
291 unset IFS
292 gid=$3
293 members=$4
294 cat <<EOT
295 <tr>
296 <td><input type="checkbox" name="group" value="$group" id="$group"/>
297 <label for="$group" data-icon="group">$group</label></td>
298 <td>$gid</td>
299 <td>${members//,/, }</td>
300 </tr>
301 EOT
302 done
303 cat <<EOT
304 </tbody>
305 </table>
306 </div>
307 </form>
308 </section>
311 <section>
312 <header>$(_ 'Add a new group')</header>
313 <form>
314 <input type="hidden" name="groups"/>
315 <table>
316 <tr><td>$(_ 'Group name:')</td>
317 <td><input type="text" name="group"/></td>
318 </tr>
319 <tr><td colspan="2">
320 <button type="submit" name="do" value="addgroup" data-icon="add">$(_ 'Create group')</button>
321 </td></tr>
322 </table>
323 </form>
324 </section>
327 <section>
328 <header>$(_ 'Manage group membership')</header>
329 <form>
330 <input type="hidden" name="groups"/>
331 <table>
332 <tr>
333 <td>$(_ 'Group name:')</td>
334 <td><select name="group">$(listdb group)</select></td>
335 <td>$(_ 'User name:')</td>
336 <td><select name="member">$(listdb passwd)</select></td>
337 </tr>
338 <tr>
339 <td colspan="2">
340 <button name="do" value="addmember" data-icon="add">$(_ 'Add user')</button>
341 </td>
342 <td colspan="2">
343 <button name="do" value="delmember" data-icon="delete">$(_ 'Remove user')</button>
344 </td>
345 </tr>
346 </table>
347 </form>
348 </section>
350 EOT
351 ;;
354 *\ user*)
355 #
356 # Users management
357 #
358 cat <<EOT
359 <h2 id="users">$(_ 'Manage users')</h2>
361 <section>
362 <form class="wide">
363 <header>
364 <!--$(_ 'Selection:')-->
365 <button name="do" value="delusers" data-icon="delete">$(_ 'Delete user')</button>
366 <button name="do" value="lockusers" data-icon="lock" >$(_ 'Lock user' )</button>
367 <button name="do" value="unlockusers" data-icon="unlock">$(_ 'Unlock user')</button>
368 </header>
370 <table class="wide zebra center">
371 <thead>
372 <tr>
373 <td>$(_ 'Login')</td>
374 <td>$(_ 'User ID')</td>
375 <td>$(_ 'Name')</td>
376 <td>$(_ 'Home')</td>
377 <td>$(_ 'Shell')</td>
378 </tr>
379 </thead>
380 </tbody>
381 EOT
382 for login in $(getdb passwd | cut -d ":" -f 1); do
383 if [ -d /home/$login ]; then
384 colorlogin=$login
385 grep -qs "^$login:!" /etc/shadow &&
386 colorlogin="<span style='color: red;'>$login</span>"
387 IFS=':'
388 set -- $(getdb passwd | grep "^$login:")
389 unset IFS
390 cat <<EOT
391 <tr>
392 <td style="white-space: nowrap">
393 <input type="checkbox" name="user" value="$login" id="$login"/>
394 <label for="$login" data-icon="user">$colorlogin</label></td>
395 <td>$3:$4</td>
396 <td>$(echo $5 | sed s/,.*//)</td>
397 <td>$6</td>
398 <td>$7</td>
399 </tr>
400 EOT
401 fi
402 done
403 cat <<EOT
404 </tbody>
405 </table>
406 EOT
407 cat <<EOT
408 <footer>
409 <div>
410 $(_ 'Password:')
411 <input type="password" name="password"/>
412 <button type="submit" name="do" value="chpasswd" data-icon="ok">$(_ 'Change password')</button>
413 </div>
414 </footer>
415 </form>
416 </section>
419 <section>
420 <header>$(_ 'Add a new user')</header>
422 <form>
423 <input type="hidden" name="users"/>
424 <table class="summary">
425 <tr><td>$(_ 'User login:')</td>
426 <td><input type="text" name="user" size="30" pattern="[a-z]*"/></td></tr>
427 <tr><td>$(_ 'User name:')</td>
428 <td><input type="text" name="name" size="30"/></td></tr>
429 <tr><td>$(_ 'User password:')</td>
430 <td><input type="password" name="passwd" size="30"/></td></tr>
431 </table>
433 <footer>
434 <button type="submit" name="do" value="adduser" data-icon="add">$(_ 'Create user')</button>
435 </footer>
436 </form>
437 </section>
440 <section>
441 <header>$(_ 'Current user sessions')</header>
442 <pre>$(who)</pre>
443 </section>
446 <section>
447 <header>$(_ 'Last user sessions')</header>
448 <div class="scroll"><pre>$(last)</pre></div>
449 </section>
450 EOT
451 ;;
454 *\ locale*)
455 #
456 # Choose locale
457 #
458 LOADING_MSG="$(_ 'Please wait...')"; loading_msg
460 cur_loc=$(locale | grep LANG | cut -d= -f2)
461 cat <<EOT
462 <h2 id="locale">$(_ 'Choose locale')</h2>
464 <section>
465 <header>$(_ 'Current locale settings:')</header>
466 <div>
467 <pre>$(locale)</pre>
468 </div>
469 </section>
471 <section>
472 <header>$(_ 'Locales that are currently installed on the machine:')</header>
473 <div>
474 <pre>$(locale -a)</pre>
475 </div>
476 </section>
477 EOT
479 is_installed "glibc-locale"
480 [ $? = 1 ] &&
481 msg tip $(_ \
482 "Can't see your language?<br/>You can \
483 <a href='pkgs.cgi?do=Install&amp;glibc-locale'>install glibc-locale</a> \
484 to see a larger list of available locales.")
487 cat <<EOT
488 <section>
489 <header>$(_ 'Available locales:')</header>
490 <form class="wide">
491 <table class="wide zebra">
492 <thead>
493 <tr><td>$(_ 'Code')</td>
494 <td>$(_ 'Language')</td>
495 <td>$(_ 'Territory')</td>
496 <td>$(_ 'Description')</td>
497 </tr>
498 </thead>
499 <tbody>
500 EOT
501 for locale in $(find /usr/share/i18n/locales -type f | sort); do
502 locale_name=$(basename $locale)
503 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2)
504 if [ -n "$locale_title" ]; then
505 sel=''; [ "$locale_name" == "$cur_loc" ] && sel='checked="checked"'
506 cat <<EOT
507 <tr>
508 <td>
509 <input type="radio" name="gen_locale" value="$locale_name" $sel id="$locale_name"/>
510 <label for="$locale_name">$locale_name</label>
511 </td>
512 <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td>
513 <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td>
514 <td>$locale_title</td>
515 </tr>
516 EOT
517 fi
518 done
519 cat <<EOT
520 </tbody>
521 </table>
523 <footer>
524 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
525 </footer>
526 </form>
527 </section>
528 EOT
529 ;;
532 *)
533 #
534 # Default system settings page
535 #
537 cat <<EOT
538 <h2>$(_ 'System settings')</h2>
540 <p>$(_ 'Manage system time, users or language settings')<p>
542 <form><!--
543 --><button name="users" data-icon="user" >$(_ 'Manage users' )</button><!--
544 --><button name="groups" data-icon="group">$(_ 'Manage groups')</button>
545 </form>
547 <section>
548 <header>$(_ 'System time')</header>
549 <div>
550 <form class="wide">
551 <fieldset><legend>$(_ 'Time zone:')</legend>
552 <select name="tz">
553 $(cd /usr/share/zoneinfo; find * -type f ! -name '*.tab' | sort | \
554 awk -vtz="$(cat /etc/TZ)" \
555 '{printf("<option%s>%s</option>", ($1 == tz)?" selected":"", $1)}')
556 </select>
557 <button name="do" value="settz" data-icon="ok">$(_ 'Change')</button>
558 </fieldset>
560 <fieldset><legend>$(_ 'System time:')</legend>
561 $(date | sed 's|[0-9][0-9]:[0-9:]*|<span id="time">&</span>|')
562 <button name="do" value="rdate" data-icon="sync">$(_ 'Sync online')</button>
563 </fieldset>
565 <fieldset id="hwclock1"><legend>$(_ 'Hardware clock:')</legend>
566 $(hwclock -ur | sed 's|0.000000 seconds||')
567 <button name="do" value="hwclock" id="hwclock" data-icon="clock">$(_ 'Set hardware clock')</button>
568 </fieldset>
570 <fieldset><legend>$(_ 'Set date')</legend>
571 <input type="number" name="day" value="$(date +%d)" min="1" max="31" size="4" required/>
572 <select name="month" value="$(date +%m)">
573 $(for i in $(seq 12); do
574 sel=''; [ "$i" == "$(date +%-m)" ] && sel=' selected'
575 printf "<option value=\"%s\"$sel>%s</option>" $(date -d $i.01-01:01 '+%m %B')
576 done)
577 </select>
578 <input type="number" name="year" value="$(date +%Y)" min="2015" max="2030" size="6" required/>
579 - <input type="number" name="hour" value="$(date +%H)" min="0" max="23" size="4" required/><!--
580 -->:<input type="number" name="min" value="$(date +%M)" min="0" max="59" size="4" required/><!--
581 -->:<input type="number" name="sec" value="00" min="0" max="59" size="4" required/>
582 <button name="do" value="date" data-icon="ok">$(_ 'Set date')</button>
583 </fieldset>
584 </form>
585 </div>
587 <script type="text/javascript">
588 // Live time on page
589 Date.prototype.timeNow = function() {
590 return ((this.getHours() < 10)?"0":"") + this.getHours() + ":" + ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ":" + ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
591 }
592 setInterval(function(){document.getElementById('time').innerText = new Date().timeNow()}, 1000);
594 //document.getElementById('hwclock').disabled = 'disabled';
595 </script>
596 </section>
597 EOT
600 #
601 # Locale settings
602 #
603 cat <<EOT
604 <section>
605 <header id="locale">$(_ 'System language')</header>
606 <div>
607 <form>
608 EOT
609 # Check if a new locale was requested
610 if [ -n "$new_locale" ]; then
611 rm -rf /usr/lib/locale/$new_locale
612 localedef -i $new_locale -c -f UTF-8 \
613 /usr/lib/locale/$new_locale
614 # System configuration
615 echo "LANG=$new_locale" > /etc/locale.conf
616 echo "LC_ALL=$new_locale" >> /etc/locale.conf
617 msg warn "$(_ \
618 'You must logout and login again to your current session to use %s locale.' $new_locale)"
619 else
620 cat <<EOT
621 $(_ 'Current system locale:')
622 <strong>$(locale | grep LANG | cut -d= -f2)</strong>
623 <button name="locale" data-icon="locale">$(_ 'Change')</button>
624 EOT
625 fi
626 cat <<EOT
627 </div>
628 </form>
629 </section>
632 <section>
633 <header id="keymap">$(_ 'Keyboard layout')</header>
634 <div>
635 EOT
636 # Check if a new keymap was requested
637 if [ -n "$new_keymap" ]; then
638 echo "$new_keymap" > /etc/keymap.conf
639 if [ -x /bin/loadkeys ]; then
640 loadkeys $new_keymap
641 else
642 loadkmap < /usr/share/kmap/$new_keymap.kmap
643 fi
644 fi
646 keymap=$(cat /etc/keymap.conf)
647 _ 'Current console keymap: %s' $keymap
648 if [ -n "$keymap" ]; then
649 case "$keymap" in
650 fr_CH*)
651 keymap="ch" ;;
652 ru)
653 keymap="us,ru" ;;
654 slovene)
655 keymap=si ;;
656 *)
657 keymap=${keymap%-lat*}
658 keymap=${keymap%-abnt2} ;;
659 esac
660 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
661 cat <<EOT
662 <form id="settings"></form>
663 <form id="index" action="index.cgi"></form>
664 <br/>
665 $(_ 'Suggested keymap for Xorg:') $keymap
666 <button form="settings" name="apply_xorg_kbd" value="$keymap" data-icon="ok">$(_ 'Activate')</button>
667 <button form="index" name="file" value="$keyboard_config" data-icon="edit">$(_ 'Edit')</button>
668 <br/>
669 EOT
670 fi
671 cat <<EOT
672 <form>
673 $(_ 'Available keymaps:')
674 <select name="gen_keymap">
675 $(list_keymaps)
676 </select>
677 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
678 </form>
679 </div>
680 </section>
683 <section>
684 <header>$(_ 'Panel configuration')</header>
685 <div>
686 <form class="wide">
687 <fieldset><legend>$(_ 'Style:')</legend>
688 <select name="style">$(list_styles)</select>
689 <button data-icon="ok">$(_ 'Activate')</button>
690 </fieldset>
692 <fieldset><legend>$(_ 'Panel password:')</legend>
693 <input type="password" name="panel_pass"/>
694 <button data-icon="ok">$(_ 'Change')</button>
695 </fieldset>
696 </form>
698 <fieldset><legend>$(_ 'Configuration files:')</legend>
699 <button form="index" name="file" value="$CONFIG" data-icon="edit">$(_ 'Panel')</button>
700 <button form="index" name="file" value="$HTTPD_CONF" data-icon="edit">$(_ 'Server')</button>
701 </fieldset>
703 <p>$(_ 'TazPanel provides a debugging mode and page:')
704 <a href="index.cgi?debug">debug</a>
705 </p>
706 </div>
707 </section>
708 EOT
709 ;;
710 esac
712 xhtml_footer
713 exit 0