tazpanel annotate hardware.cgi @ rev 345

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