Chumby tricks

NOTE - this page is for Ironforge/Falconwing and Silvermoon production chumby devices - for Foo/Katamari alpha prototypes, please see Chumby Tricks for Foo/Katamari

'''NOTE - the bulk of these tips and tricks are unofficial hacks and are not officially supported by the company. Use them at your own risk!'''

Many of these tips and tricks require creating a text file for a script - the chumby, being a Linux-based device, requires that these scripts have UNIX-style line endings (in particular, linefeeds). For Linux users, this is easy - just use your favorite editor. For Macintosh users, the standard TextEdit application will do nicely if you use it in plain text mode. For Windows, we recommend EditPad Pro.

The chumby also has a lightweight version of vi built in.

=Setting up a fresh Chumby, or after factory reset=

On an fat32 usb, create a debugchumby with the following:

cp -f /mnt/usb/network_config* /psp/ cp -f /mnt/usb/timezone* /psp/ touch /psp/start_sshd /sbin/sshd
 * 1) !/bin/sh
 * 2) copy config files - put these files on the usb stick as well
 * 1) set sshd to start automatically always from the next reboot
 * 1) start sshd this time

The safest way to build the files to copy from a working Chumby.

Once setup, the process to restore is:
 * 1) put usb stick in port a
 * 2) reboot / power on holding the screen to get to special options
 * 3) select factory reset
 * 4) chumby will sort itself and then reboot
 * 5) abort the intro spiel (it is cool, but we have all seen it before)
 * 6) when it asks about wifi, click cancel
 * 7) when it asks about timezone, your location should be pre-populated so hit ok
 * 8) let the rest of the boot go normally, and unplug the usb stick

(props to PaperClippy for this tip)

Use the same script as above, except replace /mnt/usb/timezone* with /mnt/usb/clock_locations. You can also copy over events, autodim_settings, brightness*, weather_locations from another dash.

=Hidden screen in Control Panel=
 * 1) Open the Control Panel, select "Settings", then "Chumby Info"
 * 2) Tap the small "pi" symbol in the upper right corner
 * 3) You'll see buttons to perform the following actions:
 * 4) ; SSHD : launches the builtin Secure Shell Daemon
 * 5) ; FILES : opens up a simple file system browser
 * 6) ; REBOOT : reboots the chumby device
 * 7) ; FB CGI : Enable frame buffer access (/dev/fb content) via cgi
 * 8) ; OFF : turns the chumby off

... on chumby 8
 * 1) From the home screen, tap the gear in the upper left.
 * 2) Tap "Device Info"
 * 3) Tap the "pi" symbol in the upper right area.
 * 4) You'll see buttons to perform the following actions:
 * 5) ; SSHD : launches the builtin Secure Shell Daemon
 * 6) ; QUIT : quits the Flash Player
 * 7) ; REBOOT : reboots the chumby device
 * 8) ; FBCGI : enables frame buffer access (/dev/fb content) via cgi
 * 9) ; XHAIRS : toggles on/off a small crosshairs cursor
 * 10) ; BCON :
 * 11) ; OFF : turns the chumby off
 * 12) ; REPAIR SAFE MODE : allows recovery of the Special Options mode from USB
 * 13) ; DEL PHOTO CACHE : clears the internal cache of photos
 * 14) ; DEL THUMB CACHE : clears the internal cache of photo thumbnails
 * 15) ; Pblogout :

... on Infocast
 * 1) Open the Control Panel
 * 2) Tap the "Insignia" logo in the upper left
 * 3) Tap the "pi" symbol in the upper right of the gray area
 * 4) You'll see buttons to perform the following actions:
 * 5) ; SSHD : launches the builtin Secure Shell Daemon
 * 6) ; QUIT : quits the Flash Player
 * 7) ; REBOOT : reboots the chumby device
 * 8) ; FBCGI : enables frame buffer access (/dev/fb content) via cgi
 * 9) ; XHAIRS : toggles on/off a small crosshairs cursor
 * 10) ; OFF : turns the chumby off
 * 11) ; REPAIR SAFE MODE : allows recovery of the Special Options mode from USB
 * 12) ; DEL PHOTO CACHE : clears the internal cache of photos
 * 13) ; DEL THUMB CACHE : clears the internal cache of photo thumbnails
 * 14) ; DEL STORED PHOTOS : clears the photos stored internally
 * 15) ; DEL STORED VIDEOS : clears the videos stored internally

... on Dash
 * 1) Open Menu
 * 2) Open Settings
 * 3) Open Device Info
 * 4) Tap the "pi" symbol in the upper right area.
 * 5) ; SSHD : launches the builtin Secure Shell Daemon
 * 6) ; REBOOT : reboots the dash device
 * 7) ; OFF : turns the dash off

=Open a secure shell (SSH) console on the chumby=


 * Start  using the hidden Control Panel screen
 * Using an SSH client (Windows users can use PuTTY, Mac/Linux users can use  from a terminal window), log in as the user root with no password. e.g.
 * Note: the IP is visible from the Chumby Info screen as well as the hidden Control Panel screen
 * You should get a big ASCII chumby logo on the classic and chumby one, a prompt on other devices.

Enabling a password for SSH - the easy way
In software version 1.0.7 (at least) the passwd command is built-in. So setting a password should be as easy as mounting the root filesystem read/write (per notes below) and typing

It should be noted that there is another account called "default" which also has no password.

Enabling a password for SSH - the hard way
Instructions for enabling password SSH differ depending on your Chumby model, but for each you will need to connect to your Chumby via SSH.

...on Ironforge
The contents of /etc is about 170K, so if you want to waste that much space on your /psp jffs2 partition, you can get password protected SSH on your chumby without even using an external USB script using these instructions:

Make a directory on /psp to hold /etc and copy the original contents of /etc to your directory:

Generate an md5 hash of a password. The easiest way to do this is use openssl: The -1 (one) argument indicates that the MD5 based BSD password algorithm 1 should be used. It will look like this: Password: Veriying - Password: 

Note: Chumby expects the hash in the form: $1$abcdefgh$morehash, where $1$abcdefgh$ is the seed. This is the MD5 based BSD password algorithm 1 that is used in the chumby shadow file.

Edit the /etc/shadow file and add a password hash to the "root" line. Here is a sample before and after:

Then simply mount your new writable /etc directory over the old /etc directory:

Note: When chumby performs a software update, it will update /etc, but may not update /psp/etc. If you experience frequent software update messages, despite having successfully updated, then you may need to update your /psp/etc. To do this, backup your shadow file, copy the /etc to /psp/etc as explained above, then copy your shadow file back to /psp/etc

...on Falconwing and Infocast 3.5
Generate an md5 hash of a password. The easiest way to do this is use openssl: The -1 (one) argument indicates that the MD5 based BSD password algorithm 1 should be used. It will look like this: Password: Veriying - Password: 

Note: Chumby expects the hash in the form: $1$abcdefgh$morehash, where $1$abcdefgh$ is the seed. This is the MD5 based BSD password algorithm 1 that is used in the chumby shadow file.

SSH to your chumby and mount your root filesystem as read-write:

Edit the /etc/shadow file with your favorite editor and add a password hash to the "root" line. Here is a sample before and after: Re-mount your root filesystem as read-only:

That's it!

Note: When chumby performs a software update, it will probably over-write your custom "/etc/shadow" file.

= Music customizations =

Streaming from an mp3 server (shoutcast / icecast / etc.)
NOTE: this functionality is now available in the Control Panel, under Music->My Streams


 * 1) Connect to your Chumby via SSH as mentioned above.
 * 2) In your command line, enter   and press return. Be sure to replace the address with the complete address of the internet radio station.
 * 3) Enjoy the streaming music.


 * To stop playback press.
 * To adjust volume run  where the 100 can be 0-100.
 * Stream pitch too high? try

Streaming music from SlimServer to chumby
(NOTE - except for installing SlimServer on your computer, the following steps are not longer required for Control Panel 2.6.70 or later - SlimServer is now available as a music option from the "Music" button)

Stream music from your computer to your chumby using SlimServer!

#!/bin/sh btplay http://ip.of.your.server:9000/stream.mp3 &
 * Download and install SlimServer  on your computer.
 * Use a Unix-style line-end compatible(linefeeds rather than carriage return line breaks) text editor (TextEdit for Mac, EditPad Pro for Windows) to create a file called "debugchumby" (no extension).
 * Insert the following code into the file, making sure the line break is Unix-style (in EditPad Pro use "Convert" > "To Unix LF")
 * Verify the IP address is the IP address of the computer that SlimServer is running on.
 * Save the file to a USB flash drive, insert into your chumby, and reboot.
 * Play your music via the SlimServer web interface, and music should play through the chumby's speakers.
 * Enjoy!

Here is a step-by-step guide for setting up Live 365 to stream to the Chumby:

First steps before you ever go near the Chumby:


 * Download and Install Slimserver
 * After installing, start Slimserver (On Mac OS X you'll do this from your Mac System Preferences)
 * Wait a moment or two and then click the "Web Access" button on the preference panel. It will fire up your browser and take you to the setting panel (displayed in your web browser).
 * I did very little here. I went to the Live 365 screen and input my Live 365 ID and password. Though you do very little here, you will need to come back to this Slimserver controls screen later.

To find the IP address of your Mac: I found the easiest and most reliable way to do this was going back to system preferences, and clicking on "Sharing." On the Sharing screen I clicked "Web Sharing" it displayed my machine's IP address. I then unchecked it, because I really did not want to do this. I only used it to find my IP address.

On the Chumby:
 * Go to control panel
 * Go to Music
 * Go to My Streams
 * Set up a new stream
 * Enter the URL: http://the-IP-address-you-wrote-down-for-your-machine:9000/stream.mp3
 * The type of stream is an mp3

On your Mac:
 * Go back to the Slimserver screen on your browser (or via the system preference panel in system preferences for Slimserver click the "Web Access" button again
 * Go to the Live365 (or whatever the source of music is). Click your preset station. Click "play"

Streaming music from Nicecast
Nicecast is a music broadcast system for the Apple Macintosh published by Rogue Amoeba. To stream music from that program to your chumby, try the following steps:


 * Start the Nicecast application on your host machine
 * Start broadcasting - if you're serving your iTunes music, be sure to select some music and hit "play" in iTunes
 * Open the "Nicecast Server" window from the "Window" menu.
 * Note the "Address" (four numbers separated by periods) and "Port number" (probably 8000) fields
 * On the chumby, select "Music", then "My Music Streams".
 * Hit the "New" button.
 * Tap the "URL" text block(should say "http://")
 * Enter the string http://address:port number substituting the address and port number from step 4 above, then press the enter key on the lower right
 * Set the name of the stream to "Nicecast", if you like
 * Tap "DONE"
 * Select the item in the list of streams, then hit the play button.

You should get the music - if not, you may have to open and forward a port in your firewall corresponding to the port in step 4 (you'll need to find out how to do this for your router). If you know the LAN IP address of your computer (probably something like 192.168.1.100), you can also use that for the address instead of opening a port.

Streaming music from GNUMP3d
See GNUMP3d.

Streaming XM Satellite Radio
To stream XM Radio to your chumby, you will need a couple pieces of software: uXM & TVersity. TVersity is media streaming software that can play audio/video from an RSS feed. uXM will be necessary to get xml feed for TVersity. This solution is for Windows. Special thanks to Chumby Forum member SlvrEagle23 for coming up with a solution to stream Sirius to the chumby, which made streaming XM possible. Hopefully, we'll see SlvrEagle23's solution on here soon. In the meantime for you Sirius folks, you might be able to do the same thing with uSirius.

TVersity
 * Download and install TVersity (it installs as a service on your machine)
 * It should start running as a service after you install it, if not select Advanced->Start Sharing
 * Go to the Settings Tab and under the General settings, set the "Media Playback Device" to "MP3 Audio Device" and Click Save at the bottom of the screen.
 * Next, select the Media Library Settings and change the "Media Library Refresh" to 0 hours so that it will not automatically refresh. Click Save at the bottom of the screen.  This is important or TVersity will generate new channel URLs which would need to be edited n the Chumby.
 * Click Transcoder. Set the radio button to "Always".  Leave the other settings as is and click Save.
 * Click Internet Feeds and enter "0" for "Maximum number of items to show per feed:" Click Save.

uXM
 * Download and install uXM. It should start after it installs.  It will give you an error that it could not start because it's missing login information.
 * Click Settings...Enter your XM Subscription login information and click OK.
 * Click Start
 * Click URLs
 * Select the "Feeds" Tab. The "-All Categories-" Category didn't work for me, but each of the individual categories did.  Select one of the categories, for example Decades.  It will generate a URL.  Copy this URL.
 * Go to TVersity and click the "Sharing" Tab.
 * Click the green + button to "Add Podcast/RSS Feed->Add Audio Podcast/Feed...
 * Paste the URL into the Audio Feed field. Give it a title (in this example "XM Decades")
 * Select the Advanced button and make sure the Transcode is set to Always" Click Submit

''OK, we're almost ready to enter the information into My Streams on the Chumby. We just need to get the channel URL.''
 * Use firefox or other RSS Reader. In firefox go to the TVersity server (http://ip-of-computer-running-tversity:41952/lib/)  The port 41952 is the default port for TVersity (you may need to allow it in your firewall).
 * Click the "Audio(x)" link then "Internet Audio(x)" then "Audio Feeds (x)"
 * Your presented with the XM feeds you setup in TVersity. Select one of the feeds (Decades).
 * Copy the link location (the URL) of the channel you want (XM 8 - The 80s)
 * You could enter this URL into the My Streams of your chumby, but it's over 200 characters. So generate a TinyURL.
 * Go to your chumby and access the My Streams feature.
 * Enter your stream's name and the tinyurl generated. Select MP3 for type and click submit.
 * Push play and you should be hearing XM streamed to your Chumby.
 * Repeat for your other streams.

Streaming SIRIUS Satellite Radio
With a little clever work, it is possible to add SIRIUS Satellite Radio streams to your Chumby's "My Streams" list. Like any other streams, they can then be played in the background at any time, set as the audio for alarms, and more. This solution was originally submitted to this forum thread.

Here's the software you'll need to make it work:
 * uSirius (for generating audio streams from Sirius)
 * TVersity (for converting the streams into streaming MP3s)
 * XAMPP for Windows (for creating easy station URLs for Chumby to use)

Currently, this solution is only supported on computers running Windows XP/Vista and sitting on the same network as the Chumby. If your Chumby is connecting across the Internet to the host computer, be advised that some ISPs and/or firewalls may interfere with this process.

Note: An alternative solution has been posted above for XM users. While this hasn't been tested for SIRIUS subscribers yet, it may remove the need to install XAMPP and set up the PHP script. Additionally, the developer of uSirius is working to integrate a large portion of this process into the software itself, after which these instructions will be updated.

Install uSirius

 * Download and install uSirius from the link above.
 * Provide uSirius with any configuration options necessary. Currently, you will only need to enter your sirius.com username and password. For most users, you will not need to change any other options.
 * If uSirius doesn't start automatically, click "Start" on the main window to start it. You will see a message like "Listening at xxx.xxx.xxx.xxx on port 19080." Take note of the numbers where the "x"es are in that message. This is the IP address of your computer, which you will use later.
 * Set uSirius to start up on your computer automatically when you log in. Usually, this means clicking and dragging the uSirius icon into the "Startup" folder on the start menu, though this could be different for your computer, and there are other ways of accomplishing this.

Install TVersity

 * Download and install TVersity from the link above.
 * TVersity should automatically start its sharing service. If not, click the "Advanced" menu, then click "Start Sharing".
 * Click the "Settings" tab at the top of the TVersity window. The very first option on the page will be "Media Playback Device". From the list of drop-down options, select "MP3 Audio Device". This will force TVersity to change the way it streams audio to the Chumby, avoiding some of the more pesky issues with playback. Scroll down and click "Save".
 * Still inside the "Settings" tab, click the "Transcode" button on the left to bring up the transcoding options. In the "When to Transcode?" section, choose "Always". Scroll down and click "Save".

Install XAMPP

 * Download and install XAMPP from the link above.
 * When asked for a location to install XAMPP, leave the default location (C:\xampp) if at all possible. If you change this location, modify the instructions accordingly.
 * You will be asked which applications you would like to start as a service. Check the "Apache" box, and leave the others (MySQL, etc.) unchecked.
 * From the same computer, check to make sure this page works: http://localhost/ - if not, XAMPP messed up somewhere. Make sure Apache is started and working.

Downloading the PHP Script

 * The PHP script depends on the Zend Framework to read the RSS feed provided by uSirius. Download the Zend Framework, unzip it somewhere temporarily, and open the folder where it was extracted. Inside the main "ZendFramework" folder, you will find a folder named "library". Open it, and click and drag the "Zend" folder inside it over to C:\xampp\htdocs.
 * Download this PHP file (check some random unreferenced forum thread) and save it as music.php in C:\xampp\htdocs. Open it with a text editor like Notepad, and change the $my_ip line to the IP address of your computer, which you noted above as the one uSirius was listening on. Save the file.

Set up in the Chumby

 * Go to the Control Panel of your Chumby, and click "Music" to open the music menu. From the location options, choose "My Streams".
 * To add a new SIRIUS station, click "New".
 * For the URL, enter: http://your-computers-ip/music.php?s=xx (where "your-computers-ip" is the IP address you wrote down a few steps back, and "xx" is the SIRIUS station number you want to hear, i.e. 1 for Sirius Hits 1 or 36 for The Beat).
 * Give the stream a title that corresponds to the station, i.e. "Sirius Hits 1". For stream type, select "PLS". Save the stream.
 * Repeat the steps above for each new SIRIUS station.

Changing the order of music sources
Starting with Control Panel 2.8.36, it is possible to reorder the music source list. To do this, one creates a file called "/psp/music_order", which contains a list of music source selectors, one per line for the order in which the sources are to be listed. Any sources not listed will be appended to the end of the list in the original order. You will need to reboot or restart the Control Panel for the changes to take effect. The selectors are:


 * pandora - Pandora
 * shoutcast - SHOUTcast
 * mediafly - Mediafly Podcasts
 * iheartradio - iheartradio
 * nytpodcasts - New York Times Podcasts
 * chumbcast - blue octy radio
 * sleepcast - Sleep Sounds
 * cbspodcasts - CBS Podcasts
 * internode - Internode Radio
 * noaa - NOAA Radio by Wunderground
 * ipod - iPod
 * directurl - My Streams
 * fmradio - FM Radio
 * slimserver - Squeezebox Server
 * mp3files - My Music Files

For instance, to move My Streams, Pandora, and blue octy radio to the top of the list, you'd make the file "/psp/music_order" with the contents:

directurl pandora chumbcast

=Built in web server=

On startup, the chumby launches a small HTTP server on port 80, which displays wireless statistics information - to view this page, get the IP of the chumby from the Settings->Chumby Info screen in the Control Panel, and type  into a browser. You can see the network statistics from  and you can see memory statistics from.

You can add CGI scripts to this webserver: You can now access those scripts using the URL
 * Open a console on the chumby using SSH
 * create a directory at
 * add your CGI scripts there
 * Make sure CGI scripts have execute permissions (chmod +x script_Name)

For a more complete web server, see Chumby as a web server.

... on infocast

This is not on by default on the infocasts, and must be started from a debugchumby script running /usr/sbin/httpd -h /www

... on Dash

On the Dash, it can be set to start by doing: touch /psp/start_httpd

=Alarm customizations=

Custom alarm sounds
If you don't like the sound of the builtin alarms, you can override them with your own MP3 audio files
 * Get a USB flash drive, and copy your MP3 file to the top level
 * To override alarm 1, rename the file
 * To override alarm 2, rename the file
 * ...or to override both, rename the file  - the individual files will override this one.
 * Plug the USB flash drive and boot your chumby - when an alarm goes off, it will use your files instead of the built in sounds

Starting with Control Panel 2.6, you can also set different alarms sounds for each day of the week - name your alarm MP3 files as,  , etc.

Custom alarm actions
When an alarm fires off, the Control Panel will look for script  where N is a one-based index of the alarm. If not present, looks for. If either present, it will be executed when the corresponding alarm is stopped by the user.

Custom alarm ring screen
When an alarm rings with the dismissal screen active, the users is presented a screen with the current time, and two buttons for stopping and snoozing the alarm.

Starting with Control Panel 2.8.19, Control Panel supports a "pluggable" alarm ring screen. This is, of course, done in Flash. The Control Panel is looking for the presence of and will load the file "/mnt/usb/alarmring.swf". Upon launch, the movie will have an object on its main timeline called "_chumby_alarm" which has four function properties, "snoozeAlarm", "stopAlarm", "stopAlarmWithMusic", and "resetBackupAlarm".

These functions are called with no parameters. The functions stopAlarm and snoozeAlarm reproduce the functionality of the two standard buttons. The other two functions are not used by the current screen - stopAlarmWithMusic is that same as stopAlarm, except that any music used for the alarm sound (such as streaming Internet radio) is left playing, and resetBackupAlarm will reschedule the backup alarm for the next alarm rather than the current one.

In the simplest case, a movie would have two buttons, "snoozeButton" and "stopButton", and the handlers for these buttons would probably be something like: this.snoozeButton.onRelease = function { this._parent._chumby_alarm.snoozeAlarm; }

this.stopButton.onRelease = function { this._parent._chumby_alarm.stopAlarm; }

There is example code to crib from here: FLA SWF

= Boot up, default screen, control panel customizations =

Alternate opening animation
To get an alternate opening animation: touch /psp/alt_opening

Customizing the opening animation
If you'd like to replace the little chumby animation that happens when you start up, do the following:
 * Make your Flash animation that you want to run, be sure it calls  at the end
 * Put it on a USB flash drive, and call it "opening.swf"
 * Plug it into the back of your chumby and reboot!

Your own splash screens
During a normal boot, before the opening animation, the chumby displays a series of four images on the screen. The first two are displayed by the bootloader and are fairly easy to modify. The third is displayed by the kernel (and normally identical to the bootloader's 2nd image) and requires recompiling the kernel. The final is displayed by the init script (/etc/init.d/rcS) and is easy to modify on a Chumby One, but maybe not on a Classic.

WARNING: These all involve modifying parts of your Chumby that aren't really intended to be modified. Do all of this at your own risk.

Bootloader Screens
The bootloader's two normal splashscreens are stored in named sections in the configuration block. To replace the first one with the image splash.png which you've placed in /mnt/storage or /mnt/usb do this:

cd /mnt/storage or /mnt/usb stop_control_panel config_util --cmd=getblock --block=img1 > img1.bin.bak imgtool --mode=draw splash1.png dd if=/dev/fb0 of=splash.bin bs=640 count=240 config_util --cmd=putblock --block=img1 < splash.bin to restore: config_util --cmd=putblock --block=img1 < img1.bin.bak

Note that I stop the control panel to prevent it from drawing anything to the frame buffer since we're using the frame buffer to convert the image. Another option is to switch to and STAY the default clock widget, which only redraws once a minute. The last four commands:
 * 1) back up the existing splash screen
 * 2) draw your new image onto the screen, converting it into the right format in the process
 * 3) pull the converted image out of the frame buffer
 * 4) save the converted image into to config block

For the second screen, do the same process but replace all the "img1"s with "img2"

Kernel Screen
This one is a pain and requires building an entire new kernel. I won't cover that part, but if you already are building a kernel, you can change the splash screen it displays by:
 * 1) convert the image to the framebuffer format using steps imgtool and dd as above and copy splash.bin into your linux source directory
 * 2) in the linux source directory, do scripts/bin2c &lt;splash.bin >splash.c
 * 3) back up include/chumby_boot_logo_2.h somewhere
 * 4) replace the very long string in include/chumby_boot_logo_2.h with the body of splash.c

Compile, install and reboot and you should now have a new 3rd splash screen.

Init Script Screen
This is the easiest of all on a Chumby One. Dunno about a Classic, never worked with one.
 * 1) compress your image to a 320x240 baseline (non-progressive) JPEG
 * 2) get it onto the chumby (referred to below as /mnt/storage/splash.jpg)
 * 3) ssh to the chumby
 * 4) test that your image can be displayed with imgtool --mode=draw /mnt/storage/splash.jpg
 * 5) remount the root partition as read/write: mount -o remount,rw /
 * 6) back up current splash screen cp /bitmap/320x240/chumby_logo.bin.jpg /mnt/storage/chumby_logo.bin.jpg
 * 7) copy your new image on top of the current one: cp /mnt/storage/splash.jpg /bitmap/320x240/chumby_logo.bin.jpg</tt>
 * 8) reboot</tt> to see changes and get the root partition back read-only

Using a custom Control Panel
So, you're so ambitious, you created you *own* Control Panel! Congratulations! Here's how to use it:
 * Put it on USB flash drive, and call it
 * Plug it into the back of your chumby and reboot!

If you have an older software release you can do something similar with a USB dongle, with the file  containing:

chumbyflashplayer.x -i /mnt/usb/controlpanel.swf
 * 1) !/bin/sh

To keep the watchdog timer from restarting the Control Panel, you'll need to write a "1" to the file "/tmp/movieheartbeat" every 15 seconds: _putFile = _global.ASnative(5,51); _putFile("/tmp/movieheartbeat","1");

= Scheduled tasks, auto-execution of tasks =

Launching sshd at startup
WARNING - doing this will reduce the level of security on your chumby, and may allow unauthorized access
 * Open up a console on the chumby
 * At the console, type:
 * Now  will be started whenever the chumby successfully connects to a network!
 * To stop this behavior in the future, type:

If you don't want to happen all the time, you can do this instead from a USB flash drive:
 * On the USB flash drive, create an empty file called.
 * Plug it into the back of your chumby and reboot!

Entering Night Mode Automatically
ssh root@my.chumby.ip.address

Create /psp/nightmode.sh with these lines

echo '<event type="NightMode" value="on" comment=""/>' > /tmp/flashplayer.event /usr/bin/chumbyflashplayer.x -F1
 * 1) !/bin/sh

Make /psp/nightmode.sh executable with chmod 755 /psp/nightmode.sh

Then add this to root's crontab with 'crontab -e'

0 21 * * * /psp/nightmode.sh

At 21:00 (9:00PM), your display should enter night mode.

Note: If you are in the control panel and playing music, then triggering nightmode will not work, it will show the sleep timer screen so you can set a timer on when the music should turn off. (as if you pressed the nightmode button in the control panel)

Additional Note: You can make Chumby enter Night Mode automatically without resorting to this trick, at least as of firmware 1.0.7. You can create a custom alarm that has no sound, but has an action set to enter Night Mode. Be aware that if you have any other alarms (possibly silent) that trigger after that, the Chumby will come out of night mode.

Crontab Note: crontab is broken in the November, 2010 update with incorrect path and file permissions. The simplest fix is to edit with 'crontab -c /psp/crontabs -e'. You may also need to change the ownership of /psp/crontabs/root from chumby:chumby to root:root; do this with 'chown root:root /psp/crontabs/root'. For more details see http://forum.chumby.com/viewtopic.php?id=5673

Run processes on start-up

 * The easiest and safest way to do this is to use a USB drive: create a file called  and put shell script commands in there. This will run on start-up.
 * userhook0, userhook1, userhook2 can also be used to run custom commands on start-up
 * these files can be placed either on USB drive (/usb/ root) or Internal Storage (/psp/rfs1/)
 * See: Chumby Rootdisk - RFS1 (analyzed) for exact boot script timing call points

Running something at boot without debugchumby (IronForge Chumby Classic ONLY)
NOTE: You can really screw up the boot procedure with this trick, please only do so if you're familiar with linux and editing linux shell scripts

In the /etc/init.d/rcS script which is run at boot, there is a line that looks for /psp/rfs1/rcS and runs it, but then quits. The fact that it quits is the reason you can screw something up here. If you don't run the rest of the things that /etc/init.d/rcS usually does after looking for this file, you will have only completed a small portion of the chumby boot sequence.

To do this trick, edit a file /psp/rfs1/rcS and paste in the contents of rcS from it's invocation of /psp/rfs1/rcS on. On a 565 Ironforge one, the first lines you need to copy is: echo "Starting udevd as daemon" /sbin/udevd --daemon Make sure this newly created file starts with a she-bang for the interpreter: Also make sure it is executable: chmod a+x /psp/rfs1/rcS Then, you can edit the rest of this file and insert your own commands.
 * 1) !/bin/sh

If you do manage to screw up your system with this, you can recover it by creating a debugchumby script that does:

rm /psp/rfs1/rcS
 * 1) !/bin/sh

...and booting into "special options" mode, aka "rfs2". Booting into special options mode is done by powering down your chumby and powering it up again while pressing a finger to the touch screen.

This will remove the script, which is only run when in normal mode, aka "rfs1". You should then be able to reboot into normal mode.

NOTE: Not much trickery is needed with a Chumby One since the rootfs can be mounted read-write and edited live.

Run processes on Log In

 * If you want to run commands as soon as you log in, you can edit your /psp/.profile file.
 * You should probably first make a backup copy of the original:
 * Next, edit /psp/.profile using the vi editor (I believe this is the only text editor installed on the chumby):
 * Add whatever commands (try the chumby click echo command).
 * After rebooting, these commands should run upon logging into the console.

=Make your chumby click when you touch the screen=

NOTE: This feature has been added to the Control Panel on the Settings->Volume screen

You can have the chumby give you some simple audio feedback when you touch the screen
 * Open up a console on the chumby
 * Type
 * To turn it off, type

=Mount NFS partitions=

In order to NFS mount a remote filesystem from chumby, do the following: Example: mount -t nfs -o nolock 192.168.1.101:/root /mnt/nfs
 * 1) mount -t nfs -o nolock 192.168.1.115:/root/chumby /mnt/nfs

=Screwed up your touchscreen calibration?= If you messed up your touchscreen calibration to the point that you can't even restore it through the Special Options mode, create a file called 'ts_settings' on a USB dongle with the contents: 136,3768,3835,-3540 ...put the dongle in one of the USB ports in back of your chumby and reboot. This restores the calibration to factory settings, which is at least good enough to let you navigate the Control Panel to the calibration section.

=Use wired Ethernet=

NOTE: Ethernet support is built into firmware version 1.7 and later

'''There are two known-to-work USB-to-Ethernet adapters, the Linksys USB200M and a Trendnet TU-ET100C. Both configurations are shown here.'''


 * create a debugchumby file with the following contents, depending on your USB adapter:

Linksys USB200M - This has only been tested with the Linksys USB200M USB Ethernet adapter, though it *may* work with others. Also note that this example only describes how to connect using DHCP.

insmod /drivers/usbnet.ko insmod /drivers/asix.ko udhcpc -t 5 -n -p /var/run/udhcpc.eth0.pid -i eth0 ifconfig rausb0 inet 127.0.0.1 /usr/chumby/scripts/sync_time.sh
 * 1) !/bin/sh

Trendnet TU-ET100C - The following is tested and known to work with a Trendnet USB 1.1 10/100 USB dongle, model TU-ET100C, H/W:C3.2 for a minimal get-it-going debugchumby file. (add more options like sync_time as necessary). The Chumby's OS/Kernel already has the necessary drivers installed and enabled for this device.

/sbin/udhcpc ifconfig rausb0 127.0.0.1
 * 1) !/bin/sh


 * copy the debugchumby script to a USB drive
 * insert the USB Ethernet adapter (Linksys USB200M or Trendnet ET100C) into a chumby USB port
 * insert the USB drive into the other chumby USB port
 * power on your chumby

[Note than on the Chumby One, the Trendnet TU-ET100C is discovered by /sbin/udhcpc as "eth0"]

AirLink101 ASOHOUSB - The AirLink101 USB 2.0 USB dongle, model ASOHOUSB works well with the drivers that are already installed in the Chumby's OS/Kernel. To use, follow the same set up instructions as listed above for the Trendnet usb adapter.

Kensington K33929EU USB Mini Dock with Ethernet works perfectly with my chumby one. I didn't use any of the methods above, I just configured a new connection using the control panel.

I'd previously borrowed a friend's unbranded version (physically identical except that the colours of the plastics were reversed). In both cases the Ethernet chipset is reported as "ASIX AX88772".

Rocketfish RF-GWII008 - The Rocketfish LAN Adapter for Nintendo Wii uses the ASIX AX88772 chipset and can be configured simply by adding a new network connection from the control panel. Rocketfish is an internal Best Buy brand and the adapter can be found at most Best Buy stores.

Edimax EU-4207 - I did order the Edimax LAN Adapter for Nintendo Wii at a German online shop. Just plug it in and configure a wired Ethernet connection via control panel. After a reboot everything does work fine without doing any configuration stuff via SSH.

=Use wifi protected by a capture page=

Many corporate guest wifi networks, mall hotspots, etc. have a capture page-style wifi login; the wifi is unprotected via WPA or WEP, but requires a form to be filled out (email address often), and a "I agree" or "Login" style button to be pressed to send in the form. Here's how I got one of these to work.

Note: there is no one-size-fits-all solution here. Different pages have different parameters, and different wifi networks have different ESSIDs. Everything has to be customized...but you can make it work with a little effort.

Prerequisites:
 * 1) You need to know the ESSID (the name) of the wifi network you'll be connecting to. You can determine this with a wifi-enabled PC, or with the chumby itself.
 * 2) You need to review the HTML of the login form (probably with a laptop), and determine what to POST to it. HTML knowledge helps a lot here. You'll be looking for the   element of the page, to determine where the form gets sent, and what fields are required.

Note: Sometimes required fields are hidden, so you can't rely on just looking at the rendered page...you need to review the HTML directly. The form values get added to the curl call in the script below in the format -d "fieldname=fieldvalue"

iwconfig rausb0 essid "mysid" udhcpc -t 5 -n -p /var/run/udhcpc.rausb0.pid -i rausb0 IP=`ifconfig rausb0 | perl -n -e 'if (m/inet addr:([\d\.]+)/g) { print $1 }'`; fbwrite "$IP" OP=`curl -k -d "_FORM_SUBMIT=1" -d "which_form=guest" -d "bs_email=email@foo.bar" -d "source=10.12.44.66" https://10.34.23.27/login.pl`;
 * create a debugchumby file. Here's one that worked for me, and I'll comment below
 * 1) !/bin/sh
 * 2) bind to wifi network...replace "mysid" with the ESSID
 * 1) DHCP config; should be pretty standard
 * 1) this outputs your IP address from the dhcp connect...you may need it (I did)
 * 1) post to capture login page. this has to be customized per form (I needed the ip addy from above for the source field)
 * 2) the -k is for the insecure https connection; you can remove if the post is to http:// rather than https://
 * 1) if you need further debugging, uncomment the next line
 * 2) fbwrite "$OP"
 * copy the debugchumby script to a USB drive
 * insert the USB drive into one of the chumby's USB port
 * power on your chumby

Alternate Method
 * Find your Chumby's MAC address, and use your computer to spoof it (search Google for instructions for your OS) and then register. Then switch the PC back to the original MAC and your Chumby should logon successfully.
 * macchanger is a program to do this that exists as a package for ubuntu and other distributions

=Mixing local widgets into a channel=

When the chumby loads a channel from the server, it also checks for a file called profile.xml on the USB device mounted at /mnt/usb. That file should contain XML that is merged into the XML coming from the server to create the full channel. An example:

<widget_instances> <widget_instance id="1"> My Widget My Widget This is my widget 1.0         <mode time="30" mode="timeout"/> <access sendable="false" deleteable="false" access="private" virtualable="false"/> <user username="myusername"/> <thumbnail href="file:////mnt/usb/mythumbnail.jpg" contenttype="image/jpeg"/> <movie href="file:////mnt/usb/mywidget.swf" contenttype="application/x-shockwave-flash"/> <mode time="30" mode="timeout"/> <widget_parameters> <widget_parameter> zipcode 90210         </widget_parameter> <widget_parameter> phonenumber 867-5309         </widget_parameter> </widget_parameters> </widget_instance> </widget_instances>

Replace the fields for name, description, thumbnail href, and movie href as appropriate. Note that the href fields can be full URLs to external servers that have appropriate crossdomain security, and that the widgets will have the security sandbox corresponding to those sites, not *.chumby.com. You can have multiple widget_instance nodes, however, you should have different values for id for each one.

=Initiating a channel change=

Between widgets, the Control Panel monitors the existence of  - if present, will attempt to change channels to the channel name in the file. The file is then deleted. This allows external scripts to initiate a channel change.

You can also send a Control Panel event

=Using a browser to see what's on your chumby=

The ability to capture the contents of the two frame buffers over HTTP is built into firmware versions 1.6.0 and later.

This ability can be started via either the command line (ssh), or the control panel.

Starting via the command line
/usr/chumby/scripts/fb_cgi.sh

Starting via the control panel

 * 1) Open the Control Panel, then hit "Settings", then "Chumby Info"
 * 2) press the "pi" button in the upper left
 * 3) press the "FBCGI" button - this enables the CGI script to capture images

Accessing the contents of the frame buffers
Using the IP of the chumby as shown on the "pi" or "Chumby Info" screen, type one the following URLs into a browser on the same network:

For the "widget" (primary) framebuffer: http://ip.of.this.chumby/cgi-bin/custom/fb0 For the "Control Panel" (overlay) framebuffer: http://ip.of.this.chumby/cgi-bin/custom/fb1

The chumby will respond with a JPEG image. If the chumby is playing widgets, there isn't much to seen in fb1 - it's only Really Useful if you're in the Control Panel itself.

=Configure your chumby to connect wirelessly through a Macintosh laptop=

MacOS X Settings
Note: If you enter a WEP password, chumby will need the HEX equivalent of the key. ( e.g. If you enter AAAAA for the password, the WEP HEX key will be 4141414141 )
 * Connect your laptop to the internet via wired Ethernet
 * Open System Preferences
 * Click Sharing
 * Click the Internet tab
 * In the Share your connection from: drop-down list, choose Built-in Ethernet
 * Under To computers using:, choose Airport
 * Click Airport Options
 * Enter a Network Name (e.g. chumby)
 * Optionally enable WEP encryption by selecting the Enable encryption (using WEP) checkbox and entering a 40bit (5 char) or 128bit (13 char) WEP password.
 * Click Start

chumby settings

 * Open the Control Panel
 * Click Settings
 * Click Network
 * Select create a new connection and click OK
 * Select the wireless connection that you had previously created (e.g. chumby) and click OK
 * If you had previously chosen to enable WEP encryption, enter your WEP key (e.g. 4141414141) and click OK, otherwise go to the next step
 * Select Manual and click OK
 * Enter 10.0.2.10 for the IP and click OK
 * Enter 255.255.255.0 for the netmask and click OK
 * Enter 10.0.2.1 for the network gateway and click OK
 * Enter 10.0.2.1 for the primary DNS and click OK
 * Enter 10.0.2.1 for the secondary DNS and click OK
 * Click OK on the Confirm settings screen

=Adding a Virtual Chumby to a Facebook Profile=
 * Copy the embedded code for a small Virtual Chumby into your computer's clipboard.
 * Log into your Facebook profile and search for the application "Flash Embed." Add it to your Facebook profile.
 * Within the Flash Embed application, click the link "Add a new animation to your profile."
 * Select the option "Import a Flash 'embed' code," and paste the code from your clipboard into the box. Click the "Add Animation" button to confirm.
 * Change the first field labeled Title from "Imported Flash animation" to a heading of your choosing. Something that instructs the viewer to click the image is recommended.  You need to do this because when anyone lands on your Facebook profile, the flash animation of your Virtual Chumby does not begin until it is clicked on.
 * Change the second field labeled URL from "Could not determine URL!" to "http://www.chumby.com/virtualchumby2.swf".
 * Fill in the Image URL field with a reference to a picture that approximates the actual Virtual Chumby. The URL "http://store.chumby.com/images/products/latte_front.jpg" or similar is recommended.
 * Click the "Save Changes" button to confirm.

=Adding a Virtual Chumby to an iGoogle page= Add the HTML/Javascript Google Gadget,

http://www.google.com/ig/directory?hl=e … htmljs.xml

to your Google page and paste in your Virtual Chumby Code; voila, Virtual Chumby a la Google!

FWIW, the gadget lets you mail the gadget to contacts; you can include your configuration of the gadget, so that the recipient(s) will see the same content that you see, e.g.:

http://www.google.com/ig/adde?hl=en&moduleurl=http://chw2054.googlecode.com/svn/trunk/htmljs/htmljs.xml&source=imag&up_title=Chumby&up_editMode=text

Which is one of my VC's :) Note that this is not the code that you entered in the Gadget.

=Clock overlay=

The chumby supports clock overlay when in widget mode - to enable this, create a file "/psp/clockoverlay.xml", of the form:

<overlay format='%A%n%H:%M:%S' x='10' y='10' width='300' height='100' textsize='32'/>

This puts the overlay in large font in the upper left. You can also use the following which instead will place the clock in much smaller font in the bottom right:

<overlay format='%A %H:%M:%S' x='185' y='220' width='135' height='24' textsize='16'/>

The "format" attribute uses selectors closely matching the POSIX function strftime (the default is "%x %r"):

%a - short day name, ie "Mon", "Tue", etc %A - long day name, ie "Monday", Tuesday", etc %b - short month name, ie. "Jan", "Feb", etc %B - long month name, ie. "January", "February", etc %C - century, ie, "19", "20", etc %d - day of month, with leading zero fill %D - %m/%d/%y %e - day of month, with leading space fill %F - %y-%m-%d %g - full year modulo 100 %G - full year %h - %b %H - 24 hours with leading zero fill %I - 12 hours with leading zero fill %j - zero-based day within year, with leading zero fill %k - 24 hours with leading space fill %l - 12 hours with leading space fill %m - numeric month, with leading zero fill %M - minutes within hour, with leading zero fill %n - insert linefeed %p - AM/PM %P - am/pm %r - %I:%M:%S %p %R - %H:%M %s - seconds from epoch %S - seconds within minute %t - insert tab %T - %H:%M:%S %u - numeric day of week (1 through 7) %w - numeric day of week (0 through 6) %x - %m/%d/%y %X - %H:%M:%S %y - year modulo 100 with leading zero fill %Y - full year %z - time zone offset in minutes %% - insert %

=Sending events to the Control Panel=

The Control Panel, starting from version 2.7, supports external events to perform some common useful actions. To send an event, a small fragment of XML is placed in the file "/tmp/flashplayer.event", and the Flash Player is signaled with the command "chumbyflashplayer.x -F1". Note that this particular XML parser is incomplete - you *must* use double quotes to surround the attribute values, and you must include the "comment" attribute even with an empty value.

Supported events (as at Control Panel 2.8.20): <event type="WidgetPlayer" value="nextWidget" comment=""/> // switch to the next widget <event type="WidgetPlayer" value="prevWidget" comment=""/> // switch to the previous widget <event type="WidgetPlayer" value="reload" comment=""/> // reload the current channel <event type="WidgetPlayer" value="setChannel" comment="Default"/> // switch to the named channel <event type="WidgetPlayer" value="setWidget" comment="Surfline Surf Report" /> // name of widget instance, fall back to widget name, skipped if widget not present <event type="WidgetPlayer" value="shuffle" comment=""/> // shuffles the current channel

<event type="UserPlayer" value="play" comment="http://path.to.stream"/> // play the URL <event type="UserPlayer" value="playLoop" comment="/path/to/file"/> // play the file 100,000 times

<event type="MusicPlayer" value="stop" comment=""/> // stop the current music <event type="MusicPlayer" value="setVolume" comment="100"/> // set the system volume, 0..100, music must be playing for this to work <event type="MusicPlayer" value="setMute" comment="on"/> // // set the system mute, "on" = muted, "off" = no muted, music must be playing for this to work <event type="MusicPlayer" value="setBalance" comment="0"/> // set the system balance, -100..100, music must be playing for this to work

<event type="AlarmPlayer" value="on" comment="1"/> // enable alarm by index <event type="AlarmPlayer" value="off" comment="1"/> // disable alarm by index <event type="AlarmPlayer" value="ring" comment="1"/> // ring alarm by index <event type="AlarmPlayer" value="snooze" comment=""/> // snooze the currently ringing alarm <event type="AlarmPlayer" value="stop" comment=""/> // stop the currently ringing alarm <event type="AlarmPlayer" value="reload" comment="/psp/alarms"/> // reload the alarms file (added in CP 2.8.9)

<event type="NightMode" value="on" comment=""/> // enter night mode <event type="NightMode" value="off" comment=""/> // exit night mode <event type="NightMode" value="dark" comment=""/> // turn off the display (added in CP 2.8.20) <event type="NightMode" value="dim" comment=""/> // turn the display to dim (added in CP 2.8.20)

<event type="ScreenManager" value="bright" comment=""/> // set screen to full brightness <event type="ScreenManager" value="dim" comment=""/> // set screen to dim <event type="ScreenManager" value="off" comment=""/> // set screen to off

<event type="FMRadio" value="play" comment="105.3"/> // play the specified station (added in CP 2.8.72) <event type="FMRadio" value="stop" comment=""/> // stop playing the radio (added in CP 2.8.72) <event type="FMRadio" value="preset" comment="1"/> // play the specified preset station, numbered 0 through 3 (added in CP 2.8.72) <event type="FMRadio" value="scan" comment="up"/> // scan to the next strong station "up" or "down" (added in CP 2.8.72) <event type="FMRadio" value="tune" comment="105.3"/> // increment ("up") or decrement ("down") the frequency by the local step (added in CP 2.8.72)

A typical use of this mechanism is by external scripts that may want the Control Panel to do things based on some external stimulus. For instance, one could create a simple CGI for the built-in web server to control the device over the Internet.

The list of the user's channels is written to the file "/tmp/channel_name" - entries in this file can be used with the WidgetPlayer.setChannel event.

=Setting up an adhoc wifi network=

Copy the following code into a file called debugchumby and place it on a USB storage drive, insert it into your chumby and boot it up. Be sure to replace werd with the ssid of your AdHoc network. Note that the script will endlessly attempt to connect to the network until it succeeds.
 * 1) !/bin/sh

ssid="werd"

connect {   echo "scanning for access points" /usr/chumby/scripts/ap_scan echo "attempting to connect to $ssid" iwpriv rausb0 set NetworkType=Adhoc iwpriv rausb0 set TxRate=6 iwpriv rausb0 set AdhocOfdm=2 iwpriv rausb0 set AuthMode=OPEN iwpriv rausb0 set SSID="$ssid" iwpriv rausb0 set EncrypType=NONE iwpriv rausb0 set SSID="$ssid" sleep 10 }

connect while [ `iwconfig rausb0|grep ESSID|awk -F: '{print $2}'` != \"$ssid\" ]; do   connect done

udhcpc -t 5 -n -p /var/run/udhcpc.rausb0.pid -i rausb0
 * 1) if you dont have a dhcp server running, comment the udhcpc line above and uncomment the following one
 * 2) ifconfig rausb0 10.10.10.2

=Enabling and disabling the wireless connection=

The interface network connection can be disabled and enabled via the following commands:

Disable:

Enable:

Note: not sure if these physically power down the wireless card

=Using Chumby with Arduino=

There's a howto located at https://boconnor.is-a-geek.com/pmwiki/index.php?n=Geek.Chumby for setting up a Chumby with Arduino and using it to build a simple plant moisture sensor. There was a talk about this project given at the March 09 Dorkbot socal and a video is available at http://blog.makezine.com/archive/2009/03/creating_a_plant_sensor_system_with.html.

= Other, more complicated customizations =
 * Changing the volume using the accelerometer
 * Connect through a 3G USB modem (and share it via wifi)
 * Web Browser