tazpanel annotate hardware.cgi @ rev 303

3 weeks forging ;) Some bugs fixed, maybe all i18n improved (please, recheck 'po's!), couple of new features added... Enjoy!
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri May 04 13:00:43 2012 +0300 (2012-05-04)
parents 72e9955ebdff
children 3e9acc16f728
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@112 5 # Copyright (C) 2011 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
pankso@46 15 #
pankso@46 16 # Commands
pankso@46 17 #
pankso@46 18
pascal@81 19 case " $(GET) " in
pascal@81 20 *\ print\ *)
al@303 21 xhtml_header
al@303 22 echo "<h2>TODO</h2>" ;;
pankso@242 23 *\ detect\ *)
pankso@242 24 # Front end for Tazhw
pankso@242 25 # TODO: Add button to detect webcam, etc. Like in tazhw box.
pankso@242 26 xhtml_header
al@303 27 cat << EOT
pankso@242 28 <div id="wrapper">
al@303 29 <h2>$(gettext 'Detect hardware')</h2>
al@303 30 <p>$(gettext 'Detect PCI and USB hardware')</p>
pankso@242 31 </div>
al@303 32
al@303 33 <pre>$(tazhw detect-pci | syntax_highlighter sh)</pre>
al@303 34
al@303 35 <pre>$(tazhw detect-usb | syntax_highlighter sh)</pre>
pankso@242 36 EOT
al@303 37 ;;
pascal@81 38 *\ modules\ *|*\ modinfo\ *)
pankso@46 39 xhtml_header
pankso@46 40 cat << EOT
pankso@46 41 <div id="wrapper">
al@303 42 <h2>$(gettext 'Kernel modules')</h2>
al@303 43 <div class="float-right">
al@303 44 <form method="get" action="$SCRIPT_NAME">
al@303 45 <input type="hidden" name="modules" />
al@303 46 <input type="search" placeholder="$(gettext 'Modules search')" name="search" />
al@303 47 </form>
al@303 48 </div>
al@303 49 <p>$(gettext 'Manage, search or get information about the Linux kernel modules')</p>
pankso@46 50 </div>
pankso@46 51 EOT
pankso@66 52 # Request may be modinfo output that we want in the page itself
al@303 53 get_modinfo="$(GET modinfo)"
al@303 54 if [ -n "$get_modinfo" ]; then
al@303 55 cat << EOT
al@303 56 <strong>$(eval_gettext 'Detailed information for module: $get_modinfo')</strong>
al@303 57
al@303 58 <pre>$(modinfo $get_modinfo)</pre>
al@303 59 EOT
pascal@81 60 fi
pascal@81 61 if [ -n "$(GET modprobe)" ]; then
al@303 62 echo "<pre>$(modprobe -v $(GET modprobe))</pre>"
pascal@81 63 fi
pascal@81 64 if [ -n "$(GET rmmod)" ]; then
pascal@81 65 echo "Removing"
pascal@81 66 rmmod -w $(GET rmmod)
pascal@81 67 fi
al@303 68 get_search="$(GET search)"
al@303 69 if [ -n "$get_search" ]; then
al@303 70 eval_gettext 'Matching result(s) for: $get_search'
pascal@81 71 echo '<pre>'
pascal@81 72 modprobe -l | grep "$(GET search)" | while read line
pascal@81 73 do
pascal@81 74 name=$(basename $line)
pascal@81 75 mod=${name%.ko.gz}
al@303 76 echo "$(gettext 'Module:') <a href='$SCRIPT_NAME?modinfo=$mod'>$mod</a>"
pascal@81 77 done
pascal@81 78 echo '</pre>'
pascal@81 79 fi
pankso@46 80 cat << EOT
al@303 81 $(table_start)
pankso@46 82 <tr class="thead">
al@303 83 <td>$(gettext 'Module')</td>
al@303 84 <td>$(gettext 'Size')</td>
al@303 85 <td>$(gettext 'Used')</td>
al@303 86 <td>$(gettext 'by')</td>
pankso@46 87 </tr>
pankso@46 88 EOT
pankso@46 89 # Get the list of modules and link to modinfo
pankso@46 90 lsmod | grep ^[a-z] | while read MOD SIZE USED BY
pankso@46 91 do
pankso@46 92 cat << EOT
pankso@46 93 <tr>
pankso@46 94 <td><a href="$SCRIPT_NAME?modinfo=$MOD">$MOD</a></td>
pankso@46 95 <td>$SIZE</td>
pankso@46 96 <td>$USED</td>
al@303 97 <td>$(echo $BY | sed s/","/" "/g)</td>
pankso@46 98 </tr>
pankso@46 99 EOT
pankso@46 100 done
pankso@66 101 table_end ;;
pankso@66 102 *)
pascal@217 103 [ -n "$(GET brightness)" ] &&
pascal@262 104 echo -n $(GET brightness) > /sys/devices/virtual/backlight/$(GET dev)/brightness
al@292 105
pankso@66 106 #
pankso@66 107 # Default to summary with mounted filesystem, loaded modules
pankso@66 108 #
pankso@66 109 xhtml_header
pankso@66 110 cat << EOT
pankso@66 111 <div id="wrapper">
al@303 112 <h2>$(gettext 'Drivers &amp; Devices')</h2>
al@303 113 <p>$(gettext 'Manage your computer hardware')</p>
pascal@219 114 </div>
pascal@219 115 <div>
pascal@219 116 <a class="button" href="$SCRIPT_NAME?modules">
al@303 117 <img src="$IMAGES/tux.png" />$(gettext 'Kernel modules')</a>
pankso@242 118 <a class="button" href="$SCRIPT_NAME?detect">
al@303 119 <img src="$IMAGES/monitor.png" />$(gettext 'Detect PCI/USB')</a>
pascal@219 120 </div>
pascal@219 121
pascal@219 122 <div id="wrapper">
pascal@217 123 EOT
pascal@219 124 if [ -n "$(ls /proc/acpi/battery/*/info 2> /dev/null)" ]; then
pascal@219 125 echo "<table>"
pascal@219 126 for dev in /proc/acpi/battery/*; do
pascal@219 127 grep ^present $dev/info | grep -q yes || continue
pascal@219 128 design=$(sed '/design capacity:/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
pascal@219 129 remain=$(sed '/remaining capacity/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/state)
pascal@219 130 rate=$(sed '/present rate/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/state)
pascal@219 131 full=$(sed '/last full capacity/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
al@303 132 warning=$(sed '/design capacity warning/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
al@303 133 low=$(sed '/design capacity low/!d;s/[^0-9]*\([0-9]*\).*/\1/' < $dev/info)
al@303 134 state=$(sed '/charging state/!d;s/\([^:]*:[ ]\+\)\([a-z]\+\)/\2/' < $dev/state)
al@303 135
al@303 136 rempct=$(( $remain * 100 / $full ))
pascal@219 137 cat << EOT
pascal@219 138 <tr>
pascal@219 139 <td><img src="$IMAGES/battery.png" />
al@303 140 $(gettext 'Battery') $(grep "^battery type" $dev/info | sed 's/.*: *//')
pascal@219 141 $(grep "^design capacity:" $dev/info | sed 's/.*: *//') </td>
al@303 142 <td>$(gettext 'health') $(( (100*$full)/$design))%</td>
al@303 143 <td class="meter"><meter min="0" max="$full" value="$remain" low="$low"
al@303 144 high="$warning" optimum="$full"></meter>
al@303 145 <span>
pascal@219 146 EOT
al@303 147 case "$state" in
al@303 148 "discharging")
al@303 149 remtime=$(( $remain * 60 / $rate ))
al@303 150 remtimef=$(printf "%d:%02d" $(($remtime/60)) $(($remtime%60)))
al@303 151 eval_gettext 'Discharging $rempct% - $remtimef' ;;
al@303 152 "charging")
al@303 153 remtime=$(( ($full - $remain) * 60 / $rate ))
al@303 154 remtimef=$(printf "%d:%02d" $(($remtime/60)) $(($remtime%60)))
al@303 155 eval_gettext 'Charging $rempct% - $remtimef' ;;
al@303 156 "charged")
al@303 157 gettext 'Charged 100%' ;;
al@303 158 esac
al@303 159 echo '</span></td></tr>'
pascal@219 160 done
pascal@219 161 echo "</table>"
pascal@219 162 fi
al@303 163
pascal@262 164 if [ -n "$(ls /sys/devices/virtual/thermal/*/temp 2> /dev/null)" ]; then
al@303 165 echo -n '<p>'; gettext 'Temperature:'
pascal@262 166 for temp in /sys/devices/virtual/thermal/*/temp; do
pascal@262 167 awk '{ print $1/1000 }' < $temp
pascal@219 168 done
al@303 169 echo '</p>'
pascal@219 170 fi
al@303 171
pascal@262 172 if [ -n "$(ls /sys/devices/virtual/backlight/*/brightness 2> /dev/null)" ]; then
pascal@217 173 cat <<EOT
pascal@217 174 <form method="get" action="$SCRIPT_NAME">
pascal@217 175 EOT
pascal@262 176 for dev in /sys/devices/virtual/backlight/*/brightness ; do
pascal@262 177 name=$(echo $dev | sed 's|.*/backlight/\([^/]*\).*|\1|')
pascal@217 178 cat <<EOT
pascal@217 179 <input type="hidden" name="dev" value="$name" />
al@303 180 $(gettext 'Brightness') \
pascal@263 181 $(sed 's/.*\.//;s/_*$//' < /sys/devices/virtual/backlight/$name/device/path):
pascal@263 182 <select name="brightness" onchange="submit();">
pascal@217 183 EOT
pascal@262 184 max=$(cat /sys/devices/virtual/backlight/$name/max_brightness)
pascal@262 185 for i in $(seq 0 $max); do
pascal@262 186 echo -n "<option value=\"$i\""
pascal@262 187 [ $i -eq $(cat /sys/devices/virtual/backlight/$name/actual_brightness) ] &&
pascal@262 188 echo -n " selected=\"selected\""
pascal@262 189 echo "> $(( (($i + 1) * 100) / ($max + 1) ))% </option>"
pascal@262 190 done
pascal@217 191 cat <<EOT
pascal@217 192 </select>
pascal@217 193 EOT
pascal@217 194 done
pascal@217 195 cat << EOT
pascal@217 196 </form>
pascal@217 197 EOT
pascal@217 198 fi
pascal@217 199 cat << EOT
pankso@66 200 </div>
pankso@152 201
al@303 202 <h3>$(gettext 'Filesystem usage statistics')</h3>
pankso@152 203 <pre>
pankso@66 204 EOT
pankso@152 205 fdisk -l | fgrep Disk
pankso@66 206 echo '</pre>'
al@303 207
al@303 208
pankso@153 209 #
al@303 210 # Disk stats and management (mount, umount, check)
pankso@153 211 #
al@303 212 cat << EOT
al@303 213 <table class="zebra">
al@303 214 EOT
pankso@153 215 df_thead
al@303 216 echo '<tbody>'
pankso@153 217 df -h | grep ^/dev | while read fs size used av pct mp
pankso@153 218 do
pankso@153 219 cat << EOT
pankso@153 220 <tr>
pankso@190 221 <td><img src="$IMAGES/harddisk.png" />${fs#/dev/}</td>
al@303 222 <td>$(blkid -o value $fs | head -n1)</td>
al@303 223 <td>$(blkid -o value $fs | tail -n1)</td>
pankso@153 224 <td>$size</td>
pankso@153 225 <td>$av</td>
al@303 226 <td class="meter"><meter min="0" max="100" value="${pct%%%}" low="70"
al@303 227 high="90" optimum="10"></meter>
al@303 228 <span>$used - $pct</span>
al@303 229 </td>
pankso@153 230 <td>$mp</td>
pankso@153 231 </tr>
pankso@153 232 EOT
pankso@153 233 done
al@303 234 cat << EOT
al@303 235 </tbody>
al@303 236 </table>
al@303 237
al@303 238 EOT
al@303 239
al@303 240
al@303 241 cat << EOT
al@303 242 <h3>$(gettext 'System memory')</h3>
al@303 243 <pre>
al@303 244 EOT
pascal@219 245 free -m | sed \
pankso@152 246 -e s"#total.*\([^']\)#<span class='top'>\0</span>#"g \
pankso@152 247 -e s"#^[A-Z-].*:\([^']\)#<span class='sh-comment'>\0</span>#"g
al@303 248 cat << EOT
al@303 249 </pre>
al@303 250
al@303 251 <h3>lspci</h3>
al@303 252 <pre>
al@303 253 EOT
pascal@155 254 lspci -k | sed \
pascal@155 255 -e s"#^[0-9].*\([^']\)#<span class='diff-at'>\0</span>#" \
pascal@155 256 -e s"#use: \(.*\)#use: <span class='diff-rm'>\1</span>#"
al@303 257 cat << EOT
al@303 258 </pre>
al@303 259
al@303 260 <h3>lsusb</h3>
al@303 261 <pre>$(lsusb)</pre>
al@303 262 EOT
pankso@46 263 ;;
pankso@46 264 esac
pankso@46 265
pankso@46 266 xhtml_footer
pankso@46 267 exit 0