The Digital Picture Frame from an old laptop project.
I had been drooling over the thought of building a digital picture frame from an old laptop ever since I came across somebody's blog describing one. Yes I know there are a lot of them on the market now. And yes I know they are becoming cheaper every passing day.
So let me make the case for build one yourself:
- The store brought frames are much smaller (screen size) compared to a standard laptop screen.
- The store models are much pricier than a DIY - A 14" DPF weighs in at around $300.( And if you already have an old laptop you only have to spend on the frame)
- The Store models only let you load pictures from picture cards. The DIY type lets you have a network connection so it can pull pictures from your LAN or even from the internet.
- The frame you build can be made to work exactly the way you want it to.
- It is fun something on your own and the geekiness of having it configured exactly the way you want gives you bragging rights.
I will be honest and admit it that I am not the first one to create a Digital Picture frame from a laptop. Here is a whole listing of other people's Digital Frame projects. Which were very helpful to get mine executed nicely.
When setting out to build my own DPF I wanted the following from it:
- It should read pictures over the network and even the Internet.
- It should turn on in the morning and off at night to save electricity.
- It should be able to create composite image collages, display multiple vertical pictures side by side.
- It should display weather forecast, and the days news headlines in the morning (while I get ready to leave for work) interspaced with pictures. (This part has still not been implemented)
- It should have a web interface for management.(This part has still not been implemented)
The requirement of a DPF in terms of laptop processing power is very less. But the limiting factor is the very old systems are the LCD's. The LCD for displaying pictures should have a full color support and a decent resolution.
I did not have an old laptop lying around so I had to freedom to choose mine. Thanks to the resource hogging new software like Windows Vista there are a lot of decent old laptops selling for cheap on ebay and other places. I chose to find mine on craigslists as it would be quicker to get my hands on it.
I found a Dell cpx laptop for $75. It had a 500Mhz PIII processor,128MB of ram, 4 GB hard drive and even came with a wireless card. (everything I was looking for).
The laptop had only 128M of RAM so i needed an OS which would be light weight in its own memory usage and then leave some of it for the picture display software. Damn Small Linux is a lightweight derivative of the powerful Debian distribution. It comes with most of the needed software and being a debian derivative means you can easily add most of the debian packages to it using the apt package manager.
The first task was to make sure the software I picked worked with the laptop and all the hardware including the wireless card was working. So i popped in the DSL live CD and booted into it. DSL auto-detected all the hardware and configured it correctly. The only thing it did not see was the Realtek 802.11 card. So I had to find a way to do that manually.
With a little help from a regular Linux user friend of mine I got it to work. ( With the madwifi package.)
With that all the hardware worked. Next step was to install DSL to hard drive.
Installing DSL to hard drive is as simple as choosing the menu item in the GUI:
Apps > Tools > Install to Hard driveThe installation asks for an install location (/dev/hda1 for your first hard drive partition)
After that you will witness the fastest OS install since DOS. It gets done in under 5 mins and reboots prompting you to remove the CD. Make sure you remove the CD and let it boot from the hard drive.
It worked just like it did from the live CD except that the network card again needed to be configured. Which was easy given that I had now figured out how to do it.I also added the network card init script to the boot sequence (/opt/bootlocal.sh) to make sure it will be done automatically on every reboot.
After that its time to modify the setup so as to get rid of the regular GUI and set it as a DPF.
So now is the time to open up a terminal window and get your hands dirty with the command line.
First step is to make the login prompt go away and instead make it auto login:
root@box[dsl]# vi /etc/inittabThis makes sure you get logged in as the user "dsl" on every reboot.
~~:S:respawn:/bin/bash -login >/dev/tty1 2>&1
to look like
1:12345:respawn:/bin/bash -login >/dev/tty1 2>&1
Next get SSHD working so you can remotely connect to the dpf:
Append the following to the end of /opt/bootlocal.sh
root@box[dsl]# vi /opt/bootlocal.sh
# start sshd
Next modify the .xinitrc file to replace normal GUI with slideshow and keep disable screen from blanking.
root@box[dsl]# vi /home/dsl/.xinitrc
# put X windows programs that you want started here.
# Be sure to add at the end of each command the &
xset s off
xset s off
/usr/bin/aterm -T “Bash” -e /bin/bash &
Next create a directory for the scripts and photos to reside :
root@box[dsl]# mkdir -p /home/dsl/frame/photos
Edit the /home/dsl/.bash_profile file to look like:
dsl@box[dsl]# vi /home/dsl/.bash_profile
SSH=`env | grep SSH_CONNECTION`
RUNLEVEL=`runlevel|cut -f2 -d' '`
if [ -z “$SSH” ]; then
if [ $RUNLEVEL -eq 5 ]; then
Now we need to install the slideshow software using the debian Apt package manager. Before using the apt package manager we need to enable it. For that in the GUI do the following:
MyDSL > System > gcc1.dsl.info
MyDSL > System > dsl-dpkg.dsl.info
MyDSL > System > Enable Apt
After doing so we get back to the terminal window and first run an update, followed by installing rsync (for syncing the Pictures), Feh (for displaying the pictures), unclutter (for hiding the mouse pointer), ssmtp and mailx (for sending email about IP address changes).
root@box[dsl]# apt-get update
root@box[dsl]# apt-get install rsync
root@box[dsl]# apt-get install feh
root@box[dsl]# apt-get install unclutter
root@box[dsl]# apt-get install ssmtp
root@box[dsl]# apt-get install mailx
Finally edit the /etc/ssmtp/ssmtp.conf file and add the correct outgoing mail server to it.
That concludes the software installation
The ScriptsThe Scripts are available for reference here.
I have even used the same names as my reference project.
The scripts reside in the /home/dsl/frame directory.
I will briefly describe each script:
- 1. cron_start_frame.sh
- This is the script that is run when the frame boots up. It runs unclutter to hide the mouse pointer and starts the FEH slideshow.
- 2. cron_reload_frame.sh
- This is the script that is run when the set of pictures in the frame change and the slideshow must be restarted to reflect that change. It first stops the previous slideshow using the kill.sh script described below and then starts a new one.
- 3. ip.sh
- This script checks if the IP address (assigned by DHCP) has changed. If so it sends off an email to the given email ID informing you of the new IP. This is helpful to access the frame through SSH because thats the only way to access it once you have it running as a DPF.
- 4. turn_off_screen.sh
- This script does what its name suggests. It can be used to save power and the LCD nobody would be around to look at the frame.
- 5. turn_on_screen.sh
- This script does turns the display back on after the previous script has turned it off.
- 6. dir_manual_restart.sh
- This is a script you can use to start a slideshow manually form your SSH shell with a specific folder of pictures. Useful when you want to change the pictures displayed temporarily for a party of when you have visitors.
- 7. sdwn.sh
- This script shuts down the DPF. I use it to shutdown at midnight everyday. It starts back up in the morning at 6am using the bios alarm wakeup. (saves power)
- 8. kill.sh
- This script finds and kills any processes with a given name.
- 9. rsync.sh
- This script uses the rsync tool to connect to a remote rsync server and sync up the local photo collection with it.
- 10. checkdir.sh
- This script when called automatically from cron checks if the photo collection has changed. If so it calls the cron_reload_frame.sh script to restart the slideshow.
- 11 crontab
- This contains an example of the crontab setup. It turns the frame on and off at certain times and does the rsync and checkdir tasks periodically.
After setting everything up reboot the computer and enter the Bios. Most laptops have a automatic start alarm setting. I set that to start the laptop up at 6:00 AM everyday.
Save BIOS settings and let the laptop boot.
After booting if everything is setup correctly the laptop will get the photos from your rsync share and start the slideshow. (refer to this tutorial on how to setup a rsync server on your regular windows pc. )
If you don't have Rsync server setup you can manually copy some photos to the /home/dsl/frame/photos folder.
Now you should also be able to SSH into it from another computer. Check the email ID you used in the ip.sh script and you should have an email showing the ip of the frame.
# ssh firstname.lastname@example.org
Note: You can easily find a disassembly guide on the internet for your particular model of laptop to help make the follwing easy
After getting this basic setup working it was time to convert the laptop into a true digital picture frame.
So I powered it down and got to work with my tools.
It is best to take the disassembly of the laptop in steps and checking if it still works after each step.
KeyboardFirst to go was the keyboard. To remove the keyboard turn the laptop upside down and unscrew it (most laptops have the keyboard screws marked with either a 'k' or a picture of a little keyboard)
LCDAfter making sure it works without the keyboard it was time to separate the display from the base. The way to do this is to find the screws on the base and back that hold it in place. (They are usually marked with a 'd' or something similar) carefully unplug the flat display cable after which the whole display panel should come off easily.
Now to get the LCD free from its plastic prison locate black circular tabs on it. Using a small screwdriver pop them to reveal the screws holding it together.
After Unscrewing the screws you should be able to pull apart the front cover to reveal the LCD and its mounting frame. Find the screws holding the LCD onto the frame and free it. After the LCD is free of all the plastic rest it on a book and connect it back and make sure everything works.
MotherBoardNext get rid of the palm rest and touchpad, Unscrew the rest of the screws on the back and unplug it. Then pry it open. (Some laptops require the touchpad to be present to boot up so check if it will work without it. If it does not you might have to find a way to keep the circuits connected while getting rid of the plastic.)
The final step is to unscrew the motherboard and remove it clear of all plastic.
Finally after making everything still works its time to put it in a frame.
The FrameUpon insistence from my dear wife for a nice looking frame I bought a $22 Broad wooden 11"x14" frame from Aaron Brothers. Unfortunately this nice looking frame was not deep enough to stick all the laptop electronics. Being an apartment dweller and a pauper when it comes to tools I could not build the frame myself. So I bought another 11"x14" frame this one a 2 inch deep box variety. Then I used some epoxy glue to stick it to the back of the nice frame. I let the glue do its magic over night weighing down the frame with some weights.
MountingAnother problem I had was the laptop screen is not the same size as a standard photo print so I had to get a Matte custom cut to fit it properly.
So finally after careful measuring and cutting several templates I centered the LCD just right and held it in place using cardboard on all sides. Covered the whole thing with a piece of board that came with the frame with a hole cut into it to pass the flat LCD cable. Next i hacked up the base plastic of the laptop to a size that would make it easy for me to mount the motherboard into the back frame. I stuck the plastic onto the bottom board covering the LCD such as to allow me to plug in the LCD cable onto the motherboard.
Final CheckFinally I cut holes in the back of the frame to allow for the power cable to pass and for access to the power switch. Also made one final check to see that it boots and everything works as planned.
HangingAnd once again after making sure everything works right I closed it up and Hung it up on the wall.
Next steps are to work on adding more functionality. I will keep this page updated with the details as I do that.