08th Nov 2007
Hacking Firefox: customizations for my library (NaBloPoMo #8)
Today was quite the intellectual roller coaster ride, filled with moments of extreme brilliance and achievement, countered by moments of nose-down thinking, researching, problem solving, and bug fixing.
My mission: to rid our library of Public Web Browser, and replace it with a Firefox install that does exactly what I want it to. The ride actually started last Thursday morning; my library is open on Thursdays from 1-9p, but I’m there in the morning, which makes for excellent Do Stuff With Computers time.
Last week, I did some poking around, forming a plan. We have a few different flavors of computer configurations (all running Windows XP Professional SP2), but the general gist is that we have 4 “kiosk” machines, designed for web browsing with readers for Word, Excel, Powerpoint, and Acrobat Reader to aid in opening and printing attachments. Then we have the more full-scale workstations including Office 2003 Professional, web page and FTP software, various IM clients, Picasa, and a few other bits of software.
My priority with the computer configurations to create as normal a computing environment as possible, so that there is no “library way” versus “home way” or “office way” to do things. Locking too many things down, or creating too many dummy button systems for access really just confuses people, and makes teaching people how to use the technology ineffective.
That said, my dream install of Firefox would:
- Remove the full Bookmarks menu, as well as any menu items that referred to bookmarking, sending links via email, add-on and options management.
- Automatically refresh the browser every 10 minutes to bring it back to the library home page.
- Not allow users to install plug-ins.
- Show the user that, yes, your private information is being deleted, for serious.
- Anything that might make the user interface easier to work with.
Not a huge shopping list. I figured I could a good amount of the work with plug-ins, and I knew a Firefox plug-in for kiosk mode did exist. But in evaluating the R-kiosk extension as a solution, I found it entirely too limiting in its default setting, and not flexible enough in the alterable settings for what I wanted. After poking around a bit more, it looked like the solution was to use a combination of plug-ins and straight-out hacks.
I settled on the following plug-ins:
- Cutemenus2: Adds sassy little icons to the standard and context menus in Firefox, to give visual cues on what each command stands for. It’s a great help for inexperienced users, and it’s quick visual reference for get-in/get-out patrons.
- Auto Reset Browser: Refreshes the browser after a period of inactivity. I configure it to refresh after 600 seconds (10 minutes).
Then there was the issue of menu customizing. At first, I thought I’d go with the Menu Editor extension, which is really easy to use. However, if I wanted to hide the ability to access the Add-Ons management utility from regular users, and I hid it using the extension, then I wouldn’t be able to get back to it, ever (funny thing, after talking it through to myself out loud, I had to try it to see if I was right, and I was, resulting in uninstalling and reinstalling Firefox to fix it).
My solution: userChrome.css. Believe it or not, much of the menu rendering and other features in Firefox are controlled by a style sheet. I used the elements & IDs page in the MozillaZine wiki and these instructions to help me figure out the best way to format and customize my Firefox style sheet, and it worked like a dream. This way, reactivating a menu that has been hidden is as easy as commenting out the “don’t show me” command in the style sheet and restarting the browser.
The tough bit was locking everything down so it couldn’t be changed browser-side. We have Deep Freeze Enterprise installed on all of the computers, so worst case we can just restart the machine to take it back to it’s original configuration. However, my greater concern is the consistency of the user experience: what if someone installs a plug-in or extension that confuses the patron using the machine after them? What if it creates a user expectation of a behavior at another machine?
Now, I could use about:config, which allows you to edit all sorts of features in Firefox (type about:config, just like that, into the address bar in Firefox, and you’ll see what I mean), but disabling something in the about:config doesn’t lock it down. For instance, I set extension installs to “disabled,” and instead of a blocking message when I tried to install a plug-in, I got a friendly, helpful message telling me that I needed to enable the feature, as well as a handy enable button.
Not what I was looking for. I needed something stricter, firmer, with a clear neon NO! on it, but, you know, polite and diplomatic.
More nose to the grindstone research later, I came up with a series of handy posts from a fellow in the UK who was locking down Firefox for schools. It’s kinda geeky, and requires playing with code, but the instructions he followed are fairly easy to understand (especially if you read them carefully, out loud if you need to), and the stuff he did with it also makes sense for what most libraries would want to do. The lockPref("xpinstall.enabled", false); bit was the pay dirt of this exercise, but I was able to lock down a bunch of other stuff so that, just in case someone actually accessed the Options box, they wouldn’t be able to edit it.
By the end of the day, I had the 4 kiosk machines working almost like I wanted them to. I’m still researching a way to have the Firefox window pop back open as a fresh browser just on those kiosk machines; tomorrow is another day
. I’ll get to all the other machines in the library over the course of the next week, now that I have the process down to 2 plug-in installs, 2 file copy/pastes, and a small text change in another file, totally perhaps 5 minutes per machine.
Shiny!
So what took all day? I didn’t check email all day, and I really didn’t even touch my desk, so where did all the time go? Well, there was updating the Firefox install on the machines, removing the dreaded Public Web Browser (explaining that is a whole other post entirely), letting people play with it, tweaking it, and just a whole lot of trial and error. And, say, breaks for lunch and snacks, and other work conversations and sundries.
I’ll post some screen shots tomorrow, but in the meantime, questions/comments are welcome!
Tags: Firefox, hacks, kiosk, public computers, Reading Public Library, technology, work
8 Comments » |
Print This Post
|

I totally want to job shadow you for a week. Your job sounds awesome.
Thanks for writing all that up, I’m sure it will come in handy one day.
Karin, if you’re ever going to be in Boston, totally drop me a DM. My library is totally cool with shadow folks, so it can be easily arranged.
I spent a good portion of today refining the process, writing it up, and continuously testing. I’m hoping to post the .rtf with my install notes and some screen shots tomorrow (I can send people the userChrome.css and mozilla.cfg files directly, if anyone wants them), since I’m at work for a Saturday shift.
Glad my blog helped ya out!
Definitely interested in those instructions/screenshots when you have time to post them. This is something we would like to do in our library as well.
We’re in the midst of trying to move from PWB as well. We have people clamoring for Firefox and Real IE. I’ll be watching for the post. thnx
A great supplement to all this would be Windows Steady State – if you’re not using it already. It will basically lock down your guest profile and auto logout after a certain amount of time, wiping anything the user downloaded or any sites they visited. It also severely restricts what the guest user is allowed to do in a largely customizable way.
[...] Hacking Firefox: customizations for my library (LibraryTechtonics) [...]
@Chris Hiestand: Sorry to be so late to respond!
We already use Deep Freeze Enterprise at our library, which does all sorts of other stuff for us, including centralized push management of a bunch of stuff. (But thanks for the note on SteadyState, since we might actually be able to use it on our catalog-only basement machines, and free up some DF licenses for other computers.) It also allows us to offer a more open configuration: if anything crazy happens, we just restart the machine, and it goes back to the original image configuration.