tazpanel annotate hardware.cgi @ rev 426

Code cleaning; add icons for packages and "toggle" to tazpanel.ttf; merge checkbox.js with tazpanel.js.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Mar 27 14:28:32 2015 +0200 (2015-03-27)
parents d6586247420a
children f377f6c7e32e
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|^>|\&gt;|g')</pre>
al@426 88 <pre>$(tazhw detect-usb | sed 's|^>|\&gt;|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 &amp; 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">&thinsp;${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">&thinsp;$(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// /&nbsp;}
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>&nbsp;</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