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