12/01/2009
Scripting with SSH
So I studied the situation and found the ControlMaster option of ssh. It allows you to establish a session in SSH, then use the session to run multiple commands. There are a lot of pages on the web talking about how to use this feature, but nothing really good describing how to script with it. So this is what I came up with:
#!/bin/ksh
# This script demonstrates use of an ssh control master process. The script
# connects via ssh to a remote host and authenticates once. Then the session
# is re-used repeatedly for the remainder of the script without prompts for
# the ssh password appearing again. Also works when using public key
# authentication. The script runs much faster when using a control master
# process because each ssh does not need to be re-authenticated. And public
# key authentication can be optional for the script users in a script that
# would otherwise have excessive repeated password prompts.
PATH=/usr/xpg4/bin:/usr/bin:/bin
REMHOST=ndm@john
# start the control master process for this shell instance
ssh -o ControlPath=~/.ssh/master-$$ -o ControlMaster=auto -f -N $REMHOST 2>/dev/null 1>&2
if [ $? -gt 0 ]; then
echo "ERROR: error authenticating to ssh server"
exit 1
fi
# example additional ssh processes that use the established session
ssh -o ControlPath=~/.ssh/master-$$ $REMHOST id
ssh -o ControlPath=~/.ssh/master-$$ $REMHOST hostname
ssh -o ControlPath=~/.ssh/master-$$ $REMHOST hostid
ssh -o ControlPath=~/.ssh/master-$$ $REMHOST who
# end the current control master process
PROC=`ps -ef |grep "ssh -o ControlPath=\~/.ssh/master-$$" | grep -v grep | awk '{print $2}'`
if [ -n "$PROC" ]; then
kill $PROC
fi
# housekeeping
# find socket files over 24 hours old and kill the associated processes
# for each socket file, do loop
find ~/.ssh -name "master-*" -type s -mtime +0 | while read FILEN; do
FILEB=`basename $FILEN`
# kill process associated with socket file, if process running
PROC=`ps -ef |grep "ssh -o ControlPath=\~/.ssh/$FILEB" | grep -v grep | awk '{print $2}'`
if [ -n "$PROC" ]; then
kill $PROC
fi
sleep 1
# if the socket file still exists, find out if that is because the process
# did not die, or if it is a stale socket file that just needs to be deleted
if [ -f $FILEB ]; then # if socket file still exists deal with it
PROC=`ps -ef |grep "ssh -o ControlPath=\~/.ssh/$FILEB" | grep -v grep | awk '{print $2}'`
if [ -z "$PROC" ]; then
rm $FILEB # remove stale socket file
else
echo ERROR: process $PROC associated with socket file $FILEB did not die
fi
fi
done
# end of script
I don't expect the housekeeping section to actually find anything to clean up very often, but it sure will be nice of the script to clean up after itself if it finds something left over from previous days.
If anybody knows a more graceful way to end the control master process, I would like to see it. It would be great if processes started with ssh -f would die when the shell that invoked them reached the end, or if the process number for the backgrounded process was available in $! or some other variable.
6/15/2009
Digital conversion of dual tuner standard def DVR setup
This computer is not that old, but  it is old and slow enough to not do HD
 
My wife bought a Dell XPS-400 a  couple of years ago.  It came with a dual TV tuner card and Microsoft XP  Media Center Edition (XP MCE).  It worked its way from the desktop to  basically take over our entertainment center.  Several years ago when VCR's  became very inexpensive, I got a stack of 4 and kept them busy all the time  recording this and that.  We stopped watching live TV and recorded  everything we were interested in, and skipped commercials.  It was  great.  Then the dual tuner computer moved in and the VCR's went  away.  Now we could record and time shift to avoid commercials.  All  of this was based on over-the-air.  
 
A few months before the digital  switch, I bought a dual digital tuner.  I never could get it to work  because the playback of shows and live TV stuttered and paused something  terrible.  It was useless.  I tried all sorts of things to fix it,  including souping up the computer, re-imaging it, updating it. The  recordings were ridiculous in size, about 8 GB of data per hour of recorded  programming.  Recording them in this HD format and later  converting them with MCE Buddy and other programs like that didn't work worth a  damn because the audio would often not match with the picture.  Basically  the 2 year old computer just was not going to do HD TV.  I googled and  hunted all over the Internet to find out why I couldn't pick up just standard  def TV.  I couldn't find any standard def tuner cards.  Even the  tech support for companies such as Hauppauge thought when  I said standard def I wanted analog, no matter how I explained it.   I'm watching TV on a 30 inch tube set TV.  I certainly don't need  high def.  Obviously digital to analog converter boxes pick up and  show standard def just fine.  
 
I came to the conclusion there is  not a sufficient market for supporting people like me who want an over the air  dual DVR.  I like the 6 or 7 shows we watch, and I really don't want to  watch commercials or deal with the networks who keep switching what night or  time my favorite shows are on.  I could rant about those guys, but I  won't.  Since there's no market for over the air dual DVR technology to  feed a small screen TV, there's probably nobody reading this blog article  either.  But yet I write.
 
I was bummed out thinking as  recently as just a week ago that I would have to buy a new $800 to $1200 PC just  to record over the air HD, only to down convert it to composite video to show on  a 30 inch tube set TV.  Or go back to cable TV and rent a DVR from those  guys.  I don't really have extra money just laying around to spend on TV  programming.  When we had cable, all we did was watch the local broadcast  stations anyway.  That's why we yanked the cable and went back to  antenna.  And this computer is a 3 GHz Pentium D.  I didn't think it  was a dinosaur until I started to try to record and watch HD on it.   
 
What I ended up  doing
 
It is a miracle that I actually  found the 2 IR blasters that came with this MCE computer.  I hooked up a GE  digital to analog converter box, set up the IR blaster, trained MCE for the  remote codes, and it went very well.  There are a couple of tricks you have  to do to get this to work.  One is you have to tell MCE during your TV  signal setup that you are using cable or satellite.  If you tell it  antenna, it assumes you do not have a set top box to program.  This means  for the program guide you need to pick a provider that has the channels you  want, although they will be the wrong channel numbers.  Then you have to  re-assign channel numbers to have an accurate guide.   
 
The other trick is a little more  complicated, but I got through it. The GE converter box expects when  you type a channel number on the remote you must press - before the last  digit.  For example, if you want to watch channel 4, you must type  4-1.  In the cable and satellite world of TV there are no - characters, so  there isn't any such character on the Microsoft remote either.  As it turns  out, I wanted to pick up channels 4.1, 5.1, 8.1, 11.1, 13.1, 21.1, 27.1, and  58.1.  No where in all those numbers would I be required to type 9.   When I trained MCE on the remote codes for the GE box, I pressed the - key when  it asked to learn 9.  So in order to switch to channel 58.1, I type 5891 on  the Microsoft remote.  I could have used 0 for the - key as well, but I  picked 9.
 
I figured out all of this in an  evening, and it went fairly well.  So the next evening I decided to hook up  another GE converter.  The first converter I hooked up to the analog TV in  port, and there is only one of those on the back of the computer for both analog  tuners.  But there is also an S-video input port.  So I hooked up the  second converter to that input.  Then I had to go through the complete  setup all over again.  This time when it asked me if I wanted to configure  1 tuner or 2, I picked 2.  
 
So I'm back in business again,  watching free TV with a dual tuner DVR.  
 
