Editing Desktop Command Execution Widget scripts

Warning: You are not logged in. Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 18: Line 18:
Some scripts may create multiple lines which are too long to be displayed on a single line. The widget will not wrap these. In order to wrap them you can use the fold command:
Some scripts may create multiple lines which are too long to be displayed on a single line. The widget will not wrap these. In order to wrap them you can use the fold command:
   
   
-
  command-that-produces-long-lines | fold -s -w 100
+
  command-that-produces-long-lines | fold -s -w 80
The 80 in that instance is the maximum length of the line, which you can change. The -s option makes fold word wrap with spaces. More information is available from the [http://unixhelp.ed.ac.uk/CGI/man-cgi?fold fold man page].
The 80 in that instance is the maximum length of the line, which you can change. The -s option makes fold word wrap with spaces. More information is available from the [http://unixhelp.ed.ac.uk/CGI/man-cgi?fold fold man page].
Line 24: Line 24:
==Scripts to display information==
==Scripts to display information==
-
===Battery (via Nokia's BME) ===
+
===Battery===
All battery scripts are collected here. Pick the one which suits your needs. Examples of the output values are under each one.
All battery scripts are collected here. Pick the one which suits your needs. Examples of the output values are under each one.
Line 76: Line 76:
Output example: '''1200 mAh'''
Output example: '''1200 mAh'''
-
===Battery (via bq27200 chip) ===
 
-
 
-
==== Percentage, current and last full charge, with TTE or TTF as appropriate ====
 
-
 
-
 
-
Install this as e.g. /usr/local/bin/bqbattery, make it executable and point DCEW to it. This is designed to work whether or not you have the bq27x00_battery module loaded, but if you don't, then you'll need to install the i2c-tools package, and then chmod 4755 /usr/sbin/i2cget (meaning i2cget runs as root even when we invoke it as user from DCEW).
 
-
 
-
#!/bin/sh
 
-
 
-
if [ -r "/sys/class/power_supply/bq27200-0/capacity" ]; then
 
-
# We have bq27x00_battery loaded - get the values from /sys/class/power_supply/bq27200-0/
 
-
CSOC=`cat /sys/class/power_supply/bq27200-0/capacity`;
 
-
NAC=$((`cat /sys/class/power_supply/bq27200-0/charge_now` / 1000));
 
-
LMD=$((`cat /sys/class/power_supply/bq27200-0/charge_full` / 1000));
 
-
STATUS=`cat /sys/class/power_supply/bq27200-0/status`;
 
-
if [ "$STATUS" == "Discharging" ]; then
 
-
        TTF=65535
 
-
        TTE=$((`cat /sys/class/power_supply/bq27200-0/time_to_empty_avg` / 60));
 
-
else
 
-
        TTF=$((`cat /sys/class/power_supply/bq27200-0/time_to_full_now` / 60));
 
-
        TTE=65535
 
-
fi
 
-
else
 
-
# We don't have bq27x00_battery - get the values using i2cget
 
-
NAC=$(($(/usr/sbin/i2cget -y 2 0x55 0x0c w) * 3570 / 20 / 1000));
 
-
LMD=$(($(/usr/sbin/i2cget -y 2 0x55 0x12 w) * 3570 / 20 / 1000));
 
-
CSOC=$(($(/usr/sbin/i2cget -y 2 0x55 0x2c)));
 
-
TTF=$(($(/usr/sbin/i2cget -y 2 0x55 0x18 w)));
 
-
TTE=$(($(/usr/sbin/i2cget -y 2 0x55 0x16 w)));
 
-
fi
 
-
echo "$CSOC% ($NAC/$LMD mAh)"
 
-
if [ "$TTF" -eq 65535 ]; then
 
-
        echo "$TTE minutes to empty"
 
-
else
 
-
        echo "$TTF min to full battery"
 
-
fi
 
-
 
-
Output example:
 
-
 
-
'''88% (1269/1439 mAh)'''
 
-
 
-
'''37 min to full battery'''
 
===IP===
===IP===
Line 155: Line 113:
  wget -t 2 -T 3 -q -O - api.myiptest.com | awk -F "\"" '{print $4}'
  wget -t 2 -T 3 -q -O - api.myiptest.com | awk -F "\"" '{print $4}'
-
or another one, as api.myiptest.com sometimes is down
 
-
wget -t 2 -T 3 -q -O - checkip.dyndns.com | awk -F ": " '{print $2}' | awk -F "</" '{print $1}'
 
Output example: '''1.2.3.4'''
Output example: '''1.2.3.4'''
Line 169: Line 125:
Output example: '''1.2.3.4 (ISP @ City, CountryCode)'''
Output example: '''1.2.3.4 (ISP @ City, CountryCode)'''
 +
====Internal (LAN)====
====Internal (LAN)====
Line 196: Line 153:
  df -h /home/user/MyDocs | awk '/My/ {print $4}'
  df -h /home/user/MyDocs | awk '/My/ {print $4}'
 +
====Internal memory for application data (2GB /home) percentage used====
====Internal memory for application data (2GB /home) percentage used====
Line 222: Line 180:
  dbus-send --system --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_signal_strength | awk 'NR==2 {print $2" %"}'
  dbus-send --system --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_signal_strength | awk 'NR==2 {print $2" %"}'
 +
====Strength====
====Strength====
Line 247: Line 206:
===CPU frequency===
===CPU frequency===
-
  awk '{print $1/1000" MHz"}' /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
+
  awk '{print $1/1000" MHz"}' /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freqyk
====Usage of each frequency====
====Usage of each frequency====
  awk -v var=$(awk '{sum+=$2}; END {print sum};' /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state) '{arr[$3]=$2}{for (i in arr) {print $1/1000 " mhz " int(arr[i]*100/var)"%"}}' /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
  awk -v var=$(awk '{sum+=$2}; END {print sum};' /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state) '{arr[$3]=$2}{for (i in arr) {print $1/1000 " mhz " int(arr[i]*100/var)"%"}}' /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
-
 
-
The same, but without unused lines
 
-
 
-
awk -v var=$(awk '{sum+=$2}; END {print sum};' /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state) '{arr[$3]=$2}{for (i in arr) {print $1/1000 " mhz " int(arr[i]*100/var)"%"}}' /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state | grep -v " 0%"
 
===Memory usage===
===Memory usage===
Line 641: Line 596:
Warning: Consult forums before you try this, because currently DCEW executes some (all?) commands at startup. This will be optional in next version. Making a reboot button on current DCEW version could result in endless reboot loop.
Warning: Consult forums before you try this, because currently DCEW executes some (all?) commands at startup. This will be optional in next version. Making a reboot button on current DCEW version could result in endless reboot loop.
-
====A much safer way====
 
-
write a file with the following content
 
-
 
-
  #!/bin/sh
 
-
  zenity --question --title="reboot?" --text="are you sure ?"
 
-
  if [ $? -eq 0 ]; then
 
-
  echo "reboot" | sudo gainroot | echo ""
 
-
  fi
 
-
 
-
save it to '''/bin/ask-reboot'''
 
-
then execute :
 
-
  chmod +x ask-reboot
 
-
 
-
now add a new command widget with the command '''"ask-reboot"''' .
 
-
 
-
make sure you uncheck the folowing check boxes
 
-
* update on boot
 
-
* update when switched to desktop
 
===FM transmitter===
===FM transmitter===
Line 776: Line 713:
                 - search : print id of the given title"""
                 - search : print id of the given title"""
             print e
             print e
-
 
-
 
-
== Scripts to pull data from remote web sites ==
 
-
 
-
Although these are also scripts to display information, of a sort, I've created  a separate section for scripts that use DCEW to replace the use of a mobile web browser in certain situations. My first take on this is a set of scripts / widgets to enable me to access Transport for London's live bus travel information.
 
-
 
-
=== Transport for London - Live Bus Departures ===
 
-
 
-
==== Display departures for multiple local bus stops ====
 
-
 
-
Transport for London recently launched a mobile Web interface to their live bus departures information, and it's pretty good, but it can be a pain navigating to the bus stop that you want. This script uses DCEW to display data from multiple local bus stops, and to switch between them (by iterating over a list of them) on touching the widget.
 
-
#!/bin/sh
 
-
 
-
BUS_STOPS="50713 48598 53221 74407"
 
-
 
-
if [ -r "/tmp/.bus_stops" ]; then
 
-
BUS_STOPS=`cat /tmp/.bus_stops`;
 
-
else
 
-
echo $BUS_STOPS > /tmp/.bus_stops;
 
-
chmod 777 /tmp/.bus_stops
 
-
fi
 
-
 
-
LOOP=0
 
-
if [ -r "/tmp/.countdown" ]; then
 
-
LOOP=`cat /tmp/.countdown`;
 
-
fi
 
-
let LOOP=$LOOP+1;
 
-
STOPCOUNT=`echo $BUS_STOPS | wc -w`;
 
-
if [ "$LOOP" -gt "$STOPCOUNT" ]; then
 
-
  LOOP=1;
 
-
fi;
 
-
echo $LOOP >/tmp/.countdown
 
-
chmod 777 /tmp/.countdown
 
-
 
-
THISTIME=`echo $BUS_STOPS | cut -d" " -f $LOOP`;
 
-
 
-
lynx -dump -nolist http://m.countdown.tfl.gov.uk/arrivals/$THISTIME | grep -A10 "Buses dep" | sed -e "s/^  //g" | grep [a-z] | egrep -v "(Refresh|See\ map|Buses\ departing)"
 
-
 
-
==== Display departures for multiple lists of multiple bus stops ====
 
-
 
-
This second script, designed to be used with an additional DCEW on the same screen as the first, changes the list of bus stops associated with the script above and displays the place name with which they are associated. So, using this second widget, I can switch the first widget between the list of bus stops that I require in one place, and the list that I require in another. This limits the length of any individual list and will eventually let me access four or five lists of stops according to where I happen to be.
 
-
 
-
#!/bin/sh
 
-
 
-
Kingston_Vale="50713 48598 53221 74407"
 
-
Roehampton="75656 74598 71874"
 
-
 
-
BUS_STOPS="Kingston_Vale Roehampton";
 
-
 
-
LOOP=0
 
-
if [ -r "/tmp/.countdown2" ]; then
 
-
LOOP=`cat /tmp/.countdown2`;
 
-
fi
 
-
let LOOP=$LOOP+1;
 
-
STOPCOUNT=`echo $BUS_STOPS | wc -w`;
 
-
if [ "$LOOP" -gt "$STOPCOUNT" ]; then
 
-
  LOOP=1;
 
-
fi;
 
-
echo $LOOP >/tmp/.countdown2
 
-
chmod 777 /tmp/.countdown2
 
-
 
-
THISTIME=`echo $BUS_STOPS | cut -d" " -f $LOOP`;
 
-
 
-
eval STOPLIST=\$$THISTIME
 
-
echo $STOPLIST >/tmp/.bus_stops
 
-
chmod 777 /tmp/.bus_stops
 
-
echo $THISTIME | sed -e s/_/\ /g
 
-
 
-
==== Multiple lists of multiple stops with file-based configuration ====
 
-
 
-
This third script combines the functionality for both of the above widgets from a single script, to be installed as e.g. /usr/local/bin/countdown, and moves the bus stop configuration from variables to flat files, arranged by placename. It also adds some command-line functionality (not yet widgetised), which enables you to configure a given placename from the 5-digit code of a single bus stop.
 
-
 
-
#!/bin/sh
 
-
 
-
case $1 in
 
-
"--display")
 
-
# This mode is used by the main DCEW to display information about a bus stop.
 
-
echo "........................................................................................................................";
 
-
 
-
 
-
if [ -r "/tmp/.bus_stops" ]; then
 
-
BUS_STOPS=`cat /tmp/.bus_stops`;
 
-
else
 
-
BUS_STOPS=`cat /home/user/countdown/places/Kingston_Vale`;
 
-
echo $BUS_STOPS > /tmp/.bus_stops;
 
-
chmod 777 /tmp/.bus_stops
 
-
fi
 
-
LOOP=0
 
-
if [ -r "/tmp/.countdown" ]; then
 
-
LOOP=`cat /tmp/.countdown`;
 
-
fi
 
-
let LOOP=$LOOP+1;
 
-
STOPCOUNT=`echo $BUS_STOPS | wc -w`;
 
-
if [ "$LOOP" -gt "$STOPCOUNT" ]; then
 
-
  LOOP=1;
 
-
fi;
 
-
THISTIME=`echo $BUS_STOPS | cut -d" " -f $LOOP`;
 
-
LOCKED="";
 
-
if [ -r "/tmp/.countdownlock" ] && [ -r "/tmp/.laststop" ]; then
 
-
THISTIME=`cat /tmp/.laststop`;
 
-
LOOP=`cat /tmp/.countdown`;
 
-
LOCKED="- LOCKED";
 
-
fi;
 
-
echo $LOOP >/tmp/.countdown
 
-
chmod 777 /tmp/.countdown
 
-
 
-
 
-
 
-
lynx -connect_timeout=10 -dump -nolist http://m.countdown.tfl.gov.uk/arrivals/$THISTIME | grep -A10 "Buses dep" | sed -e "s/^  //g" | grep [a-z] | egrep -v "(Refresh|See\ map|Buses\ departing|Route)" | sed -e "s/Bus stop code //g" | fold -w 53
 
-
echo "........................................................................................................................";
 
-
echo "Stop $LOOP of $STOPCOUNT in `cat /tmp/.lastplace` ($THISTIME) $LOCKED";
 
-
echo $THISTIME > /tmp/.laststop
 
-
chmod 777 /tmp/.laststop
 
-
;;
 
-
 
-
"--switch")
 
-
# This mode can be used by a second DCEW to switch between lists of stops by place name
 
-
if [ -r "/tmp/.countdownlock" ] && [ -r "/tmp/.laststop" ]; then
 
-
rm -f /tmp/.countdownlock;
 
-
fi;
 
-
BUS_STOPS=`ls /home/user/countdown/places`;
 
-
LOOP=0
 
-
if [ -r "/tmp/.countdown2" ]; then
 
-
LOOP=`cat /tmp/.countdown2`;
 
-
fi
 
-
let LOOP=$LOOP+1;
 
-
STOPCOUNT=`echo $BUS_STOPS | wc -w`;
 
-
if [ "$LOOP" -gt "$STOPCOUNT" ]; then
 
-
  LOOP=1;
 
-
fi;
 
-
echo $LOOP >/tmp/.countdown2
 
-
chmod 777 /tmp/.countdown2
 
-
THISTIME=`echo $BUS_STOPS | cut -d" " -f $LOOP`;
 
-
STOPLIST=`cat /home/user/countdown/places/$THISTIME`;
 
-
echo $STOPLIST >/tmp/.bus_stops
 
-
chmod 777 /tmp/.bus_stops
 
-
echo 0 > /tmp/.countdown
 
-
chmod 777 /tmp/.countdown
 
-
echo $THISTIME | sed -e s/_/\ /g
 
-
echo $THISTIME | sed -e s/_/\ /g > /tmp/.lastplace
 
-
chmod 777 /tmp/.lastplace
 
-
;;
 
-
 
-
"--lock")
 
-
# This mode can be used by a third DCEW to lock the --display option to refresh only the current stop.
 
-
# Touch it again to have the --display option return to paging through stops in the local area.
 
-
if [ -r "/tmp/.countdownlock" ]; then
 
-
rm -f /tmp/.countdownlock
 
-
echo "next stop"
 
-
else
 
-
touch /tmp/.countdownlock
 
-
echo "refresh this stop"
 
-
fi
 
-
 
-
;;
 
-
 
-
"--save")
 
-
mkdir -p /home/user/countdown/places/
 
-
FILE=`echo "$2" | sed -e "s/ /_/g"`;
 
-
cat /tmp/.bus_stops > /home/user/countdown/places/$FILE
 
-
chown -R user /home/user/countdown/places
 
-
;;
 
-
 
-
"--near")
 
-
lynx -dump http://m.countdown.tfl.gov.uk/stopsNearStop/$2 | grep /arrivals/ | cut -d / -f 5 | while read stop; do out="$out $stop"; echo $out > /tmp/.out; done;
 
-
cat /tmp/.out > /tmp/.bus_stops
 
-
 
-
if [ ! -z "$3" ]; then
 
-
$0 --save "$3"
 
-
fi
 
-
 
-
;;
 
-
"--setup")
 
-
countdown --near 50713 "Kingston Vale"
 
-
countdown --near 75040 "Putney Bridge"
 
-
countdown --near 76581 "Putney Station"
 
-
countdown --near 48368 "Norbiton"
 
-
countdown --near 47140 "Kingston Eden Street"
 
-
countdown --near 50516 "Kingston Cromwell Rd"
 
-
countdown --near 59403 "Kingston Hill"
 
-
countdown --near 48680 "Roehampton"
 
-
countdown --near 53574 "Roehampton Vale"
 
-
countdown --near 57027 "Wandsworth"
 
-
countdown --near 47613 "Earlsfield"
 
-
chown -R user /home/user/countdown/places/*
 
-
;;
 
-
 
-
"--clear")
 
-
rm -rf /home/user/countdown/places/*
 
-
;;
 
-
 
-
"--delete-stop")
 
-
sed -i -e "s/`cat /tmp/.laststop`//g" /home/user/countdown/places/`cat /tmp/.lastplace|sed -e "s/ /_/g"`
 
-
cp /home/user/countdown/places/`cat /tmp/.lastplace|sed -e "s/ /_/g` /tmp/.bus_stops
 
-
echo `cat /tmp/.laststop`
 
-
;;
 
-
 
-
"--home-stop")
 
-
$0 --near `cat /tmp/.laststop` "`cat /tmp/.lastplace`"
 
-
cp /home/user/countdown/places/`cat /tmp/.lastplace|sed -e "s/ /_/g` /tmp/.bus_stops
 
-
echo `cat /tmp/.laststop`
 
-
;;
 
-
 
-
"--delete-place")
 
-
rm -f /home/user/countdown/places/`cat /tmp/.lastplace`
 
-
;;
 
-
 
-
"--edit-place")
 
-
sed -i "s/  / /g" /home/user/countdown/places/`cat /tmp/.lastplace|sed -e "s/ /_/g"`
 
-
leafpad /home/user/countdown/places/`cat /tmp/.lastplace|sed -e "s/ /_/g"`
 
-
cp /home/user/countdown/places/`cat /tmp/.lastplace|sed -e "s/ /_/g"` /tmp/.bus_stops
 
-
echo ""
 
-
;;
 
-
 
-
esac
 
-
 
-
 
-
The idea here is that I go to a new place, let's say Putney, and I get off at The Embankment, which turns out to be stop 75040. I can now run:
 
-
 
-
# countdown --near 75040
 
-
 
-
and override the current list of bus stops with the nine stops nearest to stop 75040, or, to store the configuration, I can run
 
-
 
-
# countdown --near 75040 "Putney"
 
-
 
-
and the script will save a new location called Putney which I can then switch using the previously described switching functionality via DCEW. All that needs to be done to configure the script for the places you visit is to pick a bus stop that is fairly central to that location and run with --near to store the configuration.
 

Learn more about Contributing to the wiki.


Please note that all contributions to maemo.org wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see maemo.org wiki:Copyrights for details). Do not submit copyrighted work without permission!


Cancel | Editing help (opens in new window)