Zomeminder Webcams 2.0

Ok, following on from my post yesterday here’s the database table part of my new scripts.


I place this under the zoneminder database itself, that way it’s all kept together.
A sample entry would be:-

INSERT INTO `WebCams` (`ID`, `Name`, `URL`, `Start`, `Stop`, `Refresh`, `Monitor`, `Enabled`) VALUES (1, 'Aberystwyth Pier', 'http://www.ceredigion.gov.uk/english/visiting/aber_webcam/img/994.jpg', '00:00:00', '23:59:59', 900, 'A', 1);

Pretty straight forward descriptions for Name, URL, Start & Stop. One thing to note is I made the script to interpret the start and stop so you can start at 10pm and finish at 2am and it will happily work (took a bit for my head to get around it though).
The Refresh column is how often it should grab a new image. I slowed the script down to run a refresh every 60 secs for a few reasons, first not to query the database constantly and 2nd as a safeguard that I can’t hammer any webcams trying to pull too often.
The Monitor I use as A,B,C this will be assigned to the name of what’s downloaded and to the rotate file that you reference in Zoneminder.
Enabled is either 0-No or 1-Yes.

That’s pretty much it. Next bit I’ll post up the actual script.

Blog stats

Just checked my blog stats, I’m amazed people are actually reading stuff I’ve posted. Can’t remember if I’ve allowed feedback and questions, so will check the posts tomorrow as I’d love to know what people think and if I’ve missed anything or can help anyone out.
One thing I have to remember to post about tomorrow is my problems with viewing zoneminder cameras remotely via the web browser.
So thanks to anyone who actually reads anything I’ve done.

Raspberry PI

Not sure if anyone reads these at all, but thought I’d make a comment as I go.
I’m waiting on news from Raspberry PI to know when they’re being launched. At first they’re going to have a run of just 1000 units, I have a load of ideas I’d like to try and do on it from some home automation, security system, all the way to maybe getting zoneminder running on it with a webcam.
It looks a fantastic little board and I think the idea of putting them into schools and letting kids play, program and create it a great one. I wish they’d done that kind of thing when I was in school. I wanted to do the computer control part of CDT but the teacher wouldn’t run it, or even let me do it as an extra after school in my own time.

Still I’ve done little bits and pieces as I go, but I’m really looking forward to the Raspberry PI coming out and getting to just play and experiment again. After looking on the forums yesterday I doubt very much that I’d be in with a chance of getting one of the 1st 1k, and it’s looking like a good couple of runs of 1k each are going to shift like hot cakes, but I’ll be looking out hoping the site doesn’t crash as soon as I know they’re out.

Zoneminder rotating Webcam images.

Note: I’ve made an entire new system running from a database that can accommodate multiple rotating outputs, because I liked seeing the webcams so much on my tv along with my own cctv. I leave this here as an idea script. btw, there was an update for 3 monitors based on the below that used this very script, but I’m going to jump straight to the database one as it’s much better.

I had the idea to include some public webcams onto my zoneminder monitor, I’m already running xlib_shm so was considering find a way within that code to pickup some jpegs and display them in one area. However this seemed overly complicated, it seemed a much simpler idea to create a new monitor in zoneminder that picks up from a local file and just add that monitor onto the xlib_shm line in the xinitrc file so it displays on bootup.

So the steps.
1) create a new directory /var/cache/zoneminder/webcams
2) create a text doc to hold the url’s /var/cache/zoneminder/webcams/urls.txt for example “http://www.ceredigion.gov.uk/english/visiting/aber_webcam/img/994.jpg” without “
3) create a text doc ~/webcams.sh with the following :
echo Directory : $DIR
echo Pull Interval : $PULLINTERVAL
echo Rotate Interval : $ROTATEINTERVAL
cd $DIR
for i in `cat $DIR/urls.txt`
   wget -q $i -O $FILENO.jpg
convert $CURRENTIMAGE.jpg -resize 640x480! rotate.jpg
if [ "$CURRENTIMAGE" -eq "$FILENO" ]; then
PGREPXLIB=`pgrep xlib_shm`
 if [ -z $PGREPXLIB ]; then
   startx &
while true; do
DATE=`date +%s`
   if [ "$DATE" -gt "$NEXTPULL" ]; then
   if [ "$DATE" -gt "$NEXTROTATE" ]; then
   if [ "$DATE" -gt "$NEXTXLIBCHECK" ]; then
sleep 2
4) chmod +x ~/webcams.sh
5) Now add a new monitor to Zoneminder pulling from a local file /var/cache/zoneminder/webcams/rotate.jpg with dimensions 640×480.
6) After testing that this script runs while I’m connected via putty, I add the following to /etc/init.d/zoneminder under the startx & ‘/root/webcams.sh &’. That way when the computer starts up and everything is displayed the webcams script is also started and away it rotates.
7) Add the following to /etc/init.d/zoneminder under the stop section where I added kill -9 xlib_shm ‘killall -9 webcams.sh’. Now the script is stopped if zoneminder is stopped.
One thing to note is that restarting zoneminder via the interface is not the same as running /etc/init.d/zoneminder restart. So the script and does not get reset when restarting via the interface.

Zoneminder XLIB_SHM

Ok it’s been a good while since my last post, and it’s not that I haven’t been doing anything, just not writing about it. Which just creates problems when I need to remember how what I did and how.

I needed something to get my monitors back on my similar to my windows setup. That used to rotate around the cameras and would bring to the front specific cameras when motion was detected.

After a bit of searching I found xlib_shm http://www.zoneminder.com/wiki/index.php/Xlib_shm
Although it says it only works with 1.22.3, I’m currently running 1.24.2 on Ubuntu 11.04.

So after installing it and trying to run via the command line “./xlib_shm -m 11 -m 12 -m 3 -m 13 -m 14 -c 2 -k 0x7a6d0000” it complained about not being able to open the display. of course I’m running it from a terminal on the server itself, but gdm is already lauched and I’d alt+ctrl+f1’d out of it. So I stopped gdm with “/etc/init.d/gdm stop” and tried again, hey presto it runs.

So now how do I get this to run on boot?

One option is to have gdm auto login and then auto run xlib_shm. I had a few problems with this approach, First the login counter, it takes a few seconds to auto login and kick in xlib_shm and it’s just a bit untidy. Second xlib_shm launches in a window doesn’t look very pretty and I’d prefer full screen. Third was the mouse pointer happily sat smack in the middle of the screen, not a huge problem for a 4 split, but single screen or 9 and it’s in the way of the main detail on the picture.

So kill that idea, I want it straight in no hassle as quick as it can. So the best thing I could come up with was stop gdm launching and make a new script to startup xlib_shm. unfortunately this approach seemed to hit it’s own problems. killing gdm wasn’t as easy as it should have been because of changes in the way it’s now started in Ubuntu 11.04, and adding xlib_shm into the init.d was proving unreliable sometimes it beat gdm and grabbed the screen othertimes it didn’t.

So I had to find another way, and my answer was to try and figure out how X was started.

I ended up editing ‘/etc/X11/xinit/xinitrc’
commenting out the ‘/etc/X11/Xsession’ line and adding ‘exec /usr/sbin/xlib_shm -m 11 -m 12 -m 3 -m 13 -m 14 -m 15 -m 18 -m 19 -m 20 -c 3 -k 0x7a6d0000’ to the bottom.
now starting X with “startx” fires up xlib_shm full screen with a 9 split.
Problem hit though with the screen turning itself off.
Found out that setting a couple of dpms options then starting x would solve this so added the following into the xinitrc file after the exec line

xset s off &
xset -dpms &

Now to get this starting with the boot. Solution edit the ‘/etc/init.d/zoneminder’
Within the start section add ‘startx &’ and in the stop section add ‘killall -9 xlib_shm’.
Now on each reboot X starts up with xlib_shm and the screen doesn’t shutoff at all.

I’ve no doubt theres bits in here that I’ve missed, I got this all running months ago. When I did the same similar on a 2nd system, it was pretty straight forward and similar but I did hit another issue.
For some reason xlib_shm would occasionally crash out and return to the command prompt. However between this change and installing that I’d setup scripts to pull a few webcams and display them on a zoneminder monitor rotating the image. As that script fires a rotate every 10 seconds, my answer to the crashing was to add a check into this script to see if xlib_shm was running and if not to startx &.

So that’s the brief outline of me getting xlib_shm to work with Zoneminder 1.24.2 on Ubuntu 11.04.

One thing to note, restarting zoneminder via the interface is not the same as running /etc/init.d/zoneminder restart. Because of this via the interface does not restart xlib_shm. This causes problem (mainly when I was testing) because the zoneminder feeds would shutdown and xlib_shm would then crash. I got used to only restarting via the commendline, but the script mentioned above would counter this problem should xlib_shm crash now.

ZoneMinder Browser Streaming

Got Zoneminder installed and running again. alot of fine tuning to be done, but so far so good.
Here’s the current setup:-
Ubuntu 11.04
Anykeeper 2016 Card
Zoneminder 1.24.2
6 Cameras connected
only 1 of the anykeeper cards in atm.

The anykeeper card isn’t exactly stable, 2 of the images are light flickering not a clue why they’ve been stable with this card before under windows and another card so guessing it’s down to the mix of card and config. I can live with it though as it doesn’t setoff the motion you can just see it pulsing when on live view.

Think I’ll be ordering another card though that is known to work with zoneminder, having something nice and stable would be nice.

One thing that has been bugging me though is the streaming options. When using Chrome I’ve had to manually select Yes on the Can_Stream to kick in the live view as the auto just sits there.
However I found this http://www.zoneminder.com/forums/viewtopic.php?t=15429
Incase it gets removed I’ll copy the instruction below

In file include/functions.php, change the following which is at around line 823 (May vary from installation to installation): 

    elseif (ereg( ‘Opera ([0-9].[0-9]{1,2})’,$_SERVER[‘HTTP_USER_AGENT’],$logVersion))


    elseif (ereg( ‘Opera/([0-9].[0-9]{1,2})’,$_SERVER[‘HTTP_USER_AGENT’],$logVersion))

In around line 876 (May vary from installation to installation), change:

function canStreamNative()
   return( ZM_CAN_STREAM == “yes” || ( ZM_CAN_STREAM == “auto” && (isNetscape() || isKonqueror()) ) );


function canStreamNative()
   return( ZM_CAN_STREAM == “yes” || ( ZM_CAN_STREAM == “auto” && (isNetscape() || isKonqueror() || isOpera() || isSafari()) ) );

In around line 840 (May vary from installation to installation), find this:

function isNetscape()
    getBrowser( $browser, $version );

    return( $browser == “mozilla” );

Add this below it or above it:

function isOpera() {
    getBrowser( $browser, $version );
    return( $browser == “opera” );
function isSafari() {
    getBrowser( $browser, $version );
    return( $browser == “safari” );

 Next I have to get the PTZ up and running. Will post up my solution to that one as so far I’ve had no joy.

Sync Timstamp in Linux

First you have to run something along the lines of:-

find . -type f -print -exec stat -t -c '%y' {} ; > /tmp/original_dates.txt

On the first set of files, the ones with the correct time.
Once that is complete you run:-

cat /tmp/original_dates.txt | (while read FILE && read DATE; do echo $FILE; echo $DATE; DATE2=`date -d "$DATE" +%Y%m%d%H%M.%S`; touch -t $DATE2 "$FILE"; done)

On the second set of files. This will then set their date as the original.

OpenVPN Connection Sever 2 Server Ubuntu

I’ve got a few VPN links in place using OpenVPN and thought it’s about time I documented how incase something goes wrong in the future.

First was the install:-

apt-get install openvpn

Once installed:-

cd /etc/openvpn

Then Generate a key using:-

openvpn --genkey --secret static.key

Create the config file using:-

nano -w server2.conf
remote server2.example.co.uk
port 8008
dev tun203
proto udp
ping 15
secret /etc/openvpn/static.key
chroot /var/empty
user nobody
group nogroup
log vpn.log
verb 0

Things that need changing are the server address and the local and remote IP addresses. Also check the chroot, user and group exist.
Next copy the static.key from server1 to server2. Then create a server1.conf in /etc/openvpn/

nano -w server1.conf
remote server1.example.co.uk
port 8008
dev tun203
proto udp
ping 15
secret /etc/openvpn/static.key
chroot /var/empty
user nobody
group nogroup
log vpn.log
verb 0

Notice how the IP configuration on this server is reversed. These IP addresses are just used by the tunnel and do not have to be within your normal network range. However for routing to multiple network segments it seemed easier to keep these addresses within the network range for me so it’s easier to trace where the fault lies if something goes wrong.
Last thing to check is that ip_forwarding is also enabled

cat /proc/sys/net/ipv4/ip_forward

Once the connections are established, it’s probably worth having some routing info pushed to each server. For simple routing you can uncomment the option in the configs above. For more advanced routing it’s worth installing Quagga.

I’ll need to update this with better details on what the configs do. But that’ll get it running in a simple setup.

Ubuntu 10.10 and Chrome Missing Plugins

Re-installed my laptop about a week ago with Ubuntu 10.10. Finally killed off the Windows partition that wasn’t working properly anyway. So took the opportunity to install a fresh Ubuntu 10.10 with disk encryption. Everything seemed to be working fine. that is except Chrome.
I couldn’t access my CCTV system using chrome like I used to. If you access it from Windows IE you get a nice little request whether to load the mpeg viewer or access jpeg stills. But never had that prompt in Chrome after auth it just loads up an image viewer that’s opens up a single camera view.

But now I’m just stuck with ‘Missing Plugin’ in a nice grey box. I’ve already loaded up Flash, Quicktime, VLC, and a few other plugins and video playback works. but the CCTV just didn’t! It was bugging me, but I’d just kinda left it. Tonight though I ended up installing ZoneMinder for someone, and after a few permissions problems finally got the camera up and running, but it was doing a simple jpeg image refresh every 5 secs. I remembered from a few years ago downloading cambozola(?).jar so went looking and found it. Installed it and tried again, boom ‘Missing Plugin’.

After some searching I found that there’s an option in Zoneminder to change Options > Images > CAN_STREAM it’s normally set on Auto. but if you change it to Yes, it makes the ‘Missing Plugin’ in Chrome go away.

But this isn’t a solution to me as my own CCTV is old software that almost certainly doesn’t have an option in anyway similar. So onto more searching for jpeg streaming chrome and ubuntu. By chance I stumbled onto a java site and oh look ‘Missing Plugin’ again.

Of course it is, I haven’t installed Java yet, DOH!

A quick search of the Ubuntu software and I installed the OpenJDK Java 6 Runtime. Restarted Chrome and it’s still not working. Uninstalled OpenJDK and then went off doing a manual install of Java and creating a symbolic link of the necessary files into the Chrome directory alongside the Flash and Quicktime plugins. But it still doesn’t work.

So back to the drawing board. Removed all the manual stuff and back to installing OpenJDK Java 6 Runtime via the Ubuntu Software. Then I also installed iced6tea-plugin. Yahoo it works. I now have access to my CCTV again using Chrome on Ubuntu.

So Bottom Line:-
If your getting ‘Missing Plugin’ messages in Chrome, make sure you have Java installed.
Ubuntu Software >
OpenJDK Java 6 Runtime

Setting Up My Blog

Well been meaning to do this for a while, just couldn’t get around to either setting stuff up on my own server or researching a good blog site.
But tonight google decided to take all that hassle away from me by asking if I wanted to upgrade my domain account and let my users login to other services. So hey presto access to a load of google apps at the click of a button.
It’s still taken me about 10 mins trying to pick out a design and template though. I’m not exactly convinced it looks any good yet though. Time will tell.

Hopefully I’m going to stick stuff on here about Linux, Asterisk, Nagios, Scripting and a load of scraps that I need to write down so I can find them again, which maybe of use to someone.