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