rev |
line source |
pankso@46
|
1 #!/bin/sh
|
pankso@46
|
2 #
|
pankso@46
|
3 # Hardware part of TazPanel - Devices, drivers, printing
|
pankso@46
|
4 #
|
al@419
|
5 # Copyright (C) 2011-2015 SliTaz GNU/Linux - BSD License
|
pankso@46
|
6 #
|
pankso@46
|
7
|
pankso@46
|
8 # Common functions from libtazpanel
|
pankso@46
|
9 . lib/libtazpanel
|
pankso@46
|
10 get_config
|
pascal@81
|
11 header
|
pankso@46
|
12
|
al@292
|
13 TITLE=$(gettext 'TazPanel - Hardware')
|
pankso@46
|
14
|
paul@385
|
15 # Call an optional module
|
al@426
|
16 lib() {
|
pascal@373
|
17 module=lib/$1
|
pascal@373
|
18 shift
|
pascal@373
|
19 [ -s $module ] && . $module "$@"
|
pascal@373
|
20 }
|
pascal@373
|
21
|
al@419
|
22
|
al@426
|
23 lsusb_table() {
|
al@419
|
24 cat <<EOT
|
al@419
|
25 <table class="wide zebra">
|
al@426
|
26 <thead>
|
al@426
|
27 <tr>
|
al@426
|
28 <td>$(gettext 'Bus')</td>
|
al@426
|
29 <td>$(gettext 'Device')</td>
|
al@426
|
30 <td>$(gettext 'ID')</td>
|
al@426
|
31 <td>$(gettext 'Name')</td>
|
al@426
|
32 </tr>
|
al@426
|
33 </thead>
|
al@363
|
34 <tbody>
|
al@363
|
35 EOT
|
al@363
|
36 lsusb | sed 's|^Bus \([0-9]*\)|<tr><td>\1</td>|;
|
al@363
|
37 s|</td> Device \([0-9]*\):|</td><td>\1</td>|;
|
al@363
|
38 s|</td> ID \([^:]*:[^ ]*\)|</td><td><a href="?lsusb=\1">\1</a></td>|;
|
al@363
|
39 s| |<td>|2;
|
al@363
|
40 s|.*$|\0</td></tr>|'
|
al@363
|
41 echo "</tbody></table>"
|
al@363
|
42 }
|
al@363
|
43
|
al@419
|
44
|
al@426
|
45 lspci_table() {
|
al@419
|
46 cat <<EOT
|
al@419
|
47 <table class="wide zebra">
|
al@363
|
48 <thead><tr><td>Slot</td><td>Device</td><td>Name</td></thead>
|
al@363
|
49 <tbody>
|
al@363
|
50 EOT
|
al@363
|
51 lspci | sed 's| |</td><td>|;
|
al@363
|
52 s|: |</td><td>|;
|
al@363
|
53 s|^\([^<]*\)|<a href="?lspci=\1">\1</a>|;
|
al@363
|
54 s|^.*$|<tr><td>\0</td></tr>|'
|
al@363
|
55 echo "</tbody></table>"
|
al@363
|
56 }
|
al@363
|
57
|
al@426
|
58
|
pankso@46
|
59 #
|
pankso@46
|
60 # Commands
|
pankso@46
|
61 #
|
pankso@46
|
62
|
pascal@81
|
63 case " $(GET) " in
|
pascal@81
|
64 *\ print\ *)
|
al@303
|
65 xhtml_header
|
al@419
|
66 echo "<h2>TODO</h2>"
|
al@419
|
67 ;;
|
al@419
|
68
|
al@419
|
69
|
psychomaniak@407
|
70 *\ tazx\ *)
|
psychomaniak@407
|
71 xhtml_header
|
al@419
|
72 cat <<EOT
|
psychomaniak@407
|
73 <pre>$(tazx auto)</pre>
|
psychomaniak@407
|
74 EOT
|
psychomaniak@407
|
75 ;;
|
al@419
|
76
|
al@419
|
77
|
pankso@242
|
78 *\ detect\ *)
|
pankso@242
|
79 # Front end for Tazhw
|
pankso@242
|
80 # TODO: Add button to detect webcam, etc. Like in tazhw box.
|
pankso@242
|
81 xhtml_header
|
al@419
|
82 cat <<EOT
|
al@419
|
83 <h2>$(gettext 'Detect hardware')</h2>
|
al@419
|
84 <p>$(gettext 'Detect PCI and USB hardware')</p>
|
al@303
|
85
|
al@419
|
86 <section>
|
al@426
|
87 <pre>$(tazhw detect-pci | sed 's|^>|\>|g')</pre>
|
al@426
|
88 <pre>$(tazhw detect-usb | sed 's|^>|\>|g')</pre>
|
al@419
|
89 </section>
|
pankso@242
|
90 EOT
|
al@303
|
91 ;;
|
al@419
|
92
|
al@419
|
93
|
pascal@81
|
94 *\ modules\ *|*\ modinfo\ *)
|
pankso@46
|
95 xhtml_header
|
al@419
|
96 cat <<EOT
|
al@419
|
97 <h2>$(gettext 'Kernel modules')</h2>
|
al@419
|
98
|
al@419
|
99 <form id="actions">
|
al@419
|
100 <input type="hidden" name="modules"/>
|
al@419
|
101 $(gettext 'Manage, search or get information about the Linux kernel modules')
|
al@419
|
102
|
al@419
|
103 <input type="search" name="search" class="float-right" placeholder="$(gettext 'Modules search')" results="5" autosave="modsearch" autocomplete="on"/>
|
al@419
|
104 </form>
|
pankso@46
|
105 EOT
|
pankso@66
|
106 # Request may be modinfo output that we want in the page itself
|
al@303
|
107 get_modinfo="$(GET modinfo)"
|
al@303
|
108 if [ -n "$get_modinfo" ]; then
|
al@419
|
109 cat <<EOT
|
al@419
|
110 <section>
|
al@419
|
111 <header>$(eval_gettext 'Detailed information for module: $get_modinfo')</header>
|
al@303
|
112
|
al@303
|
113 EOT
|
al@419
|
114 modinfo $get_modinfo | awk 'BEGIN{print "<table class=\"wide zebra\">"}
|
al@419
|
115 {
|
al@419
|
116 printf("<tr><td><b>%s</b></td>", $1)
|
al@419
|
117 $1=""; printf("<td>%s</td></tr>", $0)
|
al@419
|
118 }
|
al@419
|
119 END{print "</table></section>"}'
|
pascal@81
|
120 fi
|
al@419
|
121
|
pascal@81
|
122 if [ -n "$(GET modprobe)" ]; then
|
al@303
|
123 echo "<pre>$(modprobe -v $(GET modprobe))</pre>"
|
pascal@81
|
124 fi
|
pascal@81
|
125 if [ -n "$(GET rmmod)" ]; then
|
pascal@81
|
126 echo "Removing"
|
pascal@81
|
127 rmmod -w $(GET rmmod)
|
pascal@81
|
128 fi
|
al@303
|
129 get_search="$(GET search)"
|
al@303
|
130 if [ -n "$get_search" ]; then
|
al@303
|
131 eval_gettext 'Matching result(s) for: $get_search'
|
pascal@81
|
132 echo '<pre>'
|
pascal@81
|
133 modprobe -l | grep "$(GET search)" | while read line
|
pascal@81
|
134 do
|
pascal@81
|
135 name=$(basename $line)
|
pascal@81
|
136 mod=${name%.ko.gz}
|
al@406
|
137 echo "$(gettext 'Module:') <a href='?modinfo=$mod'>$mod</a>"
|
pascal@81
|
138 done
|
pascal@81
|
139 echo '</pre>'
|
pascal@81
|
140 fi
|
al@419
|
141 cat <<EOT
|
al@419
|
142 <section>
|
al@426
|
143 <table class="zebra">
|
al@419
|
144 <thead>
|
al@419
|
145 <tr>
|
al@419
|
146 <td>$(gettext 'Module')</td>
|
al@419
|
147 <td>$(gettext 'Description')</td>
|
al@419
|
148 <td>$(gettext 'Size')</td>
|
al@419
|
149 <td>$(gettext 'Used')</td>
|
al@419
|
150 <td>$(gettext 'by')</td>
|
al@419
|
151 </tr>
|
al@419
|
152 <thead>
|
al@419
|
153 <tbody>
|
pankso@46
|
154 EOT
|
pankso@46
|
155 # Get the list of modules and link to modinfo
|
al@419
|
156 lsmod | tail -n+2 | awk '{
|
al@419
|
157 gsub(",", " ", $4);
|
al@419
|
158 printf("<tr><td><a href=\"?modinfo=%s\">%s</a></td><td>", $1, $1);
|
al@419
|
159 system("modinfo -d " $1);
|
al@419
|
160 printf("</td><td>%s</td><td>%s</td><td>%s</td></tr>", $2, $3, $4);
|
al@419
|
161 }'
|
al@419
|
162 cat <<EOT
|
al@419
|
163 </thead>
|
al@419
|
164 </table>
|
al@419
|
165 </section>
|
pankso@46
|
166 EOT
|
al@419
|
167 ;;
|
al@419
|
168
|
al@419
|
169
|
al@363
|
170 *\ lsusb\ *)
|
al@363
|
171 xhtml_header
|
al@363
|
172 vidpid="$(GET lsusb)"
|
al@419
|
173 cat <<EOT
|
al@419
|
174 <h2>$(eval_gettext 'Information for USB Device $vidpid')</h2>
|
al@419
|
175
|
al@419
|
176 <p>$(gettext 'Detailed information about specified device.')</p>
|
al@419
|
177
|
al@419
|
178 <section>$(lsusb_table)</section>
|
al@426
|
179 EOT
|
al@426
|
180 [ "$vidpid" != 'lsusb' ] && cat <<EOT
|
al@419
|
181 <section>
|
al@426
|
182 <pre style="white-space: pre-wrap">$(lsusb -vd $vidpid | syntax_highlighter lsusb)</pre>
|
al@419
|
183 </section>
|
al@363
|
184 EOT
|
al@363
|
185 ;;
|
al@419
|
186
|
al@419
|
187
|
al@363
|
188 *\ lspci\ *)
|
al@363
|
189 xhtml_header
|
al@363
|
190 slot="$(GET lspci)"
|
al@419
|
191 cat <<EOT
|
al@419
|
192 <h2>$(eval_gettext 'Information for PCI Device $slot')</h2>
|
al@419
|
193
|
al@419
|
194 <p>$(gettext 'Detailed information about specified device.')</p>
|
al@419
|
195
|
al@419
|
196 <section>$(lspci_table)</section>
|
al@426
|
197 EOT
|
al@426
|
198 [ "$slot" != 'lspci' ] && cat <<EOT
|
al@419
|
199 <section>
|
al@426
|
200 <pre style="white-space: pre-wrap">$(lspci -vs $slot | syntax_highlighter lspci)</pre>
|
al@419
|
201 </section>
|
al@363
|
202 EOT
|
al@363
|
203 ;;
|
al@419
|
204
|
al@419
|
205
|
pankso@66
|
206 *)
|
pascal@217
|
207 [ -n "$(GET brightness)" ] &&
|
al@426
|
208 echo -n $(GET brightness) > /sys/devices/virtual/backlight/$(GET dev)/brightness
|
al@292
|
209
|
pankso@66
|
210 #
|
pankso@66
|
211 # Default to summary with mounted filesystem, loaded modules
|
pankso@66
|
212 #
|
pankso@66
|
213 xhtml_header
|
al@419
|
214 cat <<EOT
|
al@419
|
215 <h2>$(gettext 'Drivers & Devices')</h2>
|
al@419
|
216 <p>$(gettext 'Manage your computer hardware')</p>
|
al@419
|
217
|
al@419
|
218 <form><!--
|
al@419
|
219 --><button name="modules" data-icon="modules">$(gettext 'Kernel modules')</button><!--
|
al@419
|
220 --><button name="detect" data-icon="detect" >$(gettext 'Detect PCI/USB')</button><!--
|
al@419
|
221 --><button name="tazx" data-icon="tazx" >$(gettext 'Auto-install Xorg video driver')</button>
|
al@419
|
222 </form>
|
pascal@219
|
223
|
pascal@217
|
224 EOT
|
al@419
|
225
|
al@419
|
226
|
al@419
|
227 # Battery state
|
al@419
|
228 if [ -n "$(ls /proc/acpi/battery/*/info 2>/dev/null)" ]; then
|
al@419
|
229 cat <<EOT
|
al@419
|
230 <section>
|
al@419
|
231 <header>$(gettext 'Battery')</header>
|
al@419
|
232 <div>
|
al@419
|
233 <table class="wide">
|
al@419
|
234 EOT
|
pascal@219
|
235 for dev in /proc/acpi/battery/*; do
|
pascal@219
|
236 grep ^present $dev/info | grep -q yes || continue
|
al@419
|
237 design=$(sed '/design capacity:/!d; s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
|
al@419
|
238 remain=$(sed '/remaining capacity/!d; s/[^0-9]*\([0-9]*\).*/\1/' < $dev/state)
|
al@419
|
239 rate=$(sed '/present rate/!d; s/[^0-9]*\([0-9]*\).*/\1/' < $dev/state)
|
al@419
|
240 full=$(sed '/last full capacity/!d; s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
|
al@303
|
241 warning=$(sed '/design capacity warning/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
|
al@419
|
242 low=$(sed '/design capacity low/!d; s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
|
al@419
|
243 state=$(sed '/charging state/!d; s/\([^:]*:[ ]\+\)\([a-z]\+\)/\2/' < $dev/state)
|
al@303
|
244
|
al@303
|
245 rempct=$(( $remain * 100 / $full ))
|
al@419
|
246 cat <<EOT
|
al@419
|
247 <tr>
|
al@419
|
248 <td><span data-icon="battery">$(gettext 'Battery')</span>
|
al@419
|
249 $(grep "^battery type" $dev/info | sed 's/.*: *//')
|
al@419
|
250 $(grep "^design capacity:" $dev/info | sed 's/.*: *//') </td>
|
al@419
|
251 <td>$(gettext 'health') $(( (100*$full)/$design))%</td>
|
al@419
|
252 <td class="meter"><meter min="0" max="$full" value="$remain" low="$low"
|
al@419
|
253 high="$warning" optimum="$full"></meter>
|
al@419
|
254 <span>
|
pascal@219
|
255 EOT
|
al@303
|
256 case "$state" in
|
al@303
|
257 "discharging")
|
al@303
|
258 remtime=$(( $remain * 60 / $rate ))
|
al@303
|
259 remtimef=$(printf "%d:%02d" $(($remtime/60)) $(($remtime%60)))
|
al@303
|
260 eval_gettext 'Discharging $rempct% - $remtimef' ;;
|
al@303
|
261 "charging")
|
al@303
|
262 remtime=$(( ($full - $remain) * 60 / $rate ))
|
al@303
|
263 remtimef=$(printf "%d:%02d" $(($remtime/60)) $(($remtime%60)))
|
al@303
|
264 eval_gettext 'Charging $rempct% - $remtimef' ;;
|
al@303
|
265 "charged")
|
al@303
|
266 gettext 'Charged 100%' ;;
|
al@303
|
267 esac
|
al@419
|
268 cat <<EOT
|
al@419
|
269
|
al@419
|
270 </span>
|
al@419
|
271 </td>
|
al@419
|
272 </tr>
|
al@419
|
273 EOT
|
pascal@219
|
274 done
|
al@419
|
275 cat <<EOT
|
al@419
|
276 </table>
|
al@419
|
277 </div>
|
al@419
|
278 </section>
|
al@419
|
279 EOT
|
pascal@219
|
280 fi
|
al@303
|
281
|
al@419
|
282
|
al@419
|
283 # Thermal sensors
|
al@419
|
284 if [ -n "$(ls /sys/devices/virtual/thermal/*/temp 2>/dev/null)" ]; then
|
al@419
|
285 echo "<p><span data-icon=\"temperature\">$(gettext 'Temperature:')</span>"
|
pascal@262
|
286 for temp in /sys/devices/virtual/thermal/*/temp; do
|
al@419
|
287 awk '{ print $1/1000 "℃" }' < $temp
|
pascal@219
|
288 done
|
al@303
|
289 echo '</p>'
|
pascal@219
|
290 fi
|
al@303
|
291
|
al@419
|
292
|
al@419
|
293 # Brightness
|
al@419
|
294 if [ -n "$(ls /sys/devices/virtual/backlight/*/brightness 2>/dev/null)" ]; then
|
al@419
|
295 echo '<form>'
|
al@419
|
296 for dev in /sys/devices/virtual/backlight/*/brightness; do
|
pascal@262
|
297 name=$(echo $dev | sed 's|.*/backlight/\([^/]*\).*|\1|')
|
pascal@217
|
298 cat <<EOT
|
al@419
|
299 <input type="hidden" name="dev" value="$name"/>
|
al@419
|
300 <span data-icon="brightness">$(gettext 'Brightness')</span> \
|
pascal@263
|
301 $(sed 's/.*\.//;s/_*$//' < /sys/devices/virtual/backlight/$name/device/path):
|
al@419
|
302 <select name="brightness" onchange="submit();">
|
pascal@217
|
303 EOT
|
pascal@262
|
304 max=$(cat /sys/devices/virtual/backlight/$name/max_brightness)
|
pascal@262
|
305 for i in $(seq 0 $max); do
|
pascal@262
|
306 echo -n "<option value=\"$i\""
|
pascal@262
|
307 [ $i -eq $(cat /sys/devices/virtual/backlight/$name/actual_brightness) ] &&
|
pascal@262
|
308 echo -n " selected=\"selected\""
|
pascal@262
|
309 echo "> $(( (($i + 1) * 100) / ($max + 1) ))% </option>"
|
pascal@262
|
310 done
|
al@419
|
311 echo '</select>'
|
pascal@217
|
312 done
|
al@419
|
313 echo '</form>'
|
pascal@217
|
314 fi
|
pankso@152
|
315
|
al@363
|
316
|
al@419
|
317 cat <<EOT
|
al@419
|
318 <section>
|
al@419
|
319 <form action="#mount" class="wide">
|
al@419
|
320 <header id="disk">$(gettext 'Filesystem usage statistics')</header>
|
al@419
|
321 <div>
|
al@419
|
322 <pre>$(fdisk -l | fgrep Disk)</pre>
|
al@419
|
323 </div>
|
pankso@66
|
324 EOT
|
al@303
|
325
|
al@303
|
326
|
pankso@153
|
327 #
|
pascal@376
|
328 # Loop device management actions
|
pascal@376
|
329 #
|
pascal@376
|
330 device=$(GET loopdev)
|
pascal@376
|
331 lib crypto $device
|
pascal@376
|
332 case "$device" in
|
pascal@425
|
333 /dev/*loop*)
|
pascal@376
|
334 set -- $(losetup | grep ^$device:)
|
pascal@376
|
335 [ -n "$3" ] && losetup -d $device
|
pascal@376
|
336 ro=""
|
pascal@376
|
337 [ -n "$(GET readonly)" ] && ro="-r"
|
pascal@376
|
338 file="$(GET backingfile)"
|
pascal@376
|
339 [ -n "$file" ] && losetup -o $(GET offset) $ro $device $file
|
pascal@376
|
340 esac
|
al@419
|
341
|
al@419
|
342
|
pascal@376
|
343 #
|
al@303
|
344 # Disk stats and management (mount, umount, check)
|
pankso@153
|
345 #
|
pascal@344
|
346 device=$(GET device)
|
pascal@373
|
347 lib crypto $device
|
pascal@344
|
348 case "$device" in
|
pascal@344
|
349 *[\;\`\&\|\$]*) ;;
|
pascal@344
|
350 mount\ *)
|
pascal@375
|
351 ro=""
|
pascal@375
|
352 [ -n "$(GET readonly)" ] && ro="-r"
|
pascal@389
|
353 mntdir="$(GET mountpoint)"
|
pascal@389
|
354 [ -d "$mntdir" ] || mkdir -p "$mntdir"
|
pascal@389
|
355 $device $ro "$mntdir";;
|
pascal@344
|
356 umount\ *|swapon\ *|swapoff\ *)
|
pascal@344
|
357 $device ;;
|
pascal@344
|
358 esac
|
al@419
|
359 cat <<EOT
|
al@419
|
360 <table id="mount" class="zebra wide center">
|
al@303
|
361 EOT
|
pankso@153
|
362 df_thead
|
al@303
|
363 echo '<tbody>'
|
al@426
|
364 for fs in $(blkid | sort | sed 's/:.*//'); do
|
pascal@373
|
365 set -- $(df -h | grep "^$fs ")
|
pascal@343
|
366 size=$2
|
pascal@343
|
367 used=$3
|
pascal@343
|
368 av=$4
|
pascal@375
|
369 grep "^$fs " /proc/mounts | grep -q "[, ]ro[, ]" &&
|
pascal@375
|
370 av="<del>$av</del>"
|
pascal@343
|
371 pct=$5
|
pascal@343
|
372 mp=$6
|
al@419
|
373
|
al@419
|
374 # action
|
pascal@344
|
375 action="mount"
|
pascal@344
|
376 [ -n "$mp" ] && action="umount"
|
pascal@344
|
377 type=$(blkid $fs | sed '/TYPE=/!d;s/.*TYPE="\([^"]*\).*/\1/')
|
pascal@344
|
378 [ "$type" == "swap" ] && action="swapon"
|
pascal@344
|
379 if grep -q "^$fs " /proc/swaps; then
|
pascal@344
|
380 action="swapoff"
|
pascal@344
|
381 set -- $(grep "^$fs " /proc/swaps)
|
pascal@364
|
382 size=$(blk2h $(($3*2)))
|
pascal@364
|
383 used=$(blk2h $(($4*2)))
|
pascal@364
|
384 av=$(blk2h $((2*($3-$4))))
|
pascal@344
|
385 pct=$(((100*$4)/$3))%
|
pascal@344
|
386 mp=swap
|
pascal@344
|
387 fi
|
al@419
|
388
|
al@419
|
389 # size
|
pascal@364
|
390 [ -z "$size" ] &&
|
pascal@364
|
391 size="$(blk2h $(cat /sys/block/${fs#/dev/}/size /sys/block/*/${fs#/dev/}/size))"
|
al@419
|
392
|
al@419
|
393 # image
|
al@419
|
394 disktype="hdd"
|
al@419
|
395 case "$(cat /sys/block/${fs#/dev/}/removable 2>/dev/null ||
|
al@419
|
396 cat /sys/block/${fs:5:3}/removable 2>/dev/null)" in
|
al@419
|
397 1) disktype="removable" ;;
|
pascal@373
|
398 esac
|
al@419
|
399 case "$(cat /sys/block/${fs#/dev/}/ro 2>/dev/null ||
|
al@419
|
400 cat /sys/block/${fs:5:3}/ro 2>/dev/null)" in
|
al@419
|
401 1) disktype="cd" ;;
|
pascal@373
|
402 esac
|
al@419
|
403
|
al@419
|
404 cat <<EOT
|
al@419
|
405 <tr>
|
al@419
|
406 <td><input type="radio" name="device" value="$action $fs" id="${fs#/dev/}"/><!--
|
al@419
|
407 --><label for="${fs#/dev/}" data-icon="$disktype"> ${fs#/dev/}</label></td>
|
al@419
|
408 <td>$(blkid $fs | sed '/LABEL=/!d;s/.*LABEL="\([^"]*\).*/\1/')</td>
|
al@419
|
409 <td>$type</td>
|
al@419
|
410 <td>$size</td>
|
al@419
|
411 <td>$av</td>
|
pascal@343
|
412 EOT
|
pascal@343
|
413 if [ -n "$pct" ]; then
|
al@419
|
414 cat <<EOT
|
al@419
|
415 <td class="meter"><meter min="0" max="100" value="${pct%%%}" low="70"
|
al@419
|
416 high="90" optimum="10"></meter>
|
al@419
|
417 <span>$used - $pct</span>
|
al@419
|
418 </td>
|
pascal@343
|
419 EOT
|
pascal@343
|
420 else
|
al@419
|
421 cat <<EOT
|
al@419
|
422 <td> </td>
|
pascal@343
|
423 EOT
|
pascal@343
|
424 fi
|
al@419
|
425 cat <<EOT
|
al@419
|
426 <td>$mp</td>
|
al@419
|
427 <td>$(blkid $fs | sed '/UUID=/!d;s/.*UUID="\([^"]*\).*/\1/')</td>
|
al@419
|
428 </tr>
|
pankso@153
|
429 EOT
|
pankso@153
|
430 done
|
al@419
|
431 cat <<EOT
|
al@419
|
432 </tbody>
|
al@419
|
433 </table>
|
al@419
|
434 $(lib crypto input)
|
al@363
|
435
|
al@419
|
436 <footer>
|
al@419
|
437 <button type="submit">mount / umount</button> -
|
al@419
|
438 $(gettext 'new mount point:') <input type="text" name="mountpoint" value="/media/usbdisk"/> -
|
al@419
|
439 <input type="checkbox" name="readonly" id="ro"><label for="ro"> $(gettext 'read-only')</label>
|
al@419
|
440 </footer>
|
al@419
|
441 </form>
|
al@419
|
442 </section>
|
al@363
|
443 EOT
|
al@363
|
444
|
al@419
|
445
|
al@419
|
446 #
|
al@419
|
447 # /etc/fstab
|
al@419
|
448 #
|
al@419
|
449 cat <<EOT
|
al@419
|
450 <section>
|
al@426
|
451 <header>
|
al@426
|
452 $(gettext 'Filesystems table')
|
al@426
|
453 <form action="index.cgi">
|
al@426
|
454 <input type="hidden" name="file" value="/etc/fstab"/>
|
al@426
|
455 <button name="action" value="edit" data-icon="edit">$(gettext 'Edit')</button>
|
al@426
|
456 </form>
|
al@426
|
457 </header>
|
al@419
|
458 <table class="wide zebra center">
|
al@419
|
459 <thead>
|
al@419
|
460 <tr>
|
al@419
|
461 <td>$(gettext 'Disk')</td>
|
al@419
|
462 <td>$(gettext 'Mount point')</td>
|
al@419
|
463 <td>$(gettext 'Type')</td>
|
al@419
|
464 <td>$(gettext 'Options')</td>
|
al@419
|
465 <td>$(gettext 'Freq')</td>
|
al@419
|
466 <td>$(gettext 'Pass')</td>
|
al@419
|
467 </tr>
|
al@419
|
468 </thead>
|
al@419
|
469 <tbody>
|
al@419
|
470 EOT
|
al@419
|
471
|
al@419
|
472 grep -v '^#' /etc/fstab | awk '{
|
al@419
|
473 print "<tr><td>" $1 "</td><td>" $2 "</td><td>" $3 "</td><td>" $4
|
al@419
|
474 print "</td><td>" $5 "</td><td>" $6 "</td></tr>"
|
al@419
|
475 }
|
al@363
|
476 END{print "</tbody></table>"}'
|
al@363
|
477
|
al@419
|
478 cat <<EOT
|
al@419
|
479 </section>
|
al@419
|
480 EOT
|
al@363
|
481
|
al@363
|
482
|
al@419
|
483 #
|
al@419
|
484 # Loop device management GUI
|
al@419
|
485 #
|
al@419
|
486 cat <<EOT
|
al@419
|
487 <section>
|
al@419
|
488 <header>$(gettext 'Loop devices')</header>
|
al@419
|
489
|
al@419
|
490 <form action="#loop" class="wide">
|
al@419
|
491 <table id="loop" class="wide zebra">
|
al@419
|
492 <thead>
|
al@419
|
493 <tr>
|
al@419
|
494 <td>$(gettext 'Device')</td>
|
al@419
|
495 <td>$(gettext 'Backing file')</td>
|
al@419
|
496 <td>$(gettext 'Access')</td>
|
al@419
|
497 <td>$(gettext 'Offset')</td>
|
al@419
|
498 </tr>
|
al@419
|
499 </thead>
|
al@419
|
500 <tbody>
|
pascal@373
|
501 EOT
|
pascal@425
|
502 for devloop in $(ls /dev/*loop[0-9]*); do
|
al@419
|
503 loop="${devloop#/dev/}"
|
al@419
|
504 case "$(cat /sys/block/$loop/ro 2>/dev/null)" in
|
al@419
|
505 0) ro="$(gettext "read/write")" ;;
|
al@419
|
506 1) ro="$(gettext "read only")" ;;
|
pascal@373
|
507 *) ro="" ;;
|
pascal@373
|
508 esac
|
al@419
|
509 set -- $(losetup | grep ^$devloop:) ${ro// / }
|
al@419
|
510 cat <<EOT
|
al@419
|
511 <tr><td><input type="radio" name="loopdev" value="$devloop" id="$loop"/><!--
|
al@419
|
512 --><label for="$loop" data-icon="loopback">$loop</label></td>
|
al@419
|
513 <td>$3</td><td align="center">$4</td><td align="right">$2</td>
|
al@419
|
514 </tr>
|
pascal@373
|
515 EOT
|
pascal@373
|
516 done
|
al@419
|
517 cat <<EOT
|
al@419
|
518 </tbody>
|
al@419
|
519 </table>
|
al@419
|
520
|
pascal@373
|
521 $(lib crypto input)
|
al@419
|
522
|
al@419
|
523 <footer>
|
al@419
|
524 <button type="submit" data-icon="ok">$(gettext 'Setup')</button> -
|
al@419
|
525 $(gettext 'new backing file:') <input type="text" name="backingfile"/> -
|
al@419
|
526 $(gettext 'offset in bytes:') <input type="text" name="offset" value="0" size="8"/> -
|
al@419
|
527 <input type="checkbox" name="readonly" id="ro"/><label for="ro">$(gettext 'read only')</label>
|
al@419
|
528 </footer>
|
al@419
|
529 </form>
|
al@419
|
530 </section>
|
pascal@373
|
531 EOT
|
pascal@373
|
532
|
al@419
|
533
|
al@419
|
534 #
|
al@419
|
535 # System memory
|
al@419
|
536 #
|
al@419
|
537 mem_total=$(free -m | awk '$1 ~ "M" {print $2}')
|
al@419
|
538 mem_used=$((100 * $(free -m | awk '$1 ~ "+" {print $3}') / mem_total))
|
al@419
|
539 mem_buff=$((100 * $(free -m | awk '$1 ~ "M" {print $6}') / mem_total))
|
al@419
|
540 mem_free=$((100 - mem_used - mem_buff))
|
al@419
|
541
|
al@419
|
542 cat <<EOT
|
al@419
|
543 <section>
|
al@419
|
544 <header>$(gettext 'System memory')</header>
|
al@419
|
545
|
al@419
|
546 <div class="sysmem"><!--
|
al@419
|
547 --><span class="sysmem_used" style="width: ${mem_used}%" title="$(gettext 'Used')" ><span>${mem_used}%</span></span><!--
|
al@419
|
548 EOT
|
al@419
|
549 [ $mem_buff != 0 ] && cat <<EOT
|
al@419
|
550 --><span class="sysmem_buff" style="width: ${mem_buff}%" title="$(gettext 'Buffers')"><span>${mem_buff}%</span></span><!--
|
al@419
|
551 EOT
|
al@419
|
552 cat <<EOT
|
al@419
|
553 --><span class="sysmem_free" style="width: ${mem_free}%" title="$(gettext 'Free')" ><span>${mem_free}%</span></span><!--
|
al@419
|
554 --></div>
|
al@419
|
555
|
al@419
|
556 <table class="wide zebra center">
|
al@419
|
557 <thead>
|
al@419
|
558 <tr>
|
al@419
|
559 <td> </td>
|
al@419
|
560 <td>total</td>
|
al@419
|
561 <td>used</td>
|
al@419
|
562 <td>free</td>
|
al@419
|
563 <td>shared</td>
|
al@419
|
564 <td>buffers</td>
|
al@419
|
565 </tr>
|
al@419
|
566 </thead>
|
al@419
|
567 <tbody>
|
al@303
|
568 EOT
|
al@303
|
569
|
al@419
|
570 free -m | awk '
|
al@419
|
571 $1 ~ "M" {print "<tr><td>"$1"</td><td>"$2"</td><td>"$3"</td><td>"$4"</td><td>"$5"</td><td>"$6"</td></tr>"}
|
al@419
|
572 $1 ~ "+" {print "<tr><td>"$1 $2"</td><td></td><td>"$3"</td><td>"$4"</td><td></td><td></td></tr>"}
|
al@419
|
573 $1 ~ "S" {print "<tr><td>"$1"</td><td>"$2"</td><td>"$3"</td><td>"$4"</td><td></td><td></td></tr>"}'
|
al@303
|
574
|
al@419
|
575 cat <<EOT
|
al@419
|
576 </tbody>
|
al@419
|
577 </table>
|
al@419
|
578 </section>
|
al@419
|
579 EOT
|
al@303
|
580
|
al@419
|
581
|
al@419
|
582 #
|
al@419
|
583 # lspci and lsusb summary tables
|
al@419
|
584 #
|
al@419
|
585 cat <<EOT
|
al@419
|
586 <section>
|
al@419
|
587 <header>lspci</header>
|
al@419
|
588 $(lspci_table)
|
al@419
|
589 </section>
|
al@419
|
590
|
al@419
|
591
|
al@419
|
592 <section>
|
al@419
|
593 <header>lsusb</header>
|
al@419
|
594 $(lsusb_table)
|
al@419
|
595 </section>
|
al@303
|
596 EOT
|
al@419
|
597 ;;
|
pankso@46
|
598 esac
|
pankso@46
|
599
|
pankso@46
|
600 xhtml_footer
|
pankso@46
|
601 exit 0
|