This page has moved to a permanent new location. The Home Page of Vikram Aggarwal is now available at Please update your bookmarks, if you need to.

Vikram Aggarwal

Live Webcam with Linux and Free Software

This my flashy new setup with vgrabbj and tmpfs

Abstract: How to make a live webcam feed using freely available software. The clients do not need anything except a browser which is reasonably standards compliant.


We first begin with the motivation for this project. Why would someone spend time and effort in putting a live webcam feed of his house? There are several motivations, and you might have your own.

What do I need

The basic list of requirements is quite small.

Alright, so that's all the hardware you need. If you have a webcam which is not supported, and you have bought it from the store, you might be able to return it for a full refund.


The setup follows many steps, with a checkpoint at the end of a step. If you cannot complete a checkpoint, stop, and rectify the error before proceeding.

  1. Install Linux with editors (emacs/vi), compilers (gcc), and the X-windows environment on your computer. The choice of desktop does not matter. Verify this setup by logging in as root, running emacs, running gcc, and running an xterm inside X-Windows.
  2. Setup your computer for networking. This means the following:
    • If you plan to do networking through a telephone line, setup your modem with wvdial, kppp, or whatever you plan to use.
    • If you plan to do networking through ethernet: for broadband, LAN, or what have you, setup your network card to connect to the Internet.
    Verify this part by firing up a browser, and visiting Vikram's Fine webpage
  3. Download the kernel sources for the version that you plan. I would suggest the latest kernel version, unless you have your reasons. You might need them, you might not. Verify this part by running 'make menuconfig' in the kernel directory, and building a kernel.
  4. Still with me? Great. Now is when the fun begins. Now attach the USB camera, and find out if it is supported. If it is supported, then you are done. A supported camera usually gives happy messages in /var/log/messages and /var/log/syslog about how it was detected, and how some driver is very happy with it, and will provide support for it. If this has happened, you are good. Go on to the next step. Chances are that this doesn't happen right off. In this case, you have to use your Internet connection to download the appropriate kernel modules which will support your camera. Remember I told you that you need to make sure that your camera is supported and there is a driver available with source. Now is the time to go get that driver, untar unzip it, and follow its instructions. Every driver has its own set of instructions, so I cannot possibly cover them all here. If you have some trouble, look through the README files, and ask questions on the developer mailing lists. When asking questions, be polite, since the developers don't owe you anything. Provide as much documentation as possible, which includes linux kernel version number, gcc version number, device ID, webcam driver version number. Verify this setup by running "camstream", and looking at your oh-so-wonderful mugshot in the screen.
  5. Now install apache on your machine, or some webserver which can serve static files. Tiny http servers are great, if you have a dinky computer. We will only be serving static content, so if you don't need it for other things, you can turn off fancy features like mod-php, mod-perl, and CGI. Don't need it. Verify this setup by changing the main page of your website to your sweetheart's name, and asking the sweetheart in question to access it remotely. In case your sweetheart doesn't have opposable thumbs: a turtle, a cow, a rabbit, go to some other computer on the Internet: a cybercafe, a University, a Friend's house, and verify that the page is visible on the open Internet.
  6. Install the fine program called vgrabbj. It is available at Vgrabbj's fine website but you might be able to get it from your Linux distributor's CD, website, or other places. If required, download sources, compile, and install. Verify this setup by running vgrabbj on the command-line as root. If all goes well, it would have forked off and started running in the background. Check processes (ps ax) to see that it really is running.
  7. Now use my vgrabbj.conf file. This goes in /etc/, but look through your setup to verify that the location of the file is correct. It is all text, with variable and value pairs written on lines. This file has a lot of options, but you need only modify the OutputFile variable. My file minimizes the amount of work vgrabbj wants to do, and I have configured timestamps in the top right. Change the OutputFile variable to point to the path of your web pages, probably /var/www. 'vgrabbj' should be run as root, with just one option. The option is how often you want it to wake up and take pictures. The syntax is "vgrabbj -l 8" to make it take a picture every eight seconds. Verify this setup by running vgrabbj, and using another computer to see the static image in a browser by giving the right path. Note: If you want to reduce the requirements on your CPU, you could make it take pictures less often, or you could go through the vgrabbj manual page to tweak other options.
  8. Optional If you do this setup, vgrabbj will write a jpeg file to your disk every eight seconds. On old disks, this kind of hammering can push them over the edge. Also, you probably want to avoid this disk traffic. One trick is to use a part of your memory as a disk, and ask vgrabbj to write the picture on this fake disk. The pictures I get from vgrabbj are around 19k, so a ramdisk of 1M should suffice. Do the following steps, all as root:
    # mount -t tmpfs -o 'size=1M' tmpfs /var/www/YOUR/DIRECTORY  # <- Use the new tmpfs!
    This makes /var/www/YOUR/DIRECTORY a fake disk of 1 Megabyte, loaded into RAM. This works for the new Linux kernel only, so remember to upgrade. But hey, it is easy to upgrade when you aren't in the clutches of a convicted monopoly. Now when you run vgrabbj, it will write only to the RAM, thinking that it is a disk. This will make the write quicker, and will save your disk from too much traffic.
  9. Web page: Since we don't want to make any claims on the clients, it would be best if they were just plain browser boxes. Download my web-page framework, and modify just the basic stuff to reflect your settings. What I really like about this setup is that the client needs only a javascript enabled browser, the page doesn't reload everytime: only the image. And as a bonus, the client can set his refresh frequency, in case their connection is too slow, too fast... Verify this setup by asking your friends to look through the website, and by waving at the camera. You could also mail me about your webcam, and I'll verify that I can see you. :)

This is my new Webcam setup! The old setup used motion to capture frames, and Ramdisk instead of tmpfs, and was a cpu hog.


This work builds on the work of a huge community of happy hackers. I just put this page together. The real work was done by all these people:

This page was made by a noisy rabbit. You can reach me at "vikram-web at mayin dot org". This page was last updated at: Thu Oct 13 09:41:11 PDT 2005