#!/bin/ksh # # Battery frontend for APM -> to be used with laptops # # Version 1.0 # - Initial release # Version 1.1 # - Improved color routines # # Feb 20, 2005, (c) Peter van Eerten # Tested with Slackware 10.1 and GTK 2.6 # #------------------------------------------------------ # # Required tools: # -apm # -GNU Awk # -APM module loaded by kernel # #------------------------------------------------ CHECK function Check_Software { # Check on availability of AWK AWK=`which gawk 2>/dev/null` if [[ -z $AWK ]] then echo "GNU Awk not found on your system! Exiting..." exit 1 fi # Check on availability of apm APM=`which apm 2>/dev/null` if [[ -z $APM ]] then echo "apm not found on your system! Exiting..." exit 1 fi # Check if APM module is loaded MODULE=`dmesg 2>&1 | grep -i apm` if [[ -z $MODULE ]] then echo "Your kernel is currently not using APM!" exit 1 fi } #------------------------------------------------ GTK # Set color of progressbar function Create_Colors { # Determine color on basis of argument $1 if [[ $1 -lt 0.1 ]] then COLOR="65535, 0, 0" else COLOR="0, 52480, 0" fi # Parse resource for the progressbar - foregroundcolor STR="\"style \\\"mystyle\\\" { bg[NORMAL] = {30464, 34816, 39168} }\"" gtk "gtk_rc_parse_string $STR" STR="\"style \\\"mystyle\\\" { fg[PRELIGHT] = {0, 0, 0} }\"" gtk "gtk_rc_parse_string $STR" STR="\"style \\\"mystyle\\\" { bg[PRELIGHT] = {$COLOR} }\"" gtk "gtk_rc_parse_string $STR" STR="\"widget \\\"*.progress\\\" style \\\"mystyle\\\"\"" gtk "gtk_rc_parse_string $STR" gtk "gtk_rc_reset_styles $GTKSETTINGS" } #------------------------------------------------ GTK # Communication function; $1 contains the string to be sent function gtk { print -p $1 read -p RESULT } #------------------------------------------------ GUI function Build_Gui { # Setup environment for GTK server export LC_ALL=C export LD_LIBRARY_PATH=/usr/X11R6/lib # Start GTK-server in STDIN mode with low CPU usage nice -n 19 gtk-server stdin |& # Check GTK version gtk "gtk_check_version 2 4 0" if [[ -n $RESULT ]] then echo "Your GTK installation is too old!" echo "GTK version 2.4.0 or higher is required. Exiting..." gtk "gtk_exit 0" exit 1 fi # Define GUI - mainwindow gtk "gtk_init NULL NULL" gtk "gtk_window_new 0" WINDOW=$RESULT gtk "gtk_window_set_title $WINDOW \"Battery Watcher\"" gtk "gtk_window_set_position $WINDOW 1" gtk "gtk_widget_set_usize $WINDOW 250 32" # Set progressbar gtk "gtk_progress_bar_new" PROGRESS=$RESULT # Save info to set colors gtk "gtk_widget_set_name $PROGRESS progress" gtk "gtk_settings_get_default" GTKSETTINGS=$RESULT # Create layout gtk "gtk_container_add $WINDOW $PROGRESS" gtk "gtk_widget_show_all $WINDOW" } #------------------------------------------------ MAIN # Check available packages Check_Software # Create GUI Build_Gui # Initialize variables EVENT=0 # Mainloop while [[ $EVENT -ne $WINDOW ]] do # Get event gtk "gtk_server_callback update" EVENT=$RESULT # Get status STATUS=`$APM | $AWK '{for (a=1; a<NF+1; a++) {if ($a ~ "%") print $a}}'` VALUE=`$AWK -v VAR=$STATUS 'BEGIN {print (VAR+0)/100}'` # Update progressbar gtk "gtk_progress_bar_set_fraction $PROGRESS $VALUE" gtk "gtk_progress_bar_set_text $PROGRESS \"Power left: $STATUS\"" # Determine colors Create_Colors $VALUE # Sleep with low CPU load - use 'sleep' of GNU coreutils nice -n 19 /usr/bin/sleep 0.1 done # Exit GTK gtk "gtk_exit 0"