rev |
line source |
pankso@46
|
1 #!/bin/sh
|
pankso@46
|
2 #
|
pankso@46
|
3 # Hardware part of TazPanel - Devices, drivers, printing
|
pankso@46
|
4 #
|
pankso@379
|
5 # Copyright (C) 2011-2014 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
|
pascal@373
|
15 # Call an optionnal module
|
pascal@373
|
16 lib()
|
pascal@373
|
17 {
|
pascal@373
|
18 module=lib/$1
|
pascal@373
|
19 shift
|
pascal@373
|
20 [ -s $module ] && . $module "$@"
|
pascal@373
|
21 }
|
pascal@373
|
22
|
al@363
|
23 lsusb_table()
|
al@363
|
24 {
|
al@363
|
25 cat << EOT
|
al@363
|
26 <table class="zebra outbox">
|
al@363
|
27 <thead><tr><td>Bus</td><td>Device</td><td>ID</td><td>Name</td></thead>
|
al@363
|
28 <tbody>
|
al@363
|
29 EOT
|
al@363
|
30 lsusb | sed 's|^Bus \([0-9]*\)|<tr><td>\1</td>|;
|
al@363
|
31 s|</td> Device \([0-9]*\):|</td><td>\1</td>|;
|
al@363
|
32 s|</td> ID \([^:]*:[^ ]*\)|</td><td><a href="?lsusb=\1">\1</a></td>|;
|
al@363
|
33 s| |<td>|2;
|
al@363
|
34 s|.*$|\0</td></tr>|'
|
al@363
|
35 echo "</tbody></table>"
|
al@363
|
36 }
|
al@363
|
37
|
al@363
|
38 lspci_table()
|
al@363
|
39 {
|
al@363
|
40 cat << EOT
|
al@363
|
41 <table class="zebra outbox">
|
al@363
|
42 <thead><tr><td>Slot</td><td>Device</td><td>Name</td></thead>
|
al@363
|
43 <tbody>
|
al@363
|
44 EOT
|
al@363
|
45 lspci | sed 's| |</td><td>|;
|
al@363
|
46 s|: |</td><td>|;
|
al@363
|
47 s|^\([^<]*\)|<a href="?lspci=\1">\1</a>|;
|
al@363
|
48 s|^.*$|<tr><td>\0</td></tr>|'
|
al@363
|
49 echo "</tbody></table>"
|
al@363
|
50 }
|
al@363
|
51
|
pankso@46
|
52 #
|
pankso@46
|
53 # Commands
|
pankso@46
|
54 #
|
pankso@46
|
55
|
pascal@81
|
56 case " $(GET) " in
|
pascal@81
|
57 *\ print\ *)
|
al@303
|
58 xhtml_header
|
al@303
|
59 echo "<h2>TODO</h2>" ;;
|
pankso@242
|
60 *\ detect\ *)
|
pankso@242
|
61 # Front end for Tazhw
|
pankso@242
|
62 # TODO: Add button to detect webcam, etc. Like in tazhw box.
|
pankso@242
|
63 xhtml_header
|
al@303
|
64 cat << EOT
|
pankso@242
|
65 <div id="wrapper">
|
al@303
|
66 <h2>$(gettext 'Detect hardware')</h2>
|
al@303
|
67 <p>$(gettext 'Detect PCI and USB hardware')</p>
|
pankso@242
|
68 </div>
|
al@303
|
69
|
al@303
|
70 <pre>$(tazhw detect-pci | syntax_highlighter sh)</pre>
|
al@303
|
71
|
al@303
|
72 <pre>$(tazhw detect-usb | syntax_highlighter sh)</pre>
|
pankso@242
|
73 EOT
|
al@303
|
74 ;;
|
pascal@81
|
75 *\ modules\ *|*\ modinfo\ *)
|
pankso@46
|
76 xhtml_header
|
pankso@46
|
77 cat << EOT
|
pankso@46
|
78 <div id="wrapper">
|
al@303
|
79 <h2>$(gettext 'Kernel modules')</h2>
|
al@303
|
80 <div class="float-right">
|
al@303
|
81 <form method="get" action="$SCRIPT_NAME">
|
al@303
|
82 <input type="hidden" name="modules" />
|
al@303
|
83 <input type="search" placeholder="$(gettext 'Modules search')" name="search" />
|
al@303
|
84 </form>
|
al@303
|
85 </div>
|
al@303
|
86 <p>$(gettext 'Manage, search or get information about the Linux kernel modules')</p>
|
pankso@46
|
87 </div>
|
pankso@46
|
88 EOT
|
pankso@66
|
89 # Request may be modinfo output that we want in the page itself
|
al@303
|
90 get_modinfo="$(GET modinfo)"
|
al@303
|
91 if [ -n "$get_modinfo" ]; then
|
al@303
|
92 cat << EOT
|
al@303
|
93 <strong>$(eval_gettext 'Detailed information for module: $get_modinfo')</strong>
|
al@303
|
94
|
al@303
|
95 <pre>$(modinfo $get_modinfo)</pre>
|
al@303
|
96 EOT
|
pascal@81
|
97 fi
|
pascal@81
|
98 if [ -n "$(GET modprobe)" ]; then
|
al@303
|
99 echo "<pre>$(modprobe -v $(GET modprobe))</pre>"
|
pascal@81
|
100 fi
|
pascal@81
|
101 if [ -n "$(GET rmmod)" ]; then
|
pascal@81
|
102 echo "Removing"
|
pascal@81
|
103 rmmod -w $(GET rmmod)
|
pascal@81
|
104 fi
|
al@303
|
105 get_search="$(GET search)"
|
al@303
|
106 if [ -n "$get_search" ]; then
|
al@303
|
107 eval_gettext 'Matching result(s) for: $get_search'
|
pascal@81
|
108 echo '<pre>'
|
pascal@81
|
109 modprobe -l | grep "$(GET search)" | while read line
|
pascal@81
|
110 do
|
pascal@81
|
111 name=$(basename $line)
|
pascal@81
|
112 mod=${name%.ko.gz}
|
al@303
|
113 echo "$(gettext 'Module:') <a href='$SCRIPT_NAME?modinfo=$mod'>$mod</a>"
|
pascal@81
|
114 done
|
pascal@81
|
115 echo '</pre>'
|
pascal@81
|
116 fi
|
pankso@46
|
117 cat << EOT
|
al@303
|
118 $(table_start)
|
pankso@46
|
119 <tr class="thead">
|
al@303
|
120 <td>$(gettext 'Module')</td>
|
al@303
|
121 <td>$(gettext 'Size')</td>
|
al@303
|
122 <td>$(gettext 'Used')</td>
|
al@303
|
123 <td>$(gettext 'by')</td>
|
pankso@46
|
124 </tr>
|
pankso@46
|
125 EOT
|
pankso@46
|
126 # Get the list of modules and link to modinfo
|
pankso@46
|
127 lsmod | grep ^[a-z] | while read MOD SIZE USED BY
|
pankso@46
|
128 do
|
pankso@46
|
129 cat << EOT
|
pankso@46
|
130 <tr>
|
pankso@46
|
131 <td><a href="$SCRIPT_NAME?modinfo=$MOD">$MOD</a></td>
|
pankso@46
|
132 <td>$SIZE</td>
|
pankso@46
|
133 <td>$USED</td>
|
al@303
|
134 <td>$(echo $BY | sed s/","/" "/g)</td>
|
pankso@46
|
135 </tr>
|
pankso@46
|
136 EOT
|
pankso@46
|
137 done
|
pankso@66
|
138 table_end ;;
|
al@363
|
139 *\ lsusb\ *)
|
al@363
|
140 xhtml_header
|
al@363
|
141 vidpid="$(GET lsusb)"
|
al@363
|
142 cat << EOT
|
al@363
|
143 <div id="wrapper">
|
al@363
|
144 <h2>$(eval_gettext 'Information for USB Device $vidpid')</h2>
|
al@363
|
145 <p>$(gettext 'Detailed information about specified device.')</p>
|
al@363
|
146 EOT
|
al@363
|
147 lsusb_table
|
al@363
|
148 cat << EOT
|
al@363
|
149 </div>
|
al@363
|
150 <pre>$(lsusb -vd $vidpid | syntax_highlighter lsusb)</pre>
|
al@363
|
151 EOT
|
al@363
|
152 ;;
|
al@363
|
153 *\ lspci\ *)
|
al@363
|
154 xhtml_header
|
al@363
|
155 slot="$(GET lspci)"
|
al@363
|
156 cat << EOT
|
al@363
|
157 <div id="wrapper">
|
al@363
|
158 <h2>$(eval_gettext 'Information for PCI Device $slot')</h2>
|
al@363
|
159 <p>$(gettext 'Detailed information about specified device.')</p>
|
al@363
|
160 EOT
|
al@363
|
161 lspci_table
|
al@363
|
162 cat << EOT
|
al@363
|
163 </div>
|
al@363
|
164 <pre>$(lspci -vs $slot | syntax_highlighter lspci)</pre>
|
al@363
|
165 EOT
|
al@363
|
166 ;;
|
pankso@66
|
167 *)
|
pascal@217
|
168 [ -n "$(GET brightness)" ] &&
|
pascal@262
|
169 echo -n $(GET brightness) > /sys/devices/virtual/backlight/$(GET dev)/brightness
|
al@292
|
170
|
pankso@66
|
171 #
|
pankso@66
|
172 # Default to summary with mounted filesystem, loaded modules
|
pankso@66
|
173 #
|
pankso@66
|
174 xhtml_header
|
pankso@66
|
175 cat << EOT
|
pankso@66
|
176 <div id="wrapper">
|
al@303
|
177 <h2>$(gettext 'Drivers & Devices')</h2>
|
al@303
|
178 <p>$(gettext 'Manage your computer hardware')</p>
|
pascal@219
|
179 </div>
|
pascal@219
|
180 <div>
|
pascal@219
|
181 <a class="button" href="$SCRIPT_NAME?modules">
|
al@303
|
182 <img src="$IMAGES/tux.png" />$(gettext 'Kernel modules')</a>
|
pankso@242
|
183 <a class="button" href="$SCRIPT_NAME?detect">
|
al@303
|
184 <img src="$IMAGES/monitor.png" />$(gettext 'Detect PCI/USB')</a>
|
pascal@219
|
185 </div>
|
pascal@219
|
186
|
pascal@217
|
187 EOT
|
pascal@219
|
188 if [ -n "$(ls /proc/acpi/battery/*/info 2> /dev/null)" ]; then
|
pascal@219
|
189 echo "<table>"
|
pascal@219
|
190 for dev in /proc/acpi/battery/*; do
|
pascal@219
|
191 grep ^present $dev/info | grep -q yes || continue
|
pascal@219
|
192 design=$(sed '/design capacity:/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
|
pascal@219
|
193 remain=$(sed '/remaining capacity/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/state)
|
pascal@219
|
194 rate=$(sed '/present rate/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/state)
|
pascal@219
|
195 full=$(sed '/last full capacity/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
|
al@303
|
196 warning=$(sed '/design capacity warning/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
|
al@303
|
197 low=$(sed '/design capacity low/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
|
al@303
|
198 state=$(sed '/charging state/!d;s/\([^:]*:[ ]\+\)\([a-z]\+\)/\2/' < $dev/state)
|
al@303
|
199
|
al@303
|
200 rempct=$(( $remain * 100 / $full ))
|
pascal@219
|
201 cat << EOT
|
pascal@219
|
202 <tr>
|
pascal@219
|
203 <td><img src="$IMAGES/battery.png" />
|
al@303
|
204 $(gettext 'Battery') $(grep "^battery type" $dev/info | sed 's/.*: *//')
|
pascal@219
|
205 $(grep "^design capacity:" $dev/info | sed 's/.*: *//') </td>
|
al@303
|
206 <td>$(gettext 'health') $(( (100*$full)/$design))%</td>
|
al@303
|
207 <td class="meter"><meter min="0" max="$full" value="$remain" low="$low"
|
al@303
|
208 high="$warning" optimum="$full"></meter>
|
al@303
|
209 <span>
|
pascal@219
|
210 EOT
|
al@303
|
211 case "$state" in
|
al@303
|
212 "discharging")
|
al@303
|
213 remtime=$(( $remain * 60 / $rate ))
|
al@303
|
214 remtimef=$(printf "%d:%02d" $(($remtime/60)) $(($remtime%60)))
|
al@303
|
215 eval_gettext 'Discharging $rempct% - $remtimef' ;;
|
al@303
|
216 "charging")
|
al@303
|
217 remtime=$(( ($full - $remain) * 60 / $rate ))
|
al@303
|
218 remtimef=$(printf "%d:%02d" $(($remtime/60)) $(($remtime%60)))
|
al@303
|
219 eval_gettext 'Charging $rempct% - $remtimef' ;;
|
al@303
|
220 "charged")
|
al@303
|
221 gettext 'Charged 100%' ;;
|
al@303
|
222 esac
|
al@303
|
223 echo '</span></td></tr>'
|
pascal@219
|
224 done
|
pascal@219
|
225 echo "</table>"
|
pascal@219
|
226 fi
|
al@303
|
227
|
pascal@262
|
228 if [ -n "$(ls /sys/devices/virtual/thermal/*/temp 2> /dev/null)" ]; then
|
al@303
|
229 echo -n '<p>'; gettext 'Temperature:'
|
pascal@262
|
230 for temp in /sys/devices/virtual/thermal/*/temp; do
|
pascal@262
|
231 awk '{ print $1/1000 }' < $temp
|
pascal@219
|
232 done
|
al@303
|
233 echo '</p>'
|
pascal@219
|
234 fi
|
al@303
|
235
|
pascal@262
|
236 if [ -n "$(ls /sys/devices/virtual/backlight/*/brightness 2> /dev/null)" ]; then
|
pascal@217
|
237 cat <<EOT
|
pascal@217
|
238 <form method="get" action="$SCRIPT_NAME">
|
pascal@217
|
239 EOT
|
pascal@262
|
240 for dev in /sys/devices/virtual/backlight/*/brightness ; do
|
pascal@262
|
241 name=$(echo $dev | sed 's|.*/backlight/\([^/]*\).*|\1|')
|
pascal@217
|
242 cat <<EOT
|
pascal@217
|
243 <input type="hidden" name="dev" value="$name" />
|
al@303
|
244 $(gettext 'Brightness') \
|
pascal@263
|
245 $(sed 's/.*\.//;s/_*$//' < /sys/devices/virtual/backlight/$name/device/path):
|
pascal@263
|
246 <select name="brightness" onchange="submit();">
|
pascal@217
|
247 EOT
|
pascal@262
|
248 max=$(cat /sys/devices/virtual/backlight/$name/max_brightness)
|
pascal@262
|
249 for i in $(seq 0 $max); do
|
pascal@262
|
250 echo -n "<option value=\"$i\""
|
pascal@262
|
251 [ $i -eq $(cat /sys/devices/virtual/backlight/$name/actual_brightness) ] &&
|
pascal@262
|
252 echo -n " selected=\"selected\""
|
pascal@262
|
253 echo "> $(( (($i + 1) * 100) / ($max + 1) ))% </option>"
|
pascal@262
|
254 done
|
pascal@217
|
255 cat <<EOT
|
pascal@217
|
256 </select>
|
pascal@217
|
257 EOT
|
pascal@217
|
258 done
|
pascal@217
|
259 cat << EOT
|
pascal@217
|
260 </form>
|
pascal@217
|
261 EOT
|
pascal@217
|
262 fi
|
pascal@217
|
263 cat << EOT
|
pankso@152
|
264
|
al@363
|
265
|
al@363
|
266 <h3 id="disk">$(gettext 'Filesystem usage statistics')</h3>
|
al@363
|
267
|
pankso@152
|
268 <pre>
|
al@363
|
269 $(fdisk -l | fgrep Disk)
|
al@363
|
270 </pre>
|
pankso@66
|
271 EOT
|
al@303
|
272
|
al@303
|
273
|
pankso@153
|
274 #
|
pascal@376
|
275 # Loop device management actions
|
pascal@376
|
276 #
|
pascal@376
|
277 device=$(GET loopdev)
|
pascal@376
|
278 lib crypto $device
|
pascal@376
|
279 case "$device" in
|
pascal@376
|
280 /dev/loop*)
|
pascal@376
|
281 set -- $(losetup | grep ^$device:)
|
pascal@376
|
282 [ -n "$3" ] && losetup -d $device
|
pascal@376
|
283 ro=""
|
pascal@376
|
284 [ -n "$(GET readonly)" ] && ro="-r"
|
pascal@376
|
285 file="$(GET backingfile)"
|
pascal@376
|
286 [ -n "$file" ] && losetup -o $(GET offset) $ro $device $file
|
pascal@376
|
287 esac
|
pascal@376
|
288 #
|
al@303
|
289 # Disk stats and management (mount, umount, check)
|
pankso@153
|
290 #
|
pascal@344
|
291 device=$(GET device)
|
pascal@373
|
292 lib crypto $device
|
pascal@344
|
293 case "$device" in
|
pascal@344
|
294 *[\;\`\&\|\$]*) ;;
|
pascal@344
|
295 mount\ *)
|
pascal@375
|
296 ro=""
|
pascal@375
|
297 [ -n "$(GET readonly)" ] && ro="-r"
|
pascal@375
|
298 $device $ro $(GET mountpoint);;
|
pascal@344
|
299 umount\ *|swapon\ *|swapoff\ *)
|
pascal@344
|
300 $device ;;
|
pascal@344
|
301 esac
|
al@303
|
302 cat << EOT
|
pascal@344
|
303 <form method="get" action="$SCRIPT_NAME#mount">
|
al@363
|
304 <table id="mount" class="zebra outbox nowrap">
|
al@303
|
305 EOT
|
pankso@153
|
306 df_thead
|
al@303
|
307 echo '<tbody>'
|
pascal@376
|
308 for fs in $(blkid | sed 's/:.*//')
|
pankso@153
|
309 do
|
pascal@373
|
310 set -- $(df -h | grep "^$fs ")
|
pascal@343
|
311 size=$2
|
pascal@343
|
312 used=$3
|
pascal@343
|
313 av=$4
|
pascal@375
|
314 grep "^$fs " /proc/mounts | grep -q "[, ]ro[, ]" &&
|
pascal@375
|
315 av="<del>$av</del>"
|
pascal@343
|
316 pct=$5
|
pascal@343
|
317 mp=$6
|
pascal@344
|
318 action="mount"
|
pascal@344
|
319 [ -n "$mp" ] && action="umount"
|
pascal@344
|
320 type=$(blkid $fs | sed '/TYPE=/!d;s/.*TYPE="\([^"]*\).*/\1/')
|
pascal@344
|
321 [ "$type" == "swap" ] && action="swapon"
|
pascal@344
|
322 if grep -q "^$fs " /proc/swaps; then
|
pascal@344
|
323 action="swapoff"
|
pascal@344
|
324 set -- $(grep "^$fs " /proc/swaps)
|
pascal@364
|
325 size=$(blk2h $(($3*2)))
|
pascal@364
|
326 used=$(blk2h $(($4*2)))
|
pascal@364
|
327 av=$(blk2h $((2*($3-$4))))
|
pascal@344
|
328 pct=$(((100*$4)/$3))%
|
pascal@344
|
329 mp=swap
|
pascal@344
|
330 fi
|
pascal@364
|
331 [ -z "$size" ] &&
|
pascal@364
|
332 size="$(blk2h $(cat /sys/block/${fs#/dev/}/size /sys/block/*/${fs#/dev/}/size))"
|
pascal@373
|
333 img="harddisk.png"
|
pascal@373
|
334 case "$(cat /sys/block/${fs#/dev/}/removable 2> /dev/null ||
|
pascal@373
|
335 cat /sys/block/${fs:5:3}/removable 2> /dev/null)" in
|
pascal@373
|
336 1) img="floppy.png" ;;
|
pascal@373
|
337 esac
|
pascal@373
|
338 case "$(cat /sys/block/${fs#/dev/}/ro 2> /dev/null ||
|
pascal@373
|
339 cat /sys/block/${fs:5:3}/ro 2> /dev/null)" in
|
pascal@373
|
340 1) img="tazlito.png" ;;
|
pascal@373
|
341 esac
|
pascal@373
|
342 [ -s ".$IMAGES/$img" ] || img="harddisk.png"
|
pascal@343
|
343 cat << EOT
|
pankso@153
|
344 <tr>
|
pascal@344
|
345 <td><input type="radio" name="device" value="$action $fs" />
|
pascal@373
|
346 <img src="$IMAGES/$img" />${fs#/dev/}</td>
|
pascal@343
|
347 <td>$(blkid $fs | sed '/LABEL=/!d;s/.*LABEL="\([^"]*\).*/\1/')</td>
|
pascal@344
|
348 <td>$type</td>
|
pankso@153
|
349 <td>$size</td>
|
pankso@153
|
350 <td>$av</td>
|
pascal@343
|
351 EOT
|
pascal@343
|
352 if [ -n "$pct" ]; then
|
pascal@343
|
353 cat << EOT
|
al@303
|
354 <td class="meter"><meter min="0" max="100" value="${pct%%%}" low="70"
|
al@303
|
355 high="90" optimum="10"></meter>
|
al@303
|
356 <span>$used - $pct</span>
|
al@303
|
357 </td>
|
pascal@343
|
358 EOT
|
pascal@343
|
359 else
|
pascal@343
|
360 cat << EOT
|
al@363
|
361 <td> </td>
|
pascal@343
|
362 EOT
|
pascal@343
|
363 fi
|
pascal@343
|
364 cat << EOT
|
pankso@153
|
365 <td>$mp</td>
|
pascal@344
|
366 <td>$(blkid $fs | sed '/UUID=/!d;s/.*UUID="\([^"]*\).*/\1/')</td>
|
pankso@153
|
367 </tr>
|
pankso@153
|
368 EOT
|
pankso@153
|
369 done
|
al@303
|
370 cat << EOT
|
al@303
|
371 </tbody>
|
al@303
|
372 </table>
|
pascal@373
|
373 $(lib crypto input)
|
pascal@344
|
374 <input type="submit" value="mount / umount" /> -
|
pascal@375
|
375 new mount point <input type=text" name="mountpoint" value="/media/usbdisk" /> -
|
pascal@375
|
376 <input type="checkbox" name="readonly"> read-only
|
pascal@344
|
377 </form>
|
al@363
|
378
|
al@363
|
379
|
pascal@345
|
380 <h3>$(gettext 'Filesystems table')</h3>
|
al@363
|
381 EOT
|
al@363
|
382
|
al@363
|
383 grep -v '^#' /etc/fstab | awk 'BEGIN{print "<table class=\"zebra outbox\">\
|
pascal@376
|
384 <thead><tr><td>$(gettext 'Disk')</td><td>$(gettext 'Mount point')</td><td>\
|
pascal@376
|
385 $(gettext 'Type')</td><td>$(gettext 'Options')</td><td>\
|
pascal@376
|
386 $(gettext 'Freq')</td><td>$(gettext 'Pass')</td></thead><tbody>"}\
|
pascal@376
|
387 {print "<tr><td>"$1"</td><td>"$2\
|
al@363
|
388 "</td><td>"$3"</td><td>"$4"</td><td>"$5"</td><td>"$6"</td></tr>"}
|
al@363
|
389 END{print "</tbody></table>"}'
|
al@363
|
390
|
al@363
|
391 cat << EOT
|
pascal@345
|
392 <a class="button" href="index.cgi?file=/etc/fstab&action=edit">
|
pascal@345
|
393 <img src="$IMAGES/edit.png" />$(gettext 'Manual Edit')</a>
|
al@363
|
394
|
al@363
|
395
|
pascal@373
|
396 <h3>$(gettext 'Loop devices')</h3>
|
pascal@373
|
397 EOT
|
pascal@373
|
398 #
|
pascal@376
|
399 # Loop device management gui
|
pascal@373
|
400 #
|
pascal@373
|
401 cat << EOT
|
pascal@373
|
402 <form method="get" action="$SCRIPT_NAME#loop">
|
pascal@373
|
403 <table id="loop" class="zebra outbox nowrap">
|
pascal@373
|
404 <thead>
|
pascal@373
|
405 <tr><td>Device</td><td>Backing file</td><td>Access</td><td>Offset</td></tr>
|
pascal@373
|
406 </thead>
|
pascal@373
|
407 <tbody>
|
pascal@373
|
408 EOT
|
pascal@373
|
409 for loop in $(ls /dev/loop[0-9]*); do
|
pascal@373
|
410 case "$(cat /sys/block/${loop#/dev/}/ro 2> /dev/null)" in
|
pascal@373
|
411 0) ro="read/write" ;;
|
pascal@373
|
412 1) ro="read only" ;;
|
pascal@373
|
413 *) ro="" ;;
|
pascal@373
|
414 esac
|
pascal@373
|
415 set -- $(losetup | grep ^$loop:) $ro
|
pascal@373
|
416 cat << EOT
|
pascal@373
|
417 <tr>
|
pascal@373
|
418 <td><input type="radio" name="loopdev" value="$loop" />
|
pascal@373
|
419 <img src="$IMAGES/harddisk.png" />${loop#/dev/}</td>
|
pascal@373
|
420 <td>$3</td><td align="center">$4</td><td align="right">$2</td>
|
pascal@373
|
421 </tr>
|
pascal@373
|
422 EOT
|
pascal@373
|
423 done
|
pascal@373
|
424 cat << EOT
|
pascal@373
|
425 </tbody>
|
pascal@373
|
426 </table>
|
pascal@373
|
427 $(lib crypto input)
|
pascal@373
|
428 <input type="submit" value="Setup" /> -
|
pascal@375
|
429 new backing file <input type="text" name="backingfile" /> -
|
pascal@373
|
430 offset in bytes <input type="text" name="offset" size="8" value="0" /> -
|
pascal@375
|
431 <input type="checkbox" name="readonly"> read-only
|
pascal@373
|
432 </form>
|
pascal@373
|
433 EOT
|
pascal@373
|
434
|
pascal@373
|
435 cat << EOT
|
al@363
|
436 <h3>$(gettext 'System memory')</h3>
|
al@303
|
437 EOT
|
al@303
|
438
|
al@363
|
439 echo "<table class=\"zebra outbox\"><thead><tr><td> </td><td>total</td>\
|
al@363
|
440 <td>used</td><td>free</td><td>shared</td><td>buffers</td></tr></thead><tbody>"
|
al@363
|
441 freem=$(free -m)
|
al@363
|
442 echo "$freem" | grep Mem: | awk '{print "<tr><td>"$1"</td><td>"$2"</td><td>"$3\
|
al@363
|
443 "</td><td>"$4"</td><td>"$5"</td><td>"$6"</td></tr>"}'
|
al@363
|
444 echo "$freem" | grep buffers: | awk '{print "<tr><td>"$1 $2"</td><td> </td>\
|
al@363
|
445 <td>"$3"</td><td>"$4"</td><td> </td><td> </td></tr>"}'
|
al@363
|
446 echo "$freem" | grep Swap: | awk '{print "<tr><td>"$1"</td><td>"$2"</td><td>"$3\
|
al@363
|
447 "</td><td>"$4"</td><td> </td><td> </td></tr></tbody></table>"}'
|
al@303
|
448
|
al@303
|
449 cat << EOT
|
al@303
|
450 <h3>lspci</h3>
|
al@363
|
451 $(lspci_table)
|
al@303
|
452
|
al@303
|
453 <h3>lsusb</h3>
|
al@363
|
454 $(lsusb_table)
|
al@303
|
455 EOT
|
al@363
|
456 ;;
|
pankso@46
|
457 esac
|
pankso@46
|
458
|
pankso@46
|
459 xhtml_footer
|
pankso@46
|
460 exit 0
|