tazpanel view hardware.cgi @ rev 364

Add TAZPANEL_DAEMON support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Jun 29 17:06:39 2013 +0200 (2013-06-29)
parents df2865290e55
children 0369a5cb81e3
line source
1 #!/bin/sh
2 #
3 # Hardware part of TazPanel - Devices, drivers, printing
4 #
5 # Copyright (C) 2011 SliTaz GNU/Linux - BSD License
6 #
8 # Common functions from libtazpanel
9 . lib/libtazpanel
10 get_config
11 header
13 TITLE=$(gettext 'TazPanel - Hardware')
15 lsusb_table()
16 {
17 cat << EOT
18 <table class="zebra outbox">
19 <thead><tr><td>Bus</td><td>Device</td><td>ID</td><td>Name</td></thead>
20 <tbody>
21 EOT
22 lsusb | sed 's|^Bus \([0-9]*\)|<tr><td>\1</td>|;
23 s|</td> Device \([0-9]*\):|</td><td>\1</td>|;
24 s|</td> ID \([^:]*:[^ ]*\)|</td><td><a href="?lsusb=\1">\1</a></td>|;
25 s| |<td>|2;
26 s|.*$|\0</td></tr>|'
27 echo "</tbody></table>"
28 }
30 lspci_table()
31 {
32 cat << EOT
33 <table class="zebra outbox">
34 <thead><tr><td>Slot</td><td>Device</td><td>Name</td></thead>
35 <tbody>
36 EOT
37 lspci | sed 's| |</td><td>|;
38 s|: |</td><td>|;
39 s|^\([^<]*\)|<a href="?lspci=\1">\1</a>|;
40 s|^.*$|<tr><td>\0</td></tr>|'
41 echo "</tbody></table>"
42 }
44 #
45 # Commands
46 #
48 case " $(GET) " in
49 *\ print\ *)
50 xhtml_header
51 echo "<h2>TODO</h2>" ;;
52 *\ detect\ *)
53 # Front end for Tazhw
54 # TODO: Add button to detect webcam, etc. Like in tazhw box.
55 xhtml_header
56 cat << EOT
57 <div id="wrapper">
58 <h2>$(gettext 'Detect hardware')</h2>
59 <p>$(gettext 'Detect PCI and USB hardware')</p>
60 </div>
62 <pre>$(tazhw detect-pci | syntax_highlighter sh)</pre>
64 <pre>$(tazhw detect-usb | syntax_highlighter sh)</pre>
65 EOT
66 ;;
67 *\ modules\ *|*\ modinfo\ *)
68 xhtml_header
69 cat << EOT
70 <div id="wrapper">
71 <h2>$(gettext 'Kernel modules')</h2>
72 <div class="float-right">
73 <form method="get" action="$SCRIPT_NAME">
74 <input type="hidden" name="modules" />
75 <input type="search" placeholder="$(gettext 'Modules search')" name="search" />
76 </form>
77 </div>
78 <p>$(gettext 'Manage, search or get information about the Linux kernel modules')</p>
79 </div>
80 EOT
81 # Request may be modinfo output that we want in the page itself
82 get_modinfo="$(GET modinfo)"
83 if [ -n "$get_modinfo" ]; then
84 cat << EOT
85 <strong>$(eval_gettext 'Detailed information for module: $get_modinfo')</strong>
87 <pre>$(modinfo $get_modinfo)</pre>
88 EOT
89 fi
90 if [ -n "$(GET modprobe)" ]; then
91 echo "<pre>$(modprobe -v $(GET modprobe))</pre>"
92 fi
93 if [ -n "$(GET rmmod)" ]; then
94 echo "Removing"
95 rmmod -w $(GET rmmod)
96 fi
97 get_search="$(GET search)"
98 if [ -n "$get_search" ]; then
99 eval_gettext 'Matching result(s) for: $get_search'
100 echo '<pre>'
101 modprobe -l | grep "$(GET search)" | while read line
102 do
103 name=$(basename $line)
104 mod=${name%.ko.gz}
105 echo "$(gettext 'Module:') <a href='$SCRIPT_NAME?modinfo=$mod'>$mod</a>"
106 done
107 echo '</pre>'
108 fi
109 cat << EOT
110 $(table_start)
111 <tr class="thead">
112 <td>$(gettext 'Module')</td>
113 <td>$(gettext 'Size')</td>
114 <td>$(gettext 'Used')</td>
115 <td>$(gettext 'by')</td>
116 </tr>
117 EOT
118 # Get the list of modules and link to modinfo
119 lsmod | grep ^[a-z] | while read MOD SIZE USED BY
120 do
121 cat << EOT
122 <tr>
123 <td><a href="$SCRIPT_NAME?modinfo=$MOD">$MOD</a></td>
124 <td>$SIZE</td>
125 <td>$USED</td>
126 <td>$(echo $BY | sed s/","/" "/g)</td>
127 </tr>
128 EOT
129 done
130 table_end ;;
131 *\ lsusb\ *)
132 xhtml_header
133 vidpid="$(GET lsusb)"
134 cat << EOT
135 <div id="wrapper">
136 <h2>$(eval_gettext 'Information for USB Device $vidpid')</h2>
137 <p>$(gettext 'Detailed information about specified device.')</p>
138 EOT
139 lsusb_table
140 cat << EOT
141 </div>
142 <pre>$(lsusb -vd $vidpid | syntax_highlighter lsusb)</pre>
143 EOT
144 ;;
145 *\ lspci\ *)
146 xhtml_header
147 slot="$(GET lspci)"
148 cat << EOT
149 <div id="wrapper">
150 <h2>$(eval_gettext 'Information for PCI Device $slot')</h2>
151 <p>$(gettext 'Detailed information about specified device.')</p>
152 EOT
153 lspci_table
154 cat << EOT
155 </div>
156 <pre>$(lspci -vs $slot | syntax_highlighter lspci)</pre>
157 EOT
158 ;;
159 *)
160 [ -n "$(GET brightness)" ] &&
161 echo -n $(GET brightness) > /sys/devices/virtual/backlight/$(GET dev)/brightness
163 #
164 # Default to summary with mounted filesystem, loaded modules
165 #
166 xhtml_header
167 cat << EOT
168 <div id="wrapper">
169 <h2>$(gettext 'Drivers &amp; Devices')</h2>
170 <p>$(gettext 'Manage your computer hardware')</p>
171 </div>
172 <div>
173 <a class="button" href="$SCRIPT_NAME?modules">
174 <img src="$IMAGES/tux.png" />$(gettext 'Kernel modules')</a>
175 <a class="button" href="$SCRIPT_NAME?detect">
176 <img src="$IMAGES/monitor.png" />$(gettext 'Detect PCI/USB')</a>
177 </div>
179 EOT
180 if [ -n "$(ls /proc/acpi/battery/*/info 2> /dev/null)" ]; then
181 echo "<table>"
182 for dev in /proc/acpi/battery/*; do
183 grep ^present $dev/info | grep -q yes || continue
184 design=$(sed '/design capacity:/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
185 remain=$(sed '/remaining capacity/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/state)
186 rate=$(sed '/present rate/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/state)
187 full=$(sed '/last full capacity/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
188 warning=$(sed '/design capacity warning/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
189 low=$(sed '/design capacity low/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
190 state=$(sed '/charging state/!d;s/\([^:]*:[ ]\+\)\([a-z]\+\)/\2/' < $dev/state)
192 rempct=$(( $remain * 100 / $full ))
193 cat << EOT
194 <tr>
195 <td><img src="$IMAGES/battery.png" />
196 $(gettext 'Battery') $(grep "^battery type" $dev/info | sed 's/.*: *//')
197 $(grep "^design capacity:" $dev/info | sed 's/.*: *//') </td>
198 <td>$(gettext 'health') $(( (100*$full)/$design))%</td>
199 <td class="meter"><meter min="0" max="$full" value="$remain" low="$low"
200 high="$warning" optimum="$full"></meter>
201 <span>
202 EOT
203 case "$state" in
204 "discharging")
205 remtime=$(( $remain * 60 / $rate ))
206 remtimef=$(printf "%d:%02d" $(($remtime/60)) $(($remtime%60)))
207 eval_gettext 'Discharging $rempct% - $remtimef' ;;
208 "charging")
209 remtime=$(( ($full - $remain) * 60 / $rate ))
210 remtimef=$(printf "%d:%02d" $(($remtime/60)) $(($remtime%60)))
211 eval_gettext 'Charging $rempct% - $remtimef' ;;
212 "charged")
213 gettext 'Charged 100%' ;;
214 esac
215 echo '</span></td></tr>'
216 done
217 echo "</table>"
218 fi
220 if [ -n "$(ls /sys/devices/virtual/thermal/*/temp 2> /dev/null)" ]; then
221 echo -n '<p>'; gettext 'Temperature:'
222 for temp in /sys/devices/virtual/thermal/*/temp; do
223 awk '{ print $1/1000 }' < $temp
224 done
225 echo '</p>'
226 fi
228 if [ -n "$(ls /sys/devices/virtual/backlight/*/brightness 2> /dev/null)" ]; then
229 cat <<EOT
230 <form method="get" action="$SCRIPT_NAME">
231 EOT
232 for dev in /sys/devices/virtual/backlight/*/brightness ; do
233 name=$(echo $dev | sed 's|.*/backlight/\([^/]*\).*|\1|')
234 cat <<EOT
235 <input type="hidden" name="dev" value="$name" />
236 $(gettext 'Brightness') \
237 $(sed 's/.*\.//;s/_*$//' < /sys/devices/virtual/backlight/$name/device/path):
238 <select name="brightness" onchange="submit();">
239 EOT
240 max=$(cat /sys/devices/virtual/backlight/$name/max_brightness)
241 for i in $(seq 0 $max); do
242 echo -n "<option value=\"$i\""
243 [ $i -eq $(cat /sys/devices/virtual/backlight/$name/actual_brightness) ] &&
244 echo -n " selected=\"selected\""
245 echo "> $(( (($i + 1) * 100) / ($max + 1) ))% </option>"
246 done
247 cat <<EOT
248 </select>
249 EOT
250 done
251 cat << EOT
252 </form>
253 EOT
254 fi
255 cat << EOT
258 <h3 id="disk">$(gettext 'Filesystem usage statistics')</h3>
260 <pre>
261 $(fdisk -l | fgrep Disk)
262 </pre>
263 EOT
266 #
267 # Disk stats and management (mount, umount, check)
268 #
269 device=$(GET device)
270 case "$device" in
271 *[\;\`\&\|\$]*) ;;
272 mount\ *)
273 $device $(GET mountpoint);;
274 umount\ *|swapon\ *|swapoff\ *)
275 $device ;;
276 esac
277 cat << EOT
278 <form method="get" action="$SCRIPT_NAME#mount">
279 <table id="mount" class="zebra outbox nowrap">
280 EOT
281 df_thead
282 echo '<tbody>'
283 blkid | sort | while read dev misc
284 do
285 fs=${dev%:}
286 set --
287 df | grep -q "^$fs " && set -- $(df -h | grep "^$fs ")
288 size=$2
289 used=$3
290 av=$4
291 pct=$5
292 mp=$6
293 action="mount"
294 [ -n "$mp" ] && action="umount"
295 type=$(blkid $fs | sed '/TYPE=/!d;s/.*TYPE="\([^"]*\).*/\1/')
296 [ "$type" == "swap" ] && action="swapon"
297 if grep -q "^$fs " /proc/swaps; then
298 action="swapoff"
299 set -- $(grep "^$fs " /proc/swaps)
300 size=$(blk2h $(($3*2)))
301 used=$(blk2h $(($4*2)))
302 av=$(blk2h $((2*($3-$4))))
303 pct=$(((100*$4)/$3))%
304 mp=swap
305 fi
306 [ -z "$size" ] &&
307 size="$(blk2h $(cat /sys/block/${fs#/dev/}/size /sys/block/*/${fs#/dev/}/size))"
308 cat << EOT
309 <tr>
310 <td><input type="radio" name="device" value="$action $fs" />
311 <img src="$IMAGES/harddisk.png" />${fs#/dev/}</td>
312 <td>$(blkid $fs | sed '/LABEL=/!d;s/.*LABEL="\([^"]*\).*/\1/')</td>
313 <td>$type</td>
314 <td>$size</td>
315 <td>$av</td>
316 EOT
317 if [ -n "$pct" ]; then
318 cat << EOT
319 <td class="meter"><meter min="0" max="100" value="${pct%%%}" low="70"
320 high="90" optimum="10"></meter>
321 <span>$used - $pct</span>
322 </td>
323 EOT
324 else
325 cat << EOT
326 <td> </td>
327 EOT
328 fi
329 cat << EOT
330 <td>$mp</td>
331 <td>$(blkid $fs | sed '/UUID=/!d;s/.*UUID="\([^"]*\).*/\1/')</td>
332 </tr>
333 EOT
334 done
335 cat << EOT
336 </tbody>
337 </table>
338 <input type="submit" value="mount / umount" /> -
339 new mount point <input type=text" name="mountpoint" value="/media/usbdisk" />
340 </form>
343 <h3>$(gettext 'Filesystems table')</h3>
344 EOT
346 grep -v '^#' /etc/fstab | awk 'BEGIN{print "<table class=\"zebra outbox\">\
347 <thead><tr><td>spec</td><td>file</td><td>vfstype</td><td>mntops</td><td>\
348 freq</td><td>passno</td></thead><tbody>"}{print "<tr><td>"$1"</td><td>"$2\
349 "</td><td>"$3"</td><td>"$4"</td><td>"$5"</td><td>"$6"</td></tr>"}
350 END{print "</tbody></table>"}'
352 cat << EOT
353 <a class="button" href="index.cgi?file=/etc/fstab&action=edit">
354 <img src="$IMAGES/edit.png" />$(gettext 'Manual Edit')</a>
357 <h3>$(gettext 'System memory')</h3>
358 EOT
360 echo "<table class=\"zebra outbox\"><thead><tr><td>&nbsp;</td><td>total</td>\
361 <td>used</td><td>free</td><td>shared</td><td>buffers</td></tr></thead><tbody>"
362 freem=$(free -m)
363 echo "$freem" | grep Mem: | awk '{print "<tr><td>"$1"</td><td>"$2"</td><td>"$3\
364 "</td><td>"$4"</td><td>"$5"</td><td>"$6"</td></tr>"}'
365 echo "$freem" | grep buffers: | awk '{print "<tr><td>"$1 $2"</td><td>&nbsp;</td>\
366 <td>"$3"</td><td>"$4"</td><td>&nbsp;</td><td>&nbsp;</td></tr>"}'
367 echo "$freem" | grep Swap: | awk '{print "<tr><td>"$1"</td><td>"$2"</td><td>"$3\
368 "</td><td>"$4"</td><td>&nbsp;</td><td>&nbsp;</td></tr></tbody></table>"}'
370 cat << EOT
371 <h3>lspci</h3>
372 $(lspci_table)
374 <h3>lsusb</h3>
375 $(lsusb_table)
376 EOT
377 ;;
378 esac
380 xhtml_footer
381 exit 0