You are not logged in.
Thanks, I thought I used to know a better way to do that sort of thing…
#!/bin/zsh
function showhelp()
{
echo "fix.sh - script for attempting to fix completely hosed Arch installations."
echo
echo "-m Fix the pacman mirrorlist"
echo "-p Manually reinstall pacman"
echo "-u Update system"
echo "-i Reinstall all packages"
echo "-a Reinstall all foreign packages (using yaourt)"
echo "-s Sanity-check package lists before reinstalling using \$EDITOR (no effect if neither -i or -a are given)"
echo "-o Run pacman-optimize after reinstallations (no effect if neither -i or -a are given)"
echo
echo "Warning: All package installations are forced."
echo "Note: Arguments are processed in the order displayed above."
}
function fixmirrors()
{
echo "Fixing pacman mirrorlist..."
if [[ -d /etc/pacman.d ]]; then
sudo rm -f /etc/pacman.d/mirrorlist
else
sudo mkdir -p /etc/pacman.d/
fi
sudo echo "Server = ftp://ftp.archlinux.org/\$repo/os/`uname -m`" > /etc/pacman.d/mirrorlist
}
function fixpacman()
{
echo "Manually reinstalling pacman..."
wget ftp://ftp.archlinux.org/core/os/`uname -m`/core.db.tar.gz -O /tmp/core.db.tar.gz
pacmanver=`tar tzf /tmp/core.db.tar.gz | grep pacman | head -n1 | sed "s/\///"`
wget ftp://ftp.archlinux.org/core/os/`uname -m`/$pacmanver-`uname -m`.pkg.tar.gz -O /tmp/pacman.pkg.tar.gz
sudo tar xvfz /tmp/pacman.pkg.tar.gz /
sudo pacman -Sy pacman
}
function updatesystem()
{
sudo pacman -Syuf
}
function repackages()
{
echo "Generating package lists..."
pacman -Qqe | sort > /tmp/packages-qqe
pacman -Qqem | sort > /tmp/packages-qqem
pacman -Qqd | sort > /tmp/packages-qqd
pacman -Qqdm | sort > /tmp/packages-qqdm
comm -23 /tmp/packages-qqe /tmp/packages-qqem > /tmp/packages1
comm -23 /tmp/packages-qqd /tmp/packages-qqdm > /tmp/packages2
mv /tmp/packages1 /tmp/packages-qqe
mv /tmp/packages2 /tmp/packages-qqd
if $3; then
EDITOR=`[[ $EDITOR == "" ]] && echo "vim" || echo $EDITOR` # As much as I dislike it, vim *is* the one editor guaranteed to be everywhere...
$EDITOR /tmp/packages-qqe
$EDITOR /tmp/packages-qqd
$EDITOR /tmp/packages-qqem
$EDITOR /tmp/packages-qqdm
fi
sudo pacman -Syy
if $1; then
sudo pacman -Sf `cat /tmp/packages-qqe`
sudo pacman -Sf --asdeps `cat /tmp/packages-qqd`
fi
if $2; then
yaourt -Sf `cat /tmp/packages-qqem`
yaourt -Sf --asdeps `cat /tmp/packages-qqdm`
fi
if $4; then
sudo pacman-optimize
fi
}
installpackages=false
installaur=false
sanitycheck=false
optimize=false
for arg in "${*[@]}"; do
case $arg in
"-h")
showhelp;;
"-m")
fixmirrors;;
"-p")
fixpacman;;
"-u")
updatesystem;;
"-i")
installpackages=true;;
"-a")
installaur=true;;
"-s")
sanitycheck=true;;
"-o")
optimize=true;;
esac
done
if $installpackages || $installaur; then
repackages $installpackages $installaur $sanitycheck $optimize
fi
Last edited by Barrucadu (2009-12-28 11:11:50)
Offline
this checkes my log file for flexget. and displays any new downloads in dzen2
#!/bin/bash
FG='#ffffff'
BG='#000000'
while true ; do
showsadded=`/usr/bin/tail -n 4 /home/mark/showsadded.txt | cut -f1 -d'[' | cut$
printf "%s\n" "$showsadded "
sleep 3600
done | dzen2 -e '' -y '695' -h '20' -sa 'r' -ta c -fg $FG -bg $BG
and this one checks rss feeds every hour and puts the latest 4 feeds in dzen2 bar
#!/bin/bash
FG='#ffffff'
BG='#000000'
while true ; do
url=http://www.harrowtimes.co.uk/news/rss/ #URl of RSS Feed
lines=4 #Number of headlines
titlenum=2
newsrss=`curl -A "Mozilla/5.0" -s --connect-timeout 30 $url | grep -io "<title>[^<]*"| sed -e 's/<[^>]*>//'| head -n $(($lines + $titlenum)) | tail -n $(($lines))|tr '\n' ':'`
printf "%s\n" "$newsrss"
sleep 3600
done | dzen2 -e '' -y '885' -h '15' -sa 'r' -ta c -fg $FG -bg $BG -fn $FONT
Last edited by markp1989 (2009-12-29 00:24:31)
Desktop: E8400@4ghz - DFI Lanparty JR P45-T2RS - 4gb ddr2 800 - 30gb OCZ Vertex - Geforce 8800 GTS - 2*19" LCD
Server/Media Zotac GeForce 9300-ITX I-E - E5200 - 4gb Ram - 2* ecogreen F2 1.5tb - 1* wd green 500gb - PicoPSU 150xt - rtorrent - xbmc - ipazzport remote - 42" LCD
Offline
A little script I just wrote to run in cron hourly to start/stop daemons. I could add the start/stop commands to my crontab for everything, but I prefer having one start/stop script and a clear config file to edit.
I haven't actually tested this yet, but I think it'll work
/etc/cron.hourly/autodaemons.sh
#!/bin/zsh
# Start/stop daemons at certain times.
hour=`date +%H`
conf=/etc/autodaemons.conf
grep "^$hour" $conf | sed "s/^$hour//" > /tmp/actions
while read line; do
if echo $line | grep -q "start$"; then
daemon=`echo $line | sed "s/start$//" | tr -d "[:blank:]"`
echo "Starting $daemon ($hour)"
/etc/rc.d/$daemon start
elif echo $line | grep -q "stop$"; then
daemon=`echo $line | sed "s/stop$//" | tr -d "[:blank:]"`
echo "Stopping $daemon ($hour)"
/etc/rc.d/$daemon stop
else
echo "Cannot understand $line" 1>&2
fi
done < /tmp/actions
rm /tmp/actions
/etc/autodaemons.conf
# Autodaemon config file.
# See /etc/cron.hourly/autodaemons.sh
# Hour Daemon Action
# Taking advantage of Karoo free bandwidth:
00 rtorrent start
00 fttps start
08 rtorrent stop
08 fttps stop
Last edited by Barrucadu (2009-12-30 02:15:06)
Offline
Nice idea, Barrucadu.
My thought is, crontab has a nice time/frequency syntax already, why not take advantage of that?
The crontab:
0 0 * * * script start rtorrent fttps
0 8 * * * script stop rtorrent fttps
The script:
#!/bin/sh
action=$1; shift
for daemon in "$@"; do
/etc/rc.d/${daemon} ${action}
done
#You may want some sanity check.
Benefits:
1. You don't actually need an extra config file.
2. You don't call the script every hour with 22 of them doing nothing.
This silver ladybug at line 28...
Offline
A really simple script to mail the ipadress of a headless vboxserver on DHCP:
#!/bin/bash
# A small script to check ip for headless server on DHCP and mail it me.
IF=`ifconfig eth0 | awk '/inet addr:/ {print $2}'`
echo -e "To: my@email \nFrom: mybox \nSubject: ipadress myserver\n\n$IF" > /tmp/mail.txt
ssmtp my@email < /tmp/mail.txt
I have placed the script in /etc/rc.local on the server so it will send an email to me as soon as the server is up. Pretty nice thing to have when using a headless server on different locations using DHCP.
Last edited by Ashren (2009-12-30 09:35:48)
Offline
@Ashren, you probably could have written instead:
#!/bin/bash
ssmtp my@email < <(ifconfig eth0 | awk '/inet addr:/ {print "To: my@email \nFrom: mybox \nSubject: ipadress myserver\n\n" $2}')
Last edited by lolilolicon (2009-12-30 10:31:51)
This silver ladybug at line 28...
Offline
lolilolicon: Thanks for the oneliner.
Offline
Here's a script I made to update software stacks. I use it to update my git/svn pkgs in the right order, like building x264 before ffmpeg before mplayer.
It not overly robust, but it gets the job done.
#!/bin/bash
#
# non-root user for makepkg
user=matt
# root dir of stacks
stackdir="/media/disk/aur"
# prefix and suffix of stacks base directory
dirprefix=""
dirsuffix="-stack"
# colors
COLOR_R="\e[1;31m"
COLOR_G="\e[1;32m"
COLOR_B="\e[1;34m"
COLOR_Y="\e[1;33m"
COLOR_W="\e[1;37m"
COLOR_M="\e[1;35m"
COLOR_N="\e[0m"
# stacks
stacks=('mplayer' 'mpd' 'xorg')
stackmplayer=('x264-git' 'ffmpeg-svn' 'libdvdread-svn' 'libdvdnav-svn' 'mplayer-svn')
stackmpd=('mpd-git' 'libmpdclient-git' 'mpc-git' 'ncmpc-git')
stackxorg=('libdrm-git' 'glproto-git' 'dri2proto-git' 'mesa-git ati-dri-git libgl-git' 'xf86-video-ati-git')
# scrip variables
declare -a currentstack=
newest_pkg=
pkg_name=
# number of pkgs in split pkg
no_pkgs=
usage () {
echo "stackman usage:"
echo " stackman [options] [stack]"
echo ""
echo " -h|--help display this help message"
echo " -c|--check check stack directories exist"
echo " -u|--update update stack"
exit 0
}
# print error message $1: message, $2: indent
errormsg () {
echo -e "$2${COLOR_R}Error${COLOR_N}: $1"
exit 1
}
# print pass message $1: message, $2: indent
passmsg () {
echo -e "$2${COLOR_G}Pass${COLOR_N}: $1"
}
# print status message $1: message, $2: indent
statusmsg () {
echo -e "$2${COLOR_G}=>${COLOR_N} $1"
}
# get newest pkg of pkg_name in directory
get_newest_pkg () {
newest_pkg=$(ls -1 ${pkg_name}*.pkg.tar.gz | tail -n 1)
}
# update pkg using newest_pkg
update_pkg () {
pacman -U ${newest_pkg}
if [ $? == 0 ]; then
passmsg "${pkg_name} updated"
else
errormsg "${pkg_name} failed to update"
fi
}
# make pkg
make_pkg () {
# execute makepkg as non root user
statusmsg "Building ${pkg_name}"
su -c "makepkg -s" ${user}
# if [ $? == "0" ]; then
# passmsg "${pkg_name} built" " "
# else
# errormsg "${pkg_name} failed to build" " "
# exit 1
# fi
}
# cheack all directories of current stack exist
check_stack () {
set_stack $1
statusmsg "Checking directory for current stack:"
for i in $(seq 0 $((${#currentstack[@]} - 1)))
do
if [ $(echo ${currentstack[$i]} | awk '{print NF}') = "1" ]; then
dir=${currentstack[$i]}
else
dir=$(echo ${currentstack[$i]} | awk '{print $1}')
fi
if [ -d $dir ]; then
passmsg "${currentstack[$i]} found" " "
else
errormsg "${currentstack[$i]} not found" " "
fi
done
statusmsg "Stack complete"
}
# set current stack $1: stack
set_stack () {
statusmsg "Setting current stack:"
case $1 in
mplayer) currentstack=("${stackmplayer[@]}") ;;
mpd) currentstack=("${stackmpd[@]}") ;;
xorg) currentstack=("${stackxorg[@]}") ;;
*) errormsg "Stack not found"; exit 1 ;;
esac
statusmsg "Stack set to $1"
}
# update all pkgs in stack
update_stack () {
# check script is running as root
check_id
# set stack and check directories exist
set_stack $1
cd ${stackdir}/${dirprefix}${1}${dirsuffix}/ || errormsg "Directory doesn't exist..."
check_stack $1
# start update
statusmsg "Updating stack in 5 seconds..."
statusmsg "Press C^c to exit"
sleep 5
for i in $(seq 0 $((${#currentstack[@]} - 1)))
do
# determine if pkg is a split pkg
no_pkgs=$(echo ${currentstack[$i]} | awk '{print NF}')
# if not a split pkg
if [ $no_pkgs = "1" ]; then
# make and install pkg
pkg_name=${currentstack[$i]}
cd ${pkg_name}
make_pkg
get_newest_pkg
update_pkg
cd ..
# if a split pkg
else
# make base pkg
pkg_name=$(echo ${currentstack[$i]} | awk '{print $1}')
cd ${pkg_name}
make_pkg
for j in $(seq 1 ${no_pkg})
do
# install chosen pkgs
pkg_name=$(echo ${currentstack[$i]} | awk '{print $j}')
get_newest_pkg
update_pkg
done
cd ..
fi
done
statusmsg "Stack updated."
}
# check user id
check_id () {
statusmsg "Checking user id..."
if [ $(id -u) != "0" ]; then
errormsg "You must be root to run this!"
else
passmsg "Running as root"
fi
}
### Start ###
case $1 in
-c|--check) check_stack $2 ;;
-u|--update) update_stack $2 ;;
-h|--help|*) usage ;;
esac
Offline
i'm always browser-hopping, it seems.. so i've bound this script to alt+w in wmii so i can choose my browser and the supply a URL through dmenu.
#!/bin/sh
BROWSER=`cat $HOME/.browsers | dmenu`
if [ $BROWSER == "w3m" -o $BROWSER == 'elinks' ]
then
BROWSER="xterm -e $BROWSER"
fi
URL=`echo "" | dmenu`
eval "$BROWSER $URL"
(.browsers is just a new-line serparated list of browsers)
I've seen young people waste their time reading books about sensitive vampires. It's kinda sad. But you say it's not the end of the world... Well, maybe it is!
Offline
contoggle - A BASH script to automate running and display of conky configuration files
I wanted to create a way to toggle conky on/off, as well as automate the display of different conky configuration files. So I wrote 'contoggle' and set up keyboard hotkeys to call the functions.
SYNTAX:
contoggle on Start conky (loads the last used config file)
contoggle off Kill conky
contoggle toggle Toggle conky on/off
contoggle next Load the next config file in $MODES array
contoggle prev Load the previous config file in $MODES array
USAGE NOTES:
1) All conky config files handled by this script need to have the naming convention .conky_<name>
2) The $CONKYDIR variable needs to be set to the directory where you store your configuration files for conky.
3) Populate the $MODES array with each <name> you appended to the config files. Example: If your config file is named '.conky_systeminfo', you add "systeminfo" to the array.
BUGS, WARNINGS and HELP:
1) I just finished the script this morning, so haven't had much time to play around with it. It seems to work quite well, but I have had a couple instances where calling 'next' and 'prev' got stuck toggling between two config files instead of the seven I have listed in my $MODES array. I also had the contoggle script and several of the config files open for editing at the time, so that may have been the cause. Now that I think about it, it hasn't happened since I stopped editing.
2) If you do play with this, please keep an eye out for that issue and any other anomalies you come across. As always, Use at your own risk!
3) If you find any bugs or make improvements to the script, please send me a message so I can check it out.
OTHER:
This script was somewhat thrown together, so there are probably a thousand improvements that could be made to the code. Please feel free to message me or post here any improvements that can be made. Please be specific when making suggestions (Don't say: "You should do it this way" Say: "You should do it this way because..." Don't be shy.
#!/bin/bash
# CONKYDIR is the directory that holds conky configuration files
# used by this script
CONKYDIR="/home/munky/";
# MODES is a list of different conky configurations
# EXAMPLE: MODES=( "network" "system" ) will toggle conky files
# with the naming scheme $CONKYDIR/.conky_network and $CONKYDIR/.conky_system
MODES=( "network" "disks" "audacious" "power" "sysinfo" "cpuinfo" "meminfo" )
# MODE_LAST is the last mode that was assigned by this script
# It will also be the default conky file loaded if you first start
# conky through this script with the 'on' argument
MODE_LAST=3;
# Return the next mode index
function Next() {
if [ ${1} == $((${#MODES[@]}-1)) ]; then
# if current is the last mode, next will be 0
next=0;
else
# else increment
next=$(($1+1));
fi
return ${next}
}
# Return the previous mode index
function Prev() {
if [ ${1} == 0 ]; then
# if current is the first mode, next will be last
prev=$((${#MODES[@]}-1));
else
# else decrement
prev=$(($1-1));
fi
return ${prev}
}
# Start conky with the passed config file
function On() {
conky -c ${CONKYDIR}.conky_${1} &
}
# Kill all running instances of conky
function Off() {
killall conky 1> /dev/null
}
# Toggle conky on/off
function Toggle() {
# check if any instances of conky are running
running=$(ps -C conky | grep -c conky);
# if conky is running
if [ ${running} -gt 0 ]; then
# kill it
Off
else
# else start it, using last used mode
On ${MODES[${MODE_LAST}]};
fi
}
# Return the currently running mode
function GetCurrentMode() {
# check which mode is running
mode=$(ps x -C conky | grep ".conky_" | cut -f2 -d "_")
counter=0
# cycle through available modes
for i in ${MODES[@]};
do
# test if this is the current mode
if [[ "${i}" == "${mode}" ]]; then
# if it is, return
return ${counter};
break;
else
# if it isn't, increment
counter=$[$counter+1]
fi
done
}
function SaveMode() {
# save the new mode as MODE_LAST
sed -i "0,/MODE_LAST=.*/s//MODE_LAST=${1};/" ${2};
}
# This is where the script starts running
# and parses the passed argument
case ${1} in
'on')
On ${MODES[${MODE_LAST}]} ;;
'off')
Off ;;
'toggle')
Toggle ;;
'next')
GetCurrentMode
Next $?
next=$?
Off
On ${MODES[${next}]}
SaveMode ${next} ${0} ;;
'prev')
GetCurrentMode
Prev $?
prev=$?
Off
On ${MODES[${prev}]}
SaveMode ${prev} ${0} ;;
*) echo "Unknown argument '${1}'" ;;
esac
Thanks in advance for any input you have, and hopefully someone will find this useful.
Munky
If the advice you're given in this forum solves your issue, please mark the post as [SOLVED] in consideration to others.
"More than any time in history mankind faces a crossroads. One path leads to despair and utter hopelessness, the other to total extinction.
Let us pray that we have the wisdom to choose correctly." -- Woody Allen
Offline
so i've been using a rule from our udev wiki to automount my usb drives under /media and it's great. i ran into an issue while partitionaing a drive, and decided i needed a quick/easy way to turn this feature on and off. by removing or restoring this file under /etc/udev/rules.d, i've effectively achieved that, so why not script it?
pass 'on', 'off', or nothing to just see the current state.
here you are:
#!/bin/bash
#
# pbrisbin 2009
#
# http://pbrisbin.com:8080/bin/automount
#
# just moves a rules file about to change udev behavior regarding
# the automounting of usb devices.
#
# see http://wiki.archlinux.org/index.php/Udev for details.
#
# exit statuses
# 0 success
# 1 improper usage
# 2 already on
# 3 already off
# * unknown error
#
###
# if this file's present, automounting is 'on'
FILE='/etc/udev/rules.d/11-media-by-label-auto-mount.rules'
# functions
message() {
echo "usage: automount [on|off]"
echo
exit 1
}
# note: you should adjust the first KERNEL line to skip your persistent drives
write_file() {
cat > "$FILE" << EOF
KERNEL!="sd[c-z][0-9]", GOTO="media_by_label_auto_mount_end"
# Global mount options
ACTION=="add", ENV{mount_options}="relatime,users"
# Filesystem specific options
ACTION=="add", PROGRAM=="/lib/initcpio/udev/vol_id -t %N", RESULT=="vfat|ntfs", ENV{mount_options}="\$env{mount_options},utf8,gid=100,umask=002"
ACTION=="add", PROGRAM=="/lib/initcpio/udev/vol_id --label %N", ENV{dir_name}="%c"
ACTION=="add", PROGRAM!="/lib/initcpio/udev/vol_id --label %N", ENV{dir_name}="usbhd-%k"
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o \$env{mount_options} /dev/%k /media/%E{dir_name}"
ACTION=="remove", ENV{dir_name}=="?*", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
LABEL="media_by_label_auto_mount_end"
EOF
}
turn_on() {
[ -f "$FILE" ] && exit 2
write_file
}
turn_off() {
[ -f "$FILE" ] || exit 3
rm "$FILE"
}
check_state() {
[ -f "$FILE" ] && echo "on" || echo "off"
}
# main
[ -z "$1" ] && check_state
# must be root to change things
[ $(id -u) -ne 0 ] && exit 1
# args are on|off only
case $1 in
on) turn_on ;;
off) turn_off ;;
*) message ;;
esac
//github/
Offline
Tiny Python script to xor-'encrypt' a file so as to hide it from casual snooping. Hardly worth mentioning, really:
#!/usr/bin/env python
import sys
with open(sys.argv[1], 'rb') as f:
data = ''.join(chr(ord(c) ^ 64) for c in f.read())
with open(sys.argv[1], 'wb') as f:
f.write(data)
Any value can be substituted for 64.
Last edited by Peasantoid (2010-01-09 12:02:06)
Offline
#!/bin/sh
aplay /usr/share/sounds/error.wav &>/dev/null
I like to append this to commands that will take a long time to run. It plays a little "ding" to let me know the job is done.
div curl F = 0
Offline
@vkumar: thanks, great idea!
Sin? What's all this about sin?
Offline
Tiny Python script to xor-'encrypt' a file so as to hide it from casual snooping. Hardly worth mentioning, really:
#!/usr/bin/env python import sys with open(sys.argv[1], 'rb') as f: data = ''.join(chr(ord(c) ^ 64) for c in f.read()) with open(sys.argv[1], 'wb') as f: f.write(data)
Any value can be substituted for 64.
Why not just zlib.compress it? You'll 'encrypt' it and save space
Offline
tomd123: Because of the way xor works - xor(xor("hello")) is "hello". If he used zlib, he'd have to check if the file was compressed already before 'encrypting' it .
div curl F = 0
Offline
tomd123: Because of the way xor works - xor(xor("hello")) is "hello". If he used zlib, he'd have to check if the file was compressed already before 'encrypting' it .
zlib.decompress(zlib.compress('hello')) == 'hello'
Offline
But zlib.compress(zlib.compress('hello')) != 'hello'
[git] | [AURpkgs] | [arch-games]
Offline
#!/bin/sh aplay /usr/share/sounds/error.wav &>/dev/null
I like to append this to commands that will take a long time to run. It plays a little "ding" to let me know the job is done.
i do the same with
echo -e "\a"
then however you handle termanil bells (WM urgency hints, flashing term, audible pcbeep, whatever) will notify you.
//github/
Offline
vkumar wrote:#!/bin/sh aplay /usr/share/sounds/error.wav &>/dev/null
I like to append this to commands that will take a long time to run. It plays a little "ding" to let me know the job is done.
i do the same with
echo -e "\a"
then however you handle termanil bells (WM urgency hints, flashing term, audible pcbeep, whatever) will notify you.
cool stuff. I use this:
notify_state ()
{
($@)
if [ $? = 0 ]
then
notify-send ":-) done: $@"
else
notify-send --urgency critical ":'( failed: $@"
fi
}
< Daenyth> and he works prolifically
4 8 15 16 23 42
Offline
I wrote a little script called "jukebox" to play music painlessly in the background:
#!/bin/bash
oggpid=$(pgrep -x ogg123)
if [ -z "$oggpid" ] ; then
exec ogg123 -q -Z $HOME/music/vorbis
fi
grep -q "^State:.*stopped" /proc/$oggpid/status
if [ $? -eq 0 ] ; then
kill -CONT "$oggpid"
else
kill -STOP "$oggpid"
fi
Unlike some other scripts of this purpose I've seen around, this one doesn't rely on any saved state to decide what to do, but instead considers the situation "from scratch" on each run. As an added bonus, it will "adopt" any ogg123 that you start by hand, rather than ignoring it and starting another one.
I have some keybinds for Openbox to go with it:
<keybind key="W-z">
<action name="Execute">
<command>jukebox</command>
</action>
</keybind>
<keybind key="W-x">
<action name="Execute">
<command>pkill -INT ogg123</command>
</action>
</keybind>
(For those who aren't familiar with it, SIGINT causes ogg123 to skip to the next file, or to quit if you send two within one second.)
The trunk version on ogg123 supports ReplayGain, so I'm finally enabled to get rid of MPD completely. (The vorbis-tools maintainer is looking for help getting 1.3.0 out if anybody is interested - he's working 2 jobs ATM and has no time for vorbis-tools.)
Offline
I use this script with dzen/wmii status bar to display my battery information. Probably similar posted before, but only read half of the posts.
#!/bin/bash
##
#
# A simple battery script giving a short and sweet battery message.
#
# Can probably be improved. The use of grep to get the last word really
# ought to be sed or similar, but I couldn't be bothered to look up the
# syntax. Feel free to modify at will. (improvements more than welcome!).
#
# Dependencies:
# bc
# acpi in kernel
#
##
PRESENT=`cat /proc/acpi/battery/BAT0/state | grep -o "present:.*$" |grep -o "yes"`
if [[ "$PRESENT" = "yes" ]]; then
STATUS=`cat /proc/acpi/battery/BAT0/state | grep -o "charging state:.*$" | grep -E -o "[a-zA-Z]*$"`
CAPACITY=`cat /proc/acpi/battery/BAT0/info | grep "design capacity:" | grep -E -o "[0-9]{3,5}"`
CHARGE=`cat /proc/acpi/battery/BAT0/state| grep "remaining capacity:" | grep -E -o "[0-9]{2,5}"`
PERCENT=`echo "scale=2; ($CHARGE/$CAPACITY)*100" | bc | grep -E -o "[0-9]{1,3}" | grep -v "^00" | tr -d "\n\r"`;
RATE=`cat /proc/acpi/battery/BAT0/state| grep "present rate:" | grep -E -o "[0-9]{1,4}"`
TIME=`echo "scale=2; ($CHARGE/$RATE)" | bc | tr -d "\n\r"`
HOURS=`echo "scale=0; ($TIME/1)" |bc`
MINUTES=`echo "scale=0; (($TIME-($TIME/1))*60/1)" |bc`
#echo -e "stat=$STATUS\ncap=$CAPACITY\ncharge=$CHARGE\n%=$PERCENT\nrate=$RATE\ntime=$TIME\nhours=$HOURS\nmins=$MINUTES"
#check if minutes is singular and add leading zero
if [[ `echo $MINUTES| grep -E "^[0-9]{1}$"` ]]; then
MINUTES="0$MINUTES";
fi;
if [[ "$STATUS" == "charging" ]]; then
sleep 0;
elif [[ "$STATUS" == "charged" ]]; then
sleep 0;
else
STATUS="($HOURS:$MINUTES)";
fi;
echo "$PERCENT% $STATUS";
else
echo "not present"
fi
sample invocation:
>bat.sh
not present
>bat.sh
30% (3:23)
>bat.sh
34% charging
>bat.sh
100% charged
'bc' could probably be changed for perl/python if you don't want to install it.
Last edited by dark_dragon (2010-01-12 12:26:12)
Offline
This status script can either print a status message or uses dzen2 to make a small statusbar at the bottom of the screen. Works great either with wmii ("status.sh --string" in wmiirc) or openbox ("status.sh --dzen &" in autostart.sh). Makes use of the above battery script for my laptop.
#! /bin/bash
##
# Simple script to write status information on cli or using dzen (a la wmii)
# depends on:
# volch.sh
# sensors
# bat.sh
# dzen2 (when using --dzen switch)
##
netstatus(){
if [[ `ifconfig | grep $1` ]]; then
IP=`ifconfig | grep "wlan0.*$" -A1 | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | head -1`;
if [[ ! $IP ]]; then
IP="unassociated";
fi;
else
IP="down";
fi;
echo $IP
}
status() {
IP_wlan0=`netstatus wlan0`
IP_eth0=`netstatus eth0`
#echo -n $(mpc | head -1) \
echo '|' $(echo "vol:"; cat /tmp/volume_cur) \
'|' $(sensors |grep temp1| grep -Eo "\+[0-9]{2}\.[0-9]") 'C' \
'| E:' $IP_eth0 \
'| W:' $IP_wlan0 \
'| up:' $(uptime | awk '{print $3}'| grep -o "[([:digit:]+:[:digit:]+)]" | tr -d [:space:]) \
'| bat:' $(/home/brice/scripts/bat.sh) \
'|' $(date +"%a %d %b, %H:%M ")
}
if [[ $1 == --string ]]; then
status;
elif [[ $1 == --dzen ]]; then
while true; do
status
sleep 1
done | dzen2 -p -fn "-*-terminal-*-*-*-*-11-*-*-*-*-*-*-*" -y 800 -ta r
else
echo "invoke with --string or --dzen"
fi;
Example output:
>status.sh --string
| vol: 50 | +39.5 C | E: down | W: 192.168.1.72 | up: 1:21 | bat: not present | Tue 12 Jan, 12:37
Offline
oh, and just for fun:
#!/bin/bash
#bofh
echo `telnet bofh.jeffballard.us 666 2>/dev/null` |grep --color -o "Your excuse is:.*$"
eg:
>bofh
Your excuse is: network down, IP packets delivered via UPS
Last edited by dark_dragon (2010-01-12 12:38:59)
Offline
i like the little alias that uses curl to sent a status update to twitter -- who knew it was so easy! ... but knowing my tendency to ramble along, going over that pesky 140 character limit, i thought it might be prudent to put in a check:
function tweet() {
CHARS=`echo $* | wc -m`
if [ $CHARS -gt 140 ]
then
echo ":("
else
curl -s -u U:P -d "status=$*" http://twitter.com/statuses/update.xml >/dev/null
fi
}
I've seen young people waste their time reading books about sensitive vampires. It's kinda sad. But you say it's not the end of the world... Well, maybe it is!
Offline