Computer Lab on the Cheap

Budget – a bit over $3000. Goal – a 26 seat computer lab for a high school. Is it possible?


The computers need to run basic office productivity, web browsing software, authentication, and monitoring what students are doing.


I went with Linux Terminal Services Project (LTSP). It doesn’t require a hard drive on the clients. The Ubuntu LTSP wiki is a good resource for setting this up. I tried using Proxmox (openvz) at first so I could have 2 LTSP nodes mixed on the same hardware as less intensive applications. This became problematic as openvz doesn’t easily support fuse. When I plugged in a USB drive to a thin client it wouldn’t work. I could have tried to build my own kernel with openvz and fuse support but decided against it. Instead I placed everything on one dedicated server.

For authentication I use existing OpenLDAP and samba servers. I won’t go into specific on setting these up in this post. I will say use the Ubuntu server guide and not the community wiki for openldap. The wiki is terribly out of date and in many cases incomplete or wrong. LTSP uses the underlying authentication so if you can log into your server with ldap you should be good to go. I didn’t find anything different about LTSP. pam_mount, pam_ldap, etc all work as they would on a traditional desktop. I used pam_mount to mount the student’s document folder automatically. I wrote about pam_mount before when messing with Active Directory.

For printing I used cups 1.5. Cups 1.4 in Ubuntu has some nasty bugs that make the server hang in some cases in my experience. I used an existing cups server but it could also just exist on the LTSP server. By using a central cups server though you can have non thin client desktops use it as well. This makes administration pretty easy. I will say I hate how it always show all printers even ones the user doesn’t have permission for! Also just set your MaxClients to some really high number! I found you can reach the default (100) pretty easily even with just 40 or so users! Why is the default so low? A modern computer can probably handle millions of clients.

To customize the user interface, just drop files in /etc/skel. Setup the desktop how you want it and copy in ~/.config

To view what students are doing you can use italc. The wiki makes it sound super easy to install on LTSP. The wiki rather confusing. I put the lts.conf file at /var/lib/tftpboot/ltsp/i386/lts.conf The man page on lts.conf doesn’t say anything about START_ITALC. My file looks like this:


Windows Applications on LTSP

While I would have rather have used LibreOffice, it was determined we needed Office 2007. This is somewhat of a project of it’s own. For personal use wine works great with Office. For multiple, non-technical users? Forget it! I used Crossover Professional which comes with multi-user support and hooks to do extra scripting. Of course it does cost money and I sank about a third of my budget into this. Even with crossover be ready for lots of bugs and hacks. My issues included

  • Windows desktop is not the actual ~/Desktop folder! Why not!? I used a script to symlink them. I named by script according to their convention 01.create-stub so it gets called when a user logs into the first time and gets a new MS Office “stub”, which is just the user specific parts owned by the local user instead of root. In regular wine you would only have this and thus you can’t have multi-user support.
    rm -rf “$WINEPREFIX/dosdevices/c:/users/crossover/Desktop”
    ln -s -f “$HOME/Desktop” “$WINEPREFIX/dosdevices/c:/users/crossover/Desktop”
  • Can’t print to PDF. wine/crossover won’t allow it. It sort of works if you install cups-pdf but it’s too buggy for production use. Office 2007 has an add-on to save directly as PDF. So install it and any SP’s for Office.
  • wine remembers every printer forever! If you connect a printer via cups and remove it, Office will forever think it still exists. Again fine for personal use but in a school forget it! And what if you ever want to rename printers in cups? Duplicates. Delete all printer references in /opt/cxoffice/support/ms_office/system.reg and user.reg. At least this way the user starts out with no dead printers. I need to make a script to delete them on startup or something, it’s on my to do list.
  • Default applications – It doesn’t work. I wanted to make .doc open by default with Office. Crossover people tell me it’s a bug in Ubuntu. You can fix it by editing
  • Lots of minor glitchy bugs such as the “Office button” menu often disappearing.
  • Excel uses a mdi form that doesn’t display correctly on the gnome task bar. I have no solution to this other than starting new Excel processes (by starting Excel each time, not just opening xls files). Why do MDI forms still exists? This is not DOS. We have operating system level window management these days.
Finally you can package your wine “bottle” as a deb for easy deployment. Fun fact – because Word is a single process application if you log into 2 LTSP as the same user and both run it, two windows will come up on the first users screen and none on the other! But with Excel you can run multiple processes. Ha and people say LibreOffice has a messy code base. This doesn’t happen when using different users so it’s not a problem.


I find it pretty easy to come across donated Pentium 4 desktops and servers. My dedicated server was a HP ProLiant G5 with 16GB ram and two four-core Xeon processors. That’s 8 cores total. A very nice server. One could probably get away with using slightly older models or could just add many into a cluster. For a non profit it seems reasonable to me that you can find such equipment for free, though I do live in NYC which might make it easier as there are not shortage of mega financial firms with cycling through equipment.

Old desktops are gross, so hide them under the desk if possible.

Flat screen monitors are usually never given away. Be prepared to buy them. About a 1/3rd of my budget went to this and keyboards/mice.

It’s easier to find it easier to get old non networked printers. If they have a parallel port you can buy a “Print Server” and get it online.


I ran 2 gigabits of bandwidth from the server to the lab over two 1 gigabit cables/switches. Check out the Edubuntu LTSP requirements page. I used 2 switches in the lab each with a 1 gigabit backend and 100 megabits to each thin client. Another third of my budget went into networking equipment. Thin Clients are of course going to be network intensive! I found some volunteers to help with running cables and computers. Thanks volunteers!!


The Volunteers and I


LTSP runs fast with the right hardware! If you ever used VNC (please don’t it’s terribly slow!) you might be scared of remote access. LTSP uses X’s natural networking capabilities and it might not be as fast as RDP, but it’s close. Mouse input is very smooth. Programs start up super fast (they are probably all already in ram). I’ll probably try playing around with deploying some fat clients on some of the better machines to increase performance.

If you read my other posts you know I really get annoyed with all the Linux Desktop bugs. But most of that is mitigated by using thin clients. The server is always on and there are no laptop users. Syncing files and fighting upstart just becomes a moot point.

Installing new application is dead simple. I can apt-get install them on the ltsp server and they just appear even if a user is already logged in.

I just set up the lab, so I’ll update this post with results of actual student usage! And be sure to donate to Cristo Rey Brooklyn High School so we can get more computers! Otherwise I’ll assume you hate education.

3 thoughts on “Computer Lab on the Cheap”

Leave a Reply

Your email address will not be published. Required fields are marked *