A - +

DIY: Digital Picture Frame

Digital Picture Frame #2 I have just finished hanging my second Digital Picture Frame (DPF). My first DPF was created almost a year ago, and it hangs on the wall in my office at work. It has been running fine for almost a year, with very little need of attention. The second DPF is now displayed proudly in my living room. Both frames were created from old laptops I had lying around the house. I started thinking about making a DPF after I bought a Ceiva for my Grandmother in 2001. Then last year I saw several do it yourself DPF projects and thought, hell I can do that.

* When powered on, the frames should boot, log on to x
windows, and start a slide show automatically.
* The frames will connect to a TCP/IP network and
receive an IP address via DHCP.
* If the IP address changes, the frames should email me
with the new IP address.
* SSH server should be enabled and will be the primary
way to interact with the frames when needed.
* The frames should phone home very so often and sync its
local copy of photos with those contained in a directory
on one of my home servers.
* The display on the frame should be set to turn off during
the night and turn back on in the morning.

I wanted my frames to require no user interaction. The frame that I built a year ago has only stopped working once, and then it was a problem related to a rule on my home firewall. I have Broadband connection and a small home network, with a several windoze workstations and a dedicated Linux box that acts as file server. Photos are stored on the file server via a SAMBA share. I decide to create a folder within the SAMBA share point to store photos for the frames. The frames use a program called rsync and check very four hours for new photos on the SAMBA share. FEH, an image viewer program, restarts every night and adds any new photos to the random slide show presentation.

Since the SAMBA share is a mapped drive on the windoze boxes, it is easy for my wife to put new pictures on the frames without having to use Linux commands. She simply copies the photos to the frames folder on a mapped drive on her windoze box.

Linux was my OS of choice for the frames. I guess I could have tried to use Windows, but remote administration and scripting of events would have been problematic. I much rather open a remote shell and modify a few bash scripts than fight with Windows. I decided on Damn Small Linux (DSL) as the distribution, because it was easy to install and required virtually no configuration. I simply did not require the power of Gentoo, Debian, or one of the other larger distros.

I installed DSL version 2.3. I will walkthrough the steps I used to create my latest frame and provide the scripts that I am using as well. However, I will take not responsibility for any damage that may result if you decide to follow my lead.

Now I decided to install Linux on the hard drive, but you certainly could boot from a CD-ROM and run everything from memory if you wanted.

Getting Started

Download and burn a CD image of Damn Small Linux (DSL)

Boot from the DSL disk and on the DSL desktop, right click and select:

Apps > Tools > Install to Hard drive

Walk through the installation to the local hard rive.

After you reboot successfully into the GUI open a terminal and get to work:

Enable auto log on by editing /etc/inittab

root@0[dsl]# vi /etc/inittab
Change line:
~~:S:respawn:/bin/bash -login >/dev/tty1 2>&1 to
1:12345:respawn:/bin/bash -login >/dev/tty1 2>&1

Now DSL will auto login as the user dsl and start your x manager.

Configure the SSHD server on the frame to auto start on boot to ease remote administration

root@0[dsl]# vi /opt/bootlocal.sh
Append the following to the end of bootlocal.sh
# start sshd
/etc/init.d/ssh start

Edit the .xinitrc file to keep the screen from blanking out, to start x windows, and to start the slide show on the frame.

root@0[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 &
#startx &
/home/dsl/frame/cron_start_frame.sh &
fluxbox 2>/dev/null

Change to the dsl home directory and make a directory that is called frame and a directory inside of frame called photos.

root@0[dsl]# cd /home/dsl
root@0[dsl]# mkdir -p /home/dsl/frame/photos

The frame directory will be where the photos are stored and the scripts that manage the frame reside.

Edit the /home/dsl/.bash_profile file

root@0[dsl]# vi /home/dsl/.bash_profile
export DISPLAY=:0
RUNLEVEL=`runlevel|cut -f2 -d' '`
if [ -z “$SSH” ]; then
if [ $RUNLEVEL -eq 5 ]; then
cd /home/dsl/frame

The "export DISPLAY=:0" line is very important. With out this line, any scripts run from a remote ssh connection will not show on the display.

Now lets install the software we will need to turn this Linux powered laptop into a digital picture frame

Click on the MyDSL icon on the desktop and select
MyDSL > System > gcc1.dsl.info
MyDSL > System > dsl-dpkg.dsl.info

This will allow us to download programs using the Debian package utility.

Open a terminal and run apt-get

root@0[dsl]# apt-get update

This command updates the local cache of available programs

root@0[dsl]# apt-get install rsync

The rsync remote-update protocol allows rsync to transfer just the differences between two sets of files across a network link.

root@0[dsl]# apt-get install feh

FEH is an image viewer program that is used on the frames to function as a slide show viewer.

root@0[dsl]# apt-get install unclutter

unclutter removes the cursor from the screen so that it does not obstruct the image.

root@0[dsl]# apt-get install ssmtp

ssmtp is a send-only sendmail emulator for machines It provides the functionality required the scripts to send mail. Make sure that you edit /etc/ssmtp/ssmtp.conf to point to your out going email server.

root@0[dsl]# apt-get install mailx

mailx is used to send email from scripts


These scripts work for me. You will want to modify them for your installation. I have had no training in programming and I am sure that it shows. If you use any of these scripts and update them, I would be interested and seeing your changes.

ip.sh is the script that checks the IP address of the frame and emails me if there is a change.

root@0[dsl]# cd /home/dsl/frame
root@0[frame]# vi ip.sh
# Script to email when the IP address changes
# drware@thewares.net
RECIP="Your email address here"
mv /tmp/ip.tmp /tmp/ip_old.tmp
/sbin/ifconfig > /tmp/ip.tmp
diff /tmp/ip.tmp /tmp/ip_old.tmp > /tmp/ip_diff.tmp
RUNNING=`cat /tmp/ip_diff.tmp | wc -l`
if [ $NUM -lt $RUNNING ]
cp /tmp/ip.tmp /tmp/ip_mail.tmp
head -n 2 /tmp/ip_mail.tmp| tail -n 1 > \
cat /tmp/ip_mail2.tmp | mailx -s “DPF IP Change: \
`date +%k%Mhrs-%Y%m%d`” $RECIP
exit 0

The turn_off_screen.sh script does what is says and is used to turn the screen off via cron

root@0[frame]# vi turn_off_screen.sh
# Script to turn off display
# drware@thewares.net
# Set display so that script will effect screen on frame
export DISPLAY=:0
/usr/X11R6/bin/xset s reset
/usr/X11R6/bin/xset s on
/usr/X11R6/bin/xset s 1
exit 0

Surprise, turn_on_screen.sh is used to turn the screen on via cron

root@0[frame]# vi turn_on_screen.sh
# Script to turn on display
# drware@thewares.net
# Set display so that script will effect screen on frame
export DISPLAY=:0
/usr/X11R6/bin/xset s reset
/usr/X11R6/bin/xset s off
exit 0

The cron_start_frame.sh script is used to start the slide show after the frame is powered on or rebooted.

root@0[frame]# vi cron_start_frame.sh
# Script to run Digital Picture Frame using Feh
# drware@thewares.net
# Change number below to the duration, in seconds
# for each photo to be displayed
# hide the cursor after 15 seconds
/usr/X11R6/bin/unclutter -idle 15 &
# Start slide show
/usr/bin/feh --quiet --recursive --randomize
--full-screen \ --slide show-delay $DELAY \
/home/dsl/frame/photos/ &
# Phone home and sync
exit 0

The cron_reload_frame.sh script is used to restart the slide show on the frame via cron. Restarting the slide show will add any new photos that have been copied to the frame to the presentation.

root@0[frame]# vi cron_reload_frame.sh
# Script to run Digital Picture Frame using Feh
# drware@thewares.net
# Change number below to the duration, in seconds
# for each photo to be displayed
# Set display so that the script will effect
# the screen on the frame
export DISPLAY=:0
# Stop the currently running Slide show
/home/dsl/frame/kill.sh feh
sleep 10s
# Start slide show
feh --quiet --recursive --randomize --full-screen \
--slide show-delay $DELAY /home/dsl/frame/photos/ &
exit 0

The manual_restart.sh script is used to restart the slide show from the command line. The script asks for input on the duration in seconds that each photo should be displayed.

root@0[frame]# vi manual_restart.sh
# Script to run Digital Picture Frame using Feh
# drware@thewares.net
# Set display so that the script will effect
# the screen on the frame
export DISPLAY=:0
# Stop the currently running Slide show
/home/dsl/frame/kill.sh feh
echo “”
echo -n “Enter the number of seconds for photo rotation”
echo -n “and press [ENTER]: ”
read var_seconds
echo “”
/usr/bin/feh --recursive --randomize --full-screen \
--slideshow-delay $var_seconds /home/dsl/frame/photos/ &
exit 0

The dir_frame.sh script is used to restart the slide show from the command line and will ask you which sub directory to display. I use this script when I want to show off photos from a recent SCUBA diving trip or vacation.

root@0[frame]# vi dir_frame.sh
# Script to run Digital Picture Frame using Feh
# drware@thewares.net
# Set display so that the script will effect
# the screen on the frame
export DISPLAY=:0
# Stop the currently running Slide show
/home/dsl/frame/kill.sh feh
echo “”
echo -n “Enter the number of seconds for photo rotation ”
echo -n “and press [ENTER]: ”
read var_seconds
echo “”
echo “Available options for the directory are:”
ls /home/dsl/frame/photos
echo “”
echo -n “Enter the directory of photos to display and”
echo -n “press [ENTER]: ”
read var_dir
echo “”
/usr/bin/feh --randomize --full-screen --slideshow-delay \
$var_seconds /home/dsl/frame/photos/$var_dir &
exit 0

The kill.sh script is called by other scripts so the slide shows can be stopped and restarted.

root@0[frame]# vi kill.sh
if [ ! -z “$1” ]; then
PIDS=`ps -ax | grep $PROCESS | sed -e “s/.*killp.*//”
-e “s/ *\([0-9]\{1,6\}\) .*/\1/” | grep -v “^$”`
if [ ! -z “$PIDS” ]; then
echo Killing $PROCESS pid=$PIDS
kill -9 $PIDS
echo No process $PROCESS in process list
echo Usage : $0 process_name

The rsync.sh script syncs the photos on your frame with the photos on your central workstation or server.

root@0[frame]# vi rsync.sh
# Script to copy and remove photos on the DPF
# Script requires that a rsync server on a machine
# separate from the DPF be running and configured
# drware@thewares.net
#When frame is inside your network and will connect
#via an intranet
rsync -azv --password-file=/home/dsl/frame/.rsync.pwd \
--delete --bwlimit=2048 dpf1@$INTERNAL::dpf1 \
#When frame is external to you network and must connect
#via the Internet
#rsync -azv
--password-file=/home/dsl/frame/.rsync.pwd \
#--delete --bwlimit=2048 dpf1@$EXTERNAL::dpf1 \
exit 0

As the user dsl run the crontab -e command and automate the functions of your frame.

dsl@0[frame]# crontab -e
# Phone home and sync every 4 hours
15 */4 * * * /home/dsl/frame/rsync.sh
# Check IP address every 30 minutes
*/30 * * * * /home/dsl/frame/ip.sh
# Restart Frame every morning at 5:30
# to include any new photos in rotation
30 5 * * * /home/dsl/frame/cron_reload_frame.sh
# For Frame at work:
# Turn off display every night at 7:30 and
# turn on display at 7:59 every morning
# Monday - Friday
#30 19 * * * /home/dsl/frame/turn_off_screen.sh
#59 7 * * 1-5 /home/dsl/frame/turn_on_screen.sh
# For Frame at home:
# Turn off display Sunday - Thursday at 10:45 and
# Turn off display Friday, Saturday at 0:15 and
# Turn on display Monday - Friday at 5:59
# Turn off display Monday - Friday at 7:30
# Turn on display Monday - Friday at 15:59
# Turn on display Saturday, Sunday at 7:59
45 22 * * 0-4 /home/dsl/frame/turn_off_screen.sh
15 0 * * 0,6 /home/dsl/frame/turn_off_screen.sh
59 5 * * 1-5 /home/dsl/frame/turn_on_screen.sh
30 7 * * 1-5 /home/dsl/frame/turn_off_screen.sh
59 15 * * 1-5 /home/dsl/frame/turn_on_screen.sh
59 7 * * 0,6 /home/dsl/frame/turn_on_screen.sh
45 3 * * * crontab -l > /home/dsl/frame/crontab.bk


We now have a laptop that is running Linux, when powered on will login automatically, and start a full screen slide show. Problem is it still looks like a laptop. Now is the time to start taking the laptop apart until you have something you can stuff into a picture frame.

It is very easy to turn the laptop into a non-working, smoking pile of junk, so proceed very carefully and in small steps.

I decided that I would remove everything from the screen or lid of the laptop until I had the LCD striped down to its bare components. Then I cut down a thin piece of plywood and hot glued the LCD in place. I then placed the plywood in the frame with a piece of glass and a mat.

Parts that were removed
Pile of parts removed from the laptop.

Bare Laptop
Laptop stripped down and ready for framing.

There are many ways to build the actual frame. For me the easiest was to buy a large wooden frame (18 inches by 23 inches) and then build a shadow box on the back.

Back of Frame
Shadow box in place, laptop installed.

I mounted the keyboard and touch pad on the back of the frame just in case I am unable to access the frame via SSH.

Frame back with cover
Back of frame installed with keyboard and touch pad in place.

So there you have it. A DIY: Digital Picture Frame that rsyncs with a central server running SAMBA and requiring little or no user interaction to function.

Digital Picture Frame #2
Second Frame hung in my home.

First Frame
First Frame hung in my office at work.

... Andrew wrote:

Hey, just added your site to my link list of digital picture frame projects [http://www.likelysoft.com/h...]. The frames look great, I am hoping to get another one done this summer. Thanks for the submission!

18:46 GMT on Apr 26, 2006

... Chris wrote:

something like this has long been on my todo list, all I lack is a donar laptop

an interesting addition might be to mount the touchpad, or maybe just wire some small switches to its buttons, to be able to use it to manualy pause/start/back/forward in the “playlist” of pictures.

10:23 GMT on May 02, 2006

... Lok wrote:


I feel quite inspired by the project, and I am having a go at it now. At the moment I'm getting the auto hibernate/wake up stage, and have stumbled upon an issue. While auto-hibernating is okay, when the computer wakes up the screen is black (except for a blinking cursor on top left) until I move the mouse or press a key. I'm using win 2000 pro on an old Acer Travelmate 210T, but I don't really know if it's a hardware or software issue.

Have you had similar issues? Any thoughts?

Great project!


23:59 GMT on May 09, 2006

... Nick wrote:

I'm currently working on a frame and as I'm new to Linux I depended heavily on the code you presented here. Despite my naivety I managed to whip up what I consider to be an improvement to your cron_reload_frame that will restart feh only if and when the local image files change. That way cron can run the script every couple of minutes and feh only restarts if there is a change. Let me know if you'd like to take a look at it.

03:37 GMT on May 31, 2006

... drware wrote:

Hello Nick,

I am glad that you found my post on digital picture frames useful.

I would like to see your improved cron_reload_frame script. It sounds like a good improvement on what I am using.

10:56 GMT on May 31, 2006

... siamesekat wrote:

That is a great setup. I am juststarting to make a frame from a donated gateway 2000 9100. All I have to find now is the hard drive adapter. The lady didn't let me have the drive and bracket. Ahh well, thinking about just trying to solder a drive ontop the motherboard.

Anyways I really like what you have done. I want o run linux on mine also but just haven't figured out if I can run it from a floppy/cd combo or if I should go ahead and get a drive in there. Would it be possible to get that cron_reload script?


07:33 GMT on Jun 05, 2006

... daimchoc wrote:

Just wanted to let you know that I've used your guide and I have built it on and IBM Thinkpad i1420. All I need to do now is to take out the case and build a frame around it. Thank you so much. More power to you.

13:29 GMT on Jun 06, 2006

... drware wrote:

Nick emailed me his checkdir.sh script. It will restart the frame only if the photo directory has changed. Run it via cron or call it from the rsync.sh

root@0[frame]# vi checkdir.sh

#monitor directory

mv /home/dsl/frame/photos.lst /home/dsl/frame/photos.last
ls -R /home/dsl/frame/photos > /home/dsl/frame/photos.lst
cmp --quiet /home/dsl/frame/photos.lst /home/dsl/frame/photos.last

if [ $exitcode -ne 0 ] ; then
echo “New Files... Reloading Frame”
echo “Yawn...”

exit 0

I am glad to see from the comments on this post that others are finding this information useful. Remember an old laptop is a terrible thing to waste.

13:39 GMT on Jun 07, 2006

... daimchoc wrote:

Hi. Got a question. Are you running you DPF using a wire d or wireless connection? If it's wireless, are you using WEP or WPA? Thanks.

14:09 GMT on Jun 12, 2006

... marc wrote:

Excellent work. Thank you. I've had to learn more about Linux than I anticipated. A few things about my experience I'll share for those who are using your work as a guide:

1. I copied all of your code into Beaver (one of the pre-loaded editors in Damn Small Linux, for those of you who don't yet know), and it took me a long time to realize the double quotes and some single quotes do not copy correctly, causing some issues.

2. I was unable to get your kill.sh to work for some reason, so I replaced all references to:
/home/dsl/frame/kill.sh feh
sudo killall feh
I have no idea if this is a terrible idea, but it's working so far.

3. I think you may have a typo in your code for cron_start_frame.sh. “slide show” should be “slideshow”

Again, thank you for all of your hard work and excellent documentation.

23:05 GMT on Jun 18, 2006

... xutos wrote:

Hi, I booted up DSL on an old Dell laptop but all the graphics come up green! Have any suggestions?

07:42 GMT on Jul 25, 2006

... Dan wrote:

Hir f2 when it prompts you to, then boot with the xsetup command

“dsl xsetup”

then choose the second option on the next screen, and continue along with the prompts.

15:50 GMT on Jul 26, 2006

... Josh wrote:

Hi, I am following the instructions but got stuck at the point where I need to run crontab -e under the dsl user.

When I run that command it gives me a COMMAND NOT FOUND error.

Any help you can give would be much appreciated.

19:55 GMT on Aug 06, 2006

... drware wrote:

I do not remeber having to install it. Maybe it is not in your path.

Try: /usr/bin/crontab

If that does not work google apt-get and crontab and see if you can find the package that contains crontab.

Good luck!

20:35 GMT on Aug 06, 2006

... Shepy wrote:

You are turning off the screen to save power over night...

Have you considered having it shut down the machine entirely, and then use the bios timed power on, if available on the machine, to turn it back on int the morning?

20:22 GMT on Aug 26, 2006

... Steve wrote:

Hello. I really like your idea of connecting the frame to a server, but i'd like to make a few of these as Xmas presents and want to make one small change: i want it so that you can just copy the jpg's from a windows computer into the frame via a shared folder, then have something on the frame that auto resizes the pics so as to save space. Also, is there any way of having the pictures displayed at random, or do they always come in the same order. Please let me know what I would need to do for these changes. --Thanks

14:59 GMT on Sep 27, 2006

... drware wrote:

The random part is easy, the scripts I wrote are doing that already using the “--randomize” switch built into FEH:

/usr/bin/feh --randomize

As far as connecting to a shared folder on a Windoze machine, I would think that would be pretty ease. Install a samba client on the frame and then write a script to connect and copy the images. You can resize an image using the convert command.

Hope that helps!

11:39 GMT on Sep 28, 2006

... Steve wrote:

OK, thanks for the help, but since i'm really a newbie, i'm a bit lost.

I changed all the files, installed al the programs/packages, and then I created all the scripts above and saved them into my /hom/dsl/frame folder.....but what makes the scripts run. When the computer boots up it's just loading the default screen with a terminal open and no icons on the desktop. I'm sorry if this seems a bit elementary, but I just don't get it.

15:18 GMT on Sep 28, 2006

... Steve wrote:

OK, i did get it loading up after some tinkering...I had to change the cron_start_frame.sh file so that DELAY="300" AND THE --slide show-delay $DELAY tags were changed to a var_seconds variable . It then worked like a charm. I don't have all the features of your scripts working yet, but i'll keep you posted.--Thanks

19:41 GMT on Sep 28, 2006

... Steve wrote:

OK, I had to install Cron...got that going somewhat: when i run crontab -l it gives: no crontab for dsl

Basically i'm unable to run any scheduled tasks with cron (turning the screen off and then back on).

Any help would be greatly appreciated.

21:41 GMT on Sep 28, 2006

... drware wrote:

What happens if you run “crontab -e”?

That should create the crontab file.

08:28 GMT on Sep 29, 2006

... Steve wrote:

dsl@box:~$ crontrab -e
no crontab for dsl - using an empty one
/bin/sh: line 1: /usr/bin/editor: No such file or directory
crontab: “/usr/bin/editor” exited with status 127

11:11 GMT on Sep 29, 2006

... twe2002 wrote:

Okay, I am close on finishing my DPF !

First, the crontab issue discussed here, crontab looks for an editor, which is defined to be /usr/bin/editor. If you know vi you can simple create a symbolic link like this “ ln -s /usr/bin/editor /usr/bin/vi”. Or copy vi as editor (or any other editor you like), i.e. “cp /usr/bin/vi /usr/bin/editor”.

I had a problem with my laptop. I got two bad scratches on the top of the LCD. I rewrote a couple of scripts (I am no guru, but I managed it) to resize my pictures so that those scratches will not show as much.

I still run feh in full screen mode (1024x76 but all my pictures are resized after the rsync to 900x650, this way I get a black border around the pictures and it doesn't show the bad scratches. This also helps when your frame is showing a smaller area than your laptop screen is and you still want to use that particular frame.

To resize I downloaded imagemagick with apt-get install and then you have two new commands at your disposal (convert and mortigfy or something like this) in /opt/imagemagick/bin.

Of course each time I resize it changes the files and rsync would download all the picture again and the script would need to resize it again, so I modified the rsync script to include -u (update), so if the file is on the laptop and newer, rsync won't overwrite it.

As I said, I am almost done...

I also plan to either run a webserver with PHP and have a website. So, the picture frame will be controlable via a webbrowser. As my old thinkpad doesn't like to be just turned off, I will add a button onto my website to shut the frame down, to change the display frequence as well as to do an rsync.

- Twe2002

20:16 GMT on Oct 01, 2006

... steve wrote:

Hello, Thanks for the crontab info...I got that to work nicely. Also, I actually did the same thing with ImageMagick (convert), but ran into a few issues, one a biggie, one not so big...maybe you can help me out.

1. I run this script: /opt/imagemagick/bin/convert -resize 800x600 /home/dsl/photos/*.jpg /home/dsl/frame/photos/*.jpg ---Hoping that convert will take all my pics from the home/dsl/photos and put them in the frame folder...It did do this, but named each photo *1.jpg, *2.jpg, and so on. I tried a bunch of different commands, but could not get the file names to just be the same as the original. (i also tried to have convert overwright the originals but could figure that out either).

2. The laptop I am doing this on is a Pentium 1, 133mhz, 32mb ram....when i tried to do this same command and had one 6 megapixel photo in the folder, it took it about 7 minutes before i just killed the task. The same exact task took about 7 seconds on my Celeron 900mhz desktop running the exact same software. Any ideas would be great because I just don't see how this is gonna work with the big photos at this point.


02:03 GMT on Oct 02, 2006

... Steve wrote:

OK, scratch the 7 minute/kill time on the convert...I checked it out again and redid it and it took about 1 min 20 sec per photo.....shorter, but still too long. Any ideas?

12:21 GMT on Oct 02, 2006

... TWE2002 wrote:

Actually I don't use convert, I use the command “mogrify”.

This will resize all your pictures in a folder under the same name:
“mogrify -resize 256x256 *.jpg”.

I also changed the rsync command in the rsync.sh script file to include “-u” so it doesn't download the picture again (because it is changed because of the resizing).

For the speed of resizing, I have no idea. My pictures are ~1Mbit/s and it takes a little time, around 5 seconds or so per picture. Start the mogrify or convert with “- verbose” and see what it actually does.

I am not too concern about the time it takes to resize. Feh will keep on diplaying the pictures while in the background the script is resizing and will restart feh ones it is done, so it is not like there is nothing to see on the DPF while he is crunching on the resizing.


13:42 GMT on Oct 02, 2006

... Steve wrote:

TWE2002, I am actually trying to do the same thing. I put on Gallery (gallery.menalto.com) but am not sure how to put controls on the php site so that the picture frame is affected. I want to be able to shut it down, restart it, and set it up so that a particular album on the site can be displayed as the slideshow in feh. If you have any ideas, please let me know.--Thanks

01:09 GMT on Oct 11, 2006

... Matt wrote:

Great ideas here.
I'm mostly done with the software side of things with a few changes and a few notes:
- For the poster who was having the dell issues with the green screen: I had similar issues, and changing it to boot in framebuffer mode (dsl fb1024x76 cleared this up. You can change the default by the “default” option in /boot/grub/menu.lst
- I'm running it via a boot cd with no harddisk (all my laptop disks are pretty loud at this age), so I've had to make some changes with a custom .dsl file and some remastering, but it appears it's working.
- Running it as I am, I needed to move the rsync.sh call above the feh call in cron_start_frame.sh, as otherwise, the photos dir was empty and feh died for lack of pics on the first run. This way, it was populating photos first.
- For the poster who was looking to pull photos from a windows share, samba (as mentioned) is one way to do it, but if you want to stay with the existing mechanisms, there appears to be a port of the rsync server for windows, or I imagine you could compile one using cygwin.


11:16 GMT on Oct 15, 2006

... Matt wrote:

correction to my last comment about the framebuffer mode. It seems that without the spaces, it ended
( dsl fb1024x768 ) with a

11:18 GMT on Oct 15, 2006

... Cedric wrote:

Hey, I am also working on a project like this (unfortunately not as fancy as this one, oh well...), but when the laptop has no user input (mouse or keyboard) for around 10minutes, it turns off its screen.
It will probably have something to do with power management, but APM does not seem to be any help (or maybe i don't know how to use it right).

Can anybody help me please?
Thanks a lot!!

17:09 GMT on Oct 25, 2006

... Cedric wrote:

my bad, editing apm's config file and using xset resolved my problem. i should have read this page a bit better before asking

10:30 GMT on Oct 26, 2006

... Joe wrote:

This is great! I built a DPF myself before I found your site. I wanted to use Linux instead of Windows but I'm not very familiar with Linux. Maybe I'll take a stab at making another one using your directions.

If anyone cares to see my wall-hanging Windows 2000 DPF that pulls images wirelessly from my Google Photos account, I have posted a detailed write-up with lots of pictures at http://www.ferhoodle.com.

12:04 GMT on Oct 27, 2006

... Ted Stanford wrote:

I need to replace the dc power in plug on the lifebook e6595 and need to find a takeapart guide and the part itself. Any suggestions

11:48 GMT on Oct 31, 2006

... scotth wrote:

Outstanding job! Has anyone played around with making it a service? Then you could just run a restart command.

11:51 GMT on Nov 01, 2006

... Bill S wrote:

I think that DSL may end up being great for me as a picture frame. I'm struggling with the fact that every time the frame shuts down it fails to umount the partion which leaves it dirty. THis causes a fsck at reboot and then it requires me to hit ctrl-d to continue and reboot. After the second reboot it's fine. Any ideas about this?

also I think that the line:
1:12345:respawn:/bin/bash -login >/dev/tty1 2>&1
should really be:
1:2345:respawn:/bin/bash -login >/dev/tty1 2>&1

01:42 GMT on Nov 08, 2006

... James wrote:

Re Bill S:

I had the same problem for a while too, until recently, when I reinstalled DSL, and decided to skip that step, where it tells you to change the line in the inittab file. If I leave it unchanged, it boots into run level S, and unmounts everything clean and proper. No more fsck-ing.

The start of my inittab file is as follows:
# /etc/inittab: init( configuration.
~~:S:respawn:/bin/bash -login >/dev/tty1 2>&1 </dev/tty1

Hope that helps.

01:34 GMT on Nov 11, 2006

... Brian wrote:

You can fix the fsck problem that occurs every other time you reboot by using “su - dsl” in your /opt/bootlocal.sh file instead of changing the /etc/inittab file.

08:16 GMT on Nov 11, 2006

... James wrote:

Just out of curiosity, what is the point of running aterm at boot, with title “Bash” ?
Is it supposed to do anything, like take the outputs from the scripts and display them there? Mine just sits there.

02:13 GMT on Nov 12, 2006

... drware wrote:

I use the aterm window for “emergency” access to my DPF. If for some reason I can not access the frame remotely, I can use the keyboard to interact with the aterm window. I have the aterm window open at boot so I do not have to use the mouse to try and open it if the need should arise.

09:03 GMT on Nov 13, 2006

... scotth wrote:

Does anyone know where FEH stores its index of files after you start it? It would be nice to be able to update the directory that FEH is currently pulling the pics from and have FEH keep going but with the new files...

Also, FEH has a switch called “--hide-pointer” that does just that! So you might not need “unclutter”?

20:07 GMT on Nov 14, 2006

... Sean wrote:

This is a great project! Thanks for the write up.

I have a question:
could this project be done with a live cd and usb pen drive?

Just wondering if it could be done with out a hard drive?

13:30 GMT on Nov 17, 2006

... Pierus wrote:

Sure you could modify this setup to run without a hard drive. DSL was written to run in diskless environments.

16:57 GMT on Nov 20, 2006

... Patrick Ryan wrote:

This is the closest project I've seen to what I want to do. However, I'd like to do a totally diskless frame - I've got some CF->IDE interfaces and I think booting from an old CF card would be fast, quiet and cheap. The problem is one of storing the images. It's fine if I run one at home, since I can have it read from a shared network drive - but I'd like to do one for my Mom as well, and she lives 3000 miles away...

I think flickr or picasa are really promising options here, since I could maintain a dedicated account and have the system read from it. Is there a lightweight linux client for either of these services that might be appropriate to use with a setup like this?

12:56 GMT on Nov 26, 2006

... lazyNinja wrote:

have you thought about setting up a web server? your mom's could just collect the pics from there.

01:25 GMT on Nov 28, 2006

... Patrick Ryan wrote:

Hmmm... yeah, that's a possibility - although that raises security issues. I just found this:


And am going to try it out. First time around I'm going to see if I can get it running under Debian as listed in the instructions, but if I succeed with that, I may move to a smaller distro, like DSL.

20:40 GMT on Nov 28, 2006

... Patrick Ryan wrote:

Bah... I'm starting to think flickr is not a viable option. The flickrframe package wants Debian, including apache. A full Debian install is too large for what I want to do - or, at least, I'm not Linux-savvy enough to know what chunks I can pare off after installing everything so as to get the size down. And DSL is version incompatible with the perl that apache needs, so it appears that I can't use DSL.

I also considered using “flickrfs”, a file system that mounts a flickr account - but it's written for Ubuntu, and there doesn't appear to be a FUSE package for Debian/DSL.

So I'm back to drware's method. I'm still stuck on how to do this in a diskless environment, though. I could have perhaps 100MB of image storage space left on my 512MB CF “drive” by the time everything's installed. That leaves enough room for a nice little selection of images, but only if I can remotely update them with reasonable frequency.

The web server idea seems to be a good possibility, but I'm not clear as to how to have the DPF pick up the images. Is there an rsync equivalent that can pull images from a web server?

11:49 GMT on Dec 02, 2006

... Patrick Ryan wrote:

OK, I'll answer my own question (to some degree):

There IS an rsync equivalent that can work with webservers. It's called... “rsync”. HOWEVER, you have to have ssh access. I'm working on that, but it's not looking like my host allows that. So let me modify my question: is there an rsync equivalent that can pull images from a web server to which I don't have ssh access?

21:30 GMT on Dec 03, 2006

... Kelly wrote:

I found your pages helpful, I had recently used an old laptop that eventually fried. Now I am inspired to build another. While reading through your page, I realized I wanted a slide that would show me the current weather conditions. I wrote a combination of PERL, and bash scripts and used graphicsmagick to create the slide.. If you are interested, let me know. Thanks for the descriptive page,

18:09 GMT on Dec 05, 2006

... Wim Verhaert wrote:

I just finished my own DPF using this website and a website about how to remaster the DSL live CD (http://www.linuxforums.org/...).
It took me a long time to get it right and even now it is still not 100% the way I'd like it.

Here are some hints and tips I struggled with,..maybe it helps anyone to speed up the process on your end.

I had an old Toshiba laptop with a very noisy HD, so installing it on the HD was not an option, so I went the route of running it all in memory. This obviously had me figure out how to remaster the liveCD with crontab, WEP, remote user login, rsync etc on the Live CD.

Here are some tips in cause you want to do that yourself as well.

In order for remote ssh access to work I logged in on the laptop, went to root (I know not recommended, but I like the root account), changed the root password and then copied the /etc/shadow file to the proper location on the remastering CD.
This way I hardcoded the passwd to something I know and allows me to login.

The WEP key for my wireless ,went into a script started from the /etc/bootlocal.sh and I also added the same info in the /etc/pcmcia/wireless.opts file.
The script used contains this (start_wireless.sh) :
export PATH
#just to make sure it does not pick up the neighbors

iwconfig $WLDEV freq ”$FREQ“
iwconfig $WLDEV essid ”$ESSID“
iwconfig $WLDEV key ”$KEY“

#hardcode the ipaddress
ifconfig eth0 netmask broadcast up
route add default gw
echo ”nameserver" >> /etc/resolv.conf
The reason why I hardcoded my ip address was, so I could use this to add it to my rsync servers configuration file. So that I don't require a password to login when pulling down new pictures.

The last item was to install the crontab.
Once my network was up and running I used the 'apt-get install cron' and then copied my crontab file (like mentioned above) in the /etc/crontab location. This seems not to work ,..
So this is where I am currently at, anyone any ideas why this will not work?
Or how do I get around this so that I can schedule the rsync etc.?



22:48 GMT on Dec 05, 2006

... beakmyn wrote:

Pretty similiar to what I did a while back. Good job. I do have one suggestion for those that are runninng on smaller displays (mine 800x600) I let feh resize the pictures on the fly using the -Z (--auto-zoom) option

feh -qzZFr -D 300 /home/dsl/frame/photos &

11:51 GMT on Dec 08, 2006

... beakmyn again wrote:

So far it's all working well except for the rsync part. I've not used this and if you could give more info as to how to set up rsync to grab from a Windows XP machine.

Right I just Samba to map to a shared drive on my XP box and then use emelfm to manually copy the files.

Let's assume:

XP local user
Username: dpf1
password: dpf1

DPF local user
username: ?
password: ?

I see there's a cygwin rsync server for XP but I have no idea how to use it. Is it needed?

Where/how is the .rsync.pwd created?

BTW, the only way to get crontab to work for me was to map the editor to vi. Good thing I know vi

14:26 GMT on Dec 08, 2006

... Jon wrote:

In response to some of the questions regarding “apt-get” and “crontab”, you must first activate Apt. Right-click the desktop, go to Apps, Tools, Enable Apt. This will “turn on” the apt-get system. The package is downloaded and installed and then you can proceed with the rest of the installs.

For “crontab”, just use 'apt-get install cron' at the root prompt.

I'm using the latest DSL from the website which I believe was v3.1. After a little more tweaking, I think I should have a funtioning frame! Thanks drware for all your documentation! Fantastic job!

15:34 GMT on Dec 08, 2006

... Walter wrote:

Hey Kelly, could you possibly share your weather scripts? I am making a picutre frame for the folks' gift, and I thought displaying the weather might be nice. I was thinking of pausing/stopping the slideshow, show the weather update for a minute or so, and then continue the pics.

22:52 GMT on Dec 08, 2006

... Kelly wrote:

Walter, you can contact me at kelly (fill in the blank) mcniece (another fillin) com. I will send it to you.

I will post my script on my website when I get some things worked out as well. You don;t have to stop the slide show.... if you have FEH start and stop periodically. The script generates a slide that gets put into the normal rotation. You don;t have to do anything but sit back and enjoy the pics.

I also created a script that lest me send a message to my wife. It takes standard input from the user and generates a slide with the message.

This all uses graphicsmagick/imagemagick code(very easy to use). and perl, you may have to change the script some for your system.

Let me know,

15:13 GMT on Dec 09, 2006

... Walter wrote:

Sorry for being a luddite, but is kelly atat or kelly dotty. I am assuming mcnie... is the domain.

18:51 GMT on Dec 09, 2006

... joe wrote:

This looks real good..I'm just getting confused between the pdf version and the web version...and where spaces should be and not be.

Anyone willing to email their working files...I'd appreciate..christmas is soon and not much time to learn right now

joe dot oldendick at gmail.com

03:46 GMT on Dec 17, 2006

... Walter wrote:

I am mounting a power button on the wooden frame. I anticipate that if the DPF is hung/not working, the person can press the button to shut off the DPF, and then turn back on.
Every other boot, I get fsck message about /dev/hda2 not cleanly unmounted.
My newb brain was telling me that ext3 would help insulate the systems from power loss.
Can someone tell me the right files (I saw several things above) and right commands to keep the system from fsck-ing every other boot?

14:44 GMT on Dec 17, 2006

... Joe wrote:

Well finally I got everything entered manually..and rebooted..

it came up to a dsl@box:~$ prompt and thats it...

not sure what i should be seeing here...or what should be happening. Any help?

16:13 GMT on Dec 17, 2006

... Brian wrote:


You can fix the fsck problem that occurs every other time you reboot by using “su - dsl” in your /opt/bootlocal.sh file instead of changing the /etc/inittab file.

- Brian

12:43 GMT on Dec 18, 2006

... Walter wrote:

Thanks Brian, I saw that earlier, but was not sure about the text.
Help a fool: do I put “su - dsl” or su - dsl in bootlocal.sh?
Also, I put su - dsl above the # start ssh command.
I went into inittab and # the 1:2345... command. I kept the line above it: ~~:S:respawn ...
I will test a power loss and see if it has to fsck itself.

Joe: on my setup - I do not have rsync working yet, so I put a # in front. for feh, my command is: /usr/bin/feh -qrzZF -D $DELAY /home/dsl/frame/photos/ &
(below this line, I put #rsync command)
Also, I think what Brian said about the bootlocal.sh and the inittab files might have worked for me.


20:30 GMT on Dec 18, 2006

... Joe wrote:

Permission denied errors.

I am now getting permission denied errors when running sh files...so the thing boots..comes up to the desktop with terminal session loaded..

then when I restart...I see the errr “Permission denied” when it tried to start the picture frame.

Getting desperate..>Hahah
joe dot oldendick @ hotmail dot com is my msn account

22:46 GMT on Dec 18, 2006

... Bill wrote:

Okay this one has had me pulling my hair out for awhile now...
I've put DSL and all of the above scripts on an IBM Thinkpad 770z. The problem is that the screen keeps blanking after 30 mins or an hour and the ONLY way to get it back is to physically press a key.

All of the xset commands work to turn the screen on and off normally.. but after that hour (or so) timeout happens the only thing that brings it back is a physical keypress.

I don't see any engery save options in the BIOS to tweak and I'm kind of at a loss.... anyone have any ideas?


02:34 GMT on Dec 19, 2006

... Joe wrote:

I would say to go to IBMs website and download and upgrade to the latest bios/cmos and then see if there are energy saving options.

06:43 GMT on Dec 19, 2006

... Bill wrote:

Been there, tried it, unfortunately. Got the latest one on it and there aren't any options.

Is there a way to script sending a fake keypress that might wake it up?

09:01 GMT on Dec 19, 2006

... Kelly wrote:

Bill, check your power settings under DSL, under screensaver. Mine was powering off randomly and I changed that setting. IIRC there was a place to keep the monitor on there. Let us know. I would check, but I'm not using DSL.

12:36 GMT on Dec 19, 2006

... Walter wrote:

I think I used sudo -s to login as root, and then used chmod 777 to set rights for all users. I think I originally setup DPF with root user, so I needed to ch perms for DSL users acct. I found every file in this project, and changed perms. There was another cmd for changing folder perms (photos, frame, home/dsl).
google the commands to get the right syntax/idea.

19:19 GMT on Dec 19, 2006

... Walter wrote:

I found another project that someone tried, http://www.frontiernet.net/...
and they had a START PICTUREFRAME AT BOOT section. There was something about sending text to mouse to keep it awake. Dunno if that might help you:

# pass something to the mouse to wake up the display if its asleep
echo “Hello there mousey.” > /dev/mouse
echo “Hello there mousey.” > /dev/mouse
sleep 5
echo “Hello there mousey.” > /dev/mouse

19:20 GMT on Dec 19, 2006

... Walter wrote:

Anyone got more ideas on finding/setting the right file system options to keep the fsck at reboot. I am not sure if my user login affects it, or what I need to look at. I could post my complete file relating to inittab and .xinitrc or bootlocal.sh if that helps.

19:22 GMT on Dec 19, 2006

... Joe wrote:

Well...I'm going back to DSL Version 2.3.

Maybe these newer versions add security or something else that is causing me my nightmares...I can't find anyone else having the security errors I'm having just running simple .sh files.

I don't really understand chmod and because I'm rushed for christmas this is becoming less and less fun..but I'd like to revisit it after the hectic season and learn it.

21:08 GMT on Dec 19, 2006

... Joe wrote:

Now I'm back in the newer version and someone here at work taught me to use chmod

All I had to do was go into the frame directory and type:

chmod +x *.sh

And that fixed all my problems...now that they are finally running...I'll have more questions..hahah

18:16 GMT on Dec 20, 2006

... Kelly wrote:

I finally got the flickr app working on a ubuntu desktop machine....
Although is suggests apache, it would only be necessary for the web interface, theoretically this app would run with no X-windows, No apache....

Just perl & fbi, and of course a flickr account.

The config was a bit of a nightmare, but I can help out if anyone needs it.
Now that I see how the config file works, it is a lot easier. There aren't any documents to support the program other than a generic install guide. Mine wouldn't work at first, and to be honest, the web frontend still isn;t working, but the back end and the slideshow work great.

I will try to get DSL or some other small distro installed on my Toshiba, but that has turned out be it's own nightmare. In the meantime, flickr works.

16:29 GMT on Dec 21, 2006

... Beakmyn wrote:

Hey Walter you found my page, cool. I've been following your write-up and making some changes. Namely I've done a full frugal install. I.E. my system is readonly so I can lose power at anytime and not really worry about un-cleanly mounting the drives. A real plus. It's takes a little longer to boot up but that's not an issue. At boot it loads from hda2 my saved settings, feh.dsl, unclutter.dsl

Roberts over at damnsmalllinux.org created a feh.unc which should perform better since it uses less RAM. Otherwise you'll need to install feh then create your own .dsl using deb2dsl (available once you enable apt)

Currently untested on my system:
Shutting off the screen - I have to verify APM and ACPI operation on my laptop
Rsync: untested, Using Samba and LinNeighborhood to map to a share on my windows PC and manually copy files.


Use Chmod like above to add execute permissions or

From the fluxbox menu run emelfm as root (superuser) and right click on the folder containing the .sh files and select properties and change the file permissions so that everyone can read/write/execute and check the box to do subdirectories.

Wireless with persistant settings
WPA_supplicant - 35% of getting it to work

18:37 GMT on Dec 21, 2006

... Joe wrote:

It still seems like an image could be made of a finished and 100% working product and then laid down on any drive.

23:37 GMT on Dec 21, 2006

... Art wrote:

Hi there,
Being a Mac guy, I'm not to fresh with command-line usage or Linux. Shoot me.

So; I was wondering that if I made this using an IBM ThinkPad T21, could I simply run Windows XP on it and then install some VNC server onto it?Then, I could use “Chicken of the VNC” (a VNC client for Mac OS X) to control it... ans use something like “slickr” as well.

Thank you!

12:47 GMT on Dec 23, 2006

... Walter wrote:

Hi Art, if you had a Win OS running well on it (not too laggy/slow, etc), yes - you could install VNC on the PC, add VNC to the enabled list in XP Firewall.
Although, on XP, you would need some type of slideshow app and slickr download app - I imagine. The screensaver app would somewhat work, but any mouse or keyboard would bring you back to OS.

This project was to load DSLinux onto an older laptop and make it a picture frame only.

12:33 GMT on Dec 25, 2006

... daimchoc wrote:

For Beakmyn: Have you tried...

setterm -blank 0 -powersave off -powerdown 0
xset s off
For DrWare: I'm now on my third DPF. Thanks to you and to everybody who had posted on this site. Happy New Year!!!

22:40 GMT on Dec 29, 2006

... Mark Stover wrote:

Great project! I am however having an issue I hope someone can help with. When I make the changes suggested in the /etc/inittab to allow auto login, it does automatically log in, but I loose my keyboard and get an error about “1” already being used. This is with the HD install if that helps.



02:34 GMT on Dec 30, 2006

... daimchoc wrote:


You're probably using a new version of DSL. Check the bottom of the iniitab and you'll see that it's already there. Just remove the one that you already put in.Regarding the keyboard, where do you loose it, from the command line or from when X (Desktop) is already running?

Has anybody have a solution if the person receiving the DPF doesn't have any wireless/wired network at home? Say, updating the pictures via a USB thumb drive? Thanks to all in advance.

06:46 GMT on Dec 30, 2006

... Joe wrote:

daimchoc do you or does anyone have specifics of the frames you were able to use to put this together.

I think I am happy with what I have right now. DSL with a SAMBA share on the frame that I can just copy new photos to.

I've been reading about these frames and installing linux for about a month now to make sure I understand exactly what is going on...I still don't understand everything, but there is a local store who has 40% off of shadow boxes that ends today.

A shadow box seems awfully large...and I'm wondering what the glass will do to the LCD screen..will it fade it? make it look funky?

Just need some idea on the frame if anyone has any.


09:58 GMT on Dec 30, 2006

... Joe wrote:

Another question I had..was is it possible to set the entire harddrive as “read only” so if power would go out that nothing is damaged.

Then when I wanted to add photos I could simply issue a command to make it writable?

10:08 GMT on Dec 30, 2006

... Mark Stover wrote:


Yes, it's the latest version of DSL. Here is a copy of my inittab as it stands now with no auto login happening. You stated it's already in there? What do I need to do to allow it to auto login then? Right now, on boot it stops at the login prompt. Thanks for your help!


21:14 GMT on Dec 30, 2006

... Mark Stover wrote:

Oops...forgot the inittab!

# /etc/inittab: init( configuration.



~~:S:respawn:/bin/bash -login >/dev/tty1 2>&1 </dev/tty1
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5

ca::ctrlaltdel:/etc/init 0

kb::kbrequest:/bin/echo “Keyboard Request — edit /etc/inittab to let this work.”

pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

1:2345:respawn:/sbin/getty 115200 tty1
2:2345:respawn:/sbin/getty 115200 tty2
3:2345:respawn:/sbin/getty 115200 tty3
4:2345:respawn:/sbin/getty 115200 tty4
Thanks again,


21:14 GMT on Dec 30, 2006

... Mark Stover wrote:


Never mind....I got it to work. I don't know if this is the right way to do it, but I simply added the following line to the end of the inittab instead of changing a line....

5:2345:respawn:/bin/bash -login >/dev/tty1 2>&1

It now works perfect. Thanks for your help!!


22:06 GMT on Dec 30, 2006

... Beakmyn wrote:


Search Google there's someone that's done this with a USB stick just like you want.
The one thing I don't like about his script is that he erases all the picture and re-copies them. You should be able to do a difference copy instead.

Good resources here also:

You can then manually mount /dev/hda1 rw when needed.

Mine is
/dev/hda1 - 1st partition 55MB for DSL frugal
/dev/hda2 - 2nd partition 10MB for persitant storage and mydsl (FEH,unclutter)
/dev/hda3 - 3rd partition ~3.5GB for pictures mounted readonly

mount /dev/hda3
sudo mount /dev/hda3 -o remount,ro

That's keeps it read-only. I've pulled the power serveral times now with no issues.
I hope to write it up soon as it differs slightly from The Warehouse version which mine is now built on. I'll also post a few pictures of the insides to show how to mount everything. Basically I gutted the entire laptop and even removed the screw mounts from the plastic to mount the parts to the wood and LCD to the matte.
As for glass on the LCD it hasn't hurt mine yet and a shadow box is good to hold the pieces.

18:57 GMT on Dec 31, 2006

... Beakmyn wrote:

I'll help anyone with DSL/frame questions through the DSL forums just send me a message on the forums

I've got a
Digital Hinote VP 575
166Mhz, 80MB RAM, 4GB harddrive (3 partition frugal install)
Wifi, ssh,

19:07 GMT on Dec 31, 2006

... Steve wrote:

Hello, does anyone know how to mount the filesystem readonly? beakmyn says he did that but how did he do it? Also, how can i turn off swap to save disk space? -Thanks

23:16 GMT on Jan 06, 2007

... JoeO wrote:

I think I have DSL where I want it. Now comes the challenge of mounting this thing in a frame.

I wish I would have paid more attention in art class and had more tools

Anyone have model numbers of frames they used or where they got them?

09:14 GMT on Jan 14, 2007

... Beakmyn wrote:

Pictures of Mine:


Also my scripts/bootlocal.sh/config files

@Steve Readonly

For making the /dev/hda3 where the pictures are take a look at the bootlocal.sh script and :
mount /dev/hda3
sudo mount /dev/hda3 -o remount,ro
When I need to write to it I open up a terminal and type
sudo mount /dev/hda3 -o remount,rw

I think you can figure out what I do to make it readonly again

I'm working on overlaying weather/clock and integrating flickr and webshots. Similiar to daligui wallgui

10:17 GMT on Jan 22, 2007

... Fuzo wrote:

Hello all,

I am new to Linux. So, give me some slack.
I follow all the instructions and my computer is doing what is supposed to do, except I don,t find a way to slow down the pic transition. Can anyone help me with this.

Thank you

15:37 GMT on Mar 02, 2007

... Vas wrote:

Here's another suggestion for any of you guys having trouble with screen blanking, especially if you require a physical keypress to bring it back up...

There is a tiny app called xmacro, which can send keystroke and mouse movement events to X or any X program. What you can basically do is create a cron job to run an xmacro command that will move your (invisible) mouse cursor over a few pixels and back, every several minutes.

I tried this method before writing on an old IBM 365ED with a buggy bios that wouldn't respond to any apm or acpi commands. Perfect results.

For the record, This laptop was also unsupported by the tpctl power management utilities that some of you with IBM thinkpads may be using, and so a a simulated input device input seemed to be the only workaround.

11:10 GMT on Mar 26, 2007

... w99 wrote:

Screen blanking solution, IBM Thinkpad 600E
I tried many things to stop the screen blanking on my laptop, but this is the only one which worked:
Download the PS2.EXE utility from IBM's website and issue the following commands:
ps2 lcd 0
ps2 pmode custom
I used the DOS version of this tool, which you can get from


And I booted the laptop using FreeDOS (you need to use the “full” version, so you can run in LiveCD mode). After booting, swap the CD for the one with the PS2 utility on it, and away you go. (“ps2 ?” shows lots of cool options)

Once this option is set, it never gets lost or overridden.

20:55 GMT on Mar 31, 2007

... blake wrote:

First off thanks for the great howto! I'm having some problems getting the screen blanking to work though. I'm using a Toshiba Portege 3110CT in fb800x600 mode. I can run turn_o(n|ff)_screen.sh fine without any problems and can see the changes being made via xset q, but the screen never goes black!

Any ideas?

12:08 GMT on Apr 03, 2007

... Fuzo wrote:

Hello all,

I having a hard time to access to my photos folder from my XP box. I am using Samba.dsl as way to share this folder. I am asking if someone could post a smb.conf image so that I could see what I am doing wrong.

Thank you in advance


13:50 GMT on Apr 03, 2007

... Michael wrote:

Great project!

I got in trouble trying to use mailx (and ssmtp) to send mail via gmail — so ended up using rsync to send the file containing the ip address (/tmp/ip_mail2.tmp) to the remote server where the images are stored.

This simplifies the implementation, as there's no dependency on a working smtp connection.

16:26 GMT on Apr 03, 2007

... Kenneth Barry wrote:

I'm also pretty new.

I think i am confused as to where to start.

I think i have DSL installed how it should be.

a 1gig swap as hdc1

and 34gigs as hdc2

(for some reason hd “c” was my local HDD. Don't ask me why, but it stumped me for a week trying to get into cfdisk typing hda, or hdb, finally tried hdc)

Never the less,

There are allot of ocmments on this page. I mean, allot. So the question is, If i'm not that interested in learning linux thru and thru, where should i start?

(i kinda wish there was a cookbook, like “Start typing this” and you just typed it all out., or even better, all the changes needed in all the files, all to just be drag and dropped into place, then reboot and it works.)

So maybe i should say what i would like to do, and someone can point out the best option.

This is my my aged mom. So she wont be doing anything with it. She has 10 kids, me being the last, and we all wanna be able to send her pictures.

I'd like to be able to update the pictures remotly. Possibly even through email, or a web service like flikr. Then all the kids could just email in the photos to get them on the frame.

I'de also like it to turn off at night. Video playback owuld be nice, but not neccessary. Essentially, i want it to stand alone, and just recieve pictures.

No server, just it.

Can anyone help me?

14:21 GMT on Apr 05, 2007

... Walter Hammerschmid wrote:

I'm very bad in linux, but I've done all the steps and ...
it runs SUPER
ther is no changing when I start turn_on/off_screen.sh - all photos will displayed without turning the screen off (or on)

So what's wrong im my DPF???

07:15 GMT on Apr 23, 2007

... TWE2002 wrote:

I had to rebuilt my DPF when my hard drive crashed last week. I tried it with Windoze first but its a memory and process monster and not as elegant as Linux.

I installed DSL 3.2. I did the download/syncing of pictures now a little different. Instead of rsync I installed via apt-get the wget program (is already there, but the busybox version is limited, so a fresh install via apt-get gets you the complete version) and now pull the pictures from my own gallery2 website via wget. Here is my wget command I use, but your millage may vary:

wget -Xicons -r -nc -l1 -Rindex.* http://www.domain.com/pictu...

Basically I ignore the icons folder, do recursive download of all links found (all pictures), don't override what I already have local and I exclude index.* to download. With this I end up with just my pictures. I created a cron job to do the download every 6 hours and with the “-nc” only pictures that are new will be transferred.

14:33 GMT on Apr 25, 2007

... Mark Stover wrote:

OK, I've done something stupid, but don't know how I did it. I finally got my laptop into the frame using a 17" display connected via the VGA port on the laptop. All works perfect with one exception...the turn_off_screen.sh script and the turn_on_screen.sh scripts no longer work. They worked perfect before, but now that it's all put together, something has went wrong. Anyone have any suggestions for what I can check? I'm at a loss. I assumed I had hit the Fn-F7 keys which move you from the lcd to the vga port for output of video, but I've tried that several times with no luck. If anyone has any other ideas, please let me know. THANKS!!!


23:38 GMT on May 01, 2007

... Brent wrote:

Cool project. After reading this post and many others on the net, I did a laptop-to digital-picture-frame project using my wifes broken Vaio Laptop. I first repaired her laptop and then I converted it into a frame. It's based on XP since it already had XP installed. Uses Slickr and wifi so that updating photos is done entirely on the internet. Fun project and didn't cost me much.

How I Converted Laptop into Digital Picture Frame:

16:51 GMT on May 07, 2007

... bbig119 wrote:

Thanks for the great writeup. I'm in the middle of getting this working on an Omnibook 6000. Has anyone tried controlling FEH with a remote?

I think it would be cool to link IR commands to keyboard controls that control feh slideshow.

I'd know how to do this in Windows, but have to learn all this in linux.

09:52 GMT on May 22, 2007

... Denkat wrote:

This is great and it is exactly what I am looking to do.

I have encounter two issues. I am not good with Linux and I would like to upload the pictures via another PC home network (P2P)

Is there anyway posible for you to provide instructions for this case. (more detail instructions for the Linux part and how to set it up for home network)?

Thank you!!!!

23:59 GMT on May 26, 2007

... Dionisio wrote:

Newbie needs a LOT of help...

I will be using a Compaq 110 and a Compaq Evo 310 for this project.

I visited http://www.damnsmalllinux.org From the list of download sites, all provides a list of folders or files. How do I select the file/s I need. Is there a place where a “download” button can be selected and be able to download the OS?

Are there steps on how to do the installation to the hard drive. I currently have Win 2000 in the laptop. How do I create partitions (if needed), install, etc. (step-by-step)

I do not a a server. I was hopping to copy the pictures from a Win XP PC to the picture frame as needed.

Thank you VERY much for your guidance.

14:14 GMT on May 27, 2007

... Doug Buttry wrote:

Thanks so much for your detailed posting of how you created you DPF. I have followed your instructions and have the software working with two exceptions.
1) xwindows seems to be blanking after inactivity from the local host (screensaver) I added the
xset s off
xset s off
to my /home/dsl/.xinitrc file but it seems to not be working. Does anyone have any suggestions for this?
2) Also I am still having to fsck every other boot. I tried adding su - dsl in /opt/bootlocal.sh but that did not help, in fact xwindows would not start after that.

Thanks for you help, I can't wait to start the physical part of this project.

08:54 GMT on Jun 15, 2007

... doug wrote:

Very nice. Your scripts helped a lot. I was able to get my DPF up and going with just a few tweaks for slight changes in behavior I wanted.

Mine is based upon an IBM ThinkPad 570. Small, light, 1024x768 res.

For the person who mentioned wireless: I had lots of problems getting the default version of wpa_supplicant to connect to my NetGear router with WPA. In fact, it can't. I had to put in a wired connection and download and build latest MadWifi and wpa_supplicant. That worked, no problem. Now my picture frame is on my wireless network!

Eventually, I'll have it pull the pictures from a share on my NAS, when I get one...

Oh, and a reminder for those of us who get hung up in the O/S and scripts side of things:


I've had not one, not two, but three “crashes” where the whole dang thing ended up in a pile on the floor. Apparently, the glue on the back of the velcro I used to attached the LCD to the back of the base gets soft after several days of exposure to the heat coming from the LCD/base.

I spent hours and hours working on this think, and two days after I give it to my wife for Mother's day it's in pieces on the floor. I...was..crushed...

Fortunately, the thing worked when I put it back together. I thought it got bounced off of the wall hanger, because it was near a door. So I moved it away from the door. After the second crash, I figured out the glue problem.

The third time, the superglue I used to attach the picture hanger bracket to the back of the laptop gave way. Not sure how that one happened. I tested that one thouroughly. I think the coating on the plastic part of the laptop gave way.

I've got the whole thing screwed together now. No more accidents.

Thanks again.


01:45 GMT on Jun 25, 2007

... wrote:

When I install DSL the system halts at starting cardmgr for pcmcia for some reason. And I need pcmcia for network so disabling it is not an option.

Will this work without much changes on other distributions as well? Do you have any other small distro to suggest?

14:42 GMT on Jul 08, 2007

... wrote:

Hi again. Never mind my previous proble. I finally managed to solve it after another couple of hours of work. so I now have DSL and the picture frame up and running.

But one question. Why can't I control it as expected from SSH?

login as: dsl
dsl@'s password:
_____ _____ _
Welcome To | _ \ / ___/ | |
| | | | | |___ | |
| | | | \___ \ | |
| |_| | ___| | | |___
|_____/ /_____/ |_____|

DSL comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

-bash: export: `DISPLAY:0': not a valid identifier
dsl@1[frame]$ manual_restart.sh &
[1] 387
dsl@1[frame]$ ps: invalid option — a
sed: Unsupported command ?
BusyBox v1.2.2 (2006.12.07-15:23+0000) multi-call binary

Usage: ps

/home/dsl/frame/kill.sh: line 2: -e: command not found
Killing feh pid=
kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l
Enter the number of seconds for photo rotationand press [ENTER]:5
-bash: 5: command not found

[1]+ Stopped manual_restart.sh

21:46 GMT on Jul 08, 2007

... Adam Henley wrote:

A few issues I came across with the version of DSL I used, others have come across the same ones by the looks of things, but I haven't had time to go through all those posts to see if they've been answered...sorry.

1) cron not installed
Click on MyDSL > System > cron30.dsl
This will install cron

2) running crontab -e does not work
Crontab tries to run /usr/bin/editor as it's default editor. I created a symlink from nano to there using this command:
ln -s /bin/nano /usr/bin/editor

3) ps not accepting -aux parameters
The default ps doesn't seem to accept any parameters..??? Also, I dislike the line-noise that sed often involves.
The command below should kill all processes with name = $PROCESS:
ps | grep $PROCESS | awk '{print $1}' | xargs kill -9

A lot of people say that awk is a sledgehammer, but for these purposes it's never noticeably slower than any of the alternatives.

19:06 GMT on Jul 10, 2007

... Kelly McNiece wrote:

I updated my site and created a new domain for this part of my (lack of) life.

There is a ubuntu DPF using Xwindows(I know, that is a lot of overhead) taht works pretty good for the laptops I have. I never did get DSL to work correctly on my laptop. It worked on my other Dells just fine.

I posted my script for Weather and CNN using XML feeds. Peter found me via this site and sent me a script for animated radar images. I haven't tried it yet.

There is also a framebuffer writeup, for non x-windows fans.

It is not perfect, I am no expert. I wouldn't have waht I have, if it hadn't been for thewares.


03:17 GMT on Aug 23, 2007

... Reed wrote:

I was very happy to find your writeup. I used many of your scripts and I'm just stuck on getting cron working. I'll also hold off on autoupdating the pictures until I get a little more familiar with DSL.

02:06 GMT on Oct 15, 2007

... Tom wrote:

In order to get your pictures to the frame from a windows pc you can use Winscp (uses ssh) to access your frame. Easy to use.

21:30 GMT on Nov 24, 2007

... Vinnie wrote:

I'm a newbie to DSL/Linux altogether. I've done an harddrive install and followed your instructrions, but when I boot it doesn't load FEH. just boots the windows program. I've also followed the detailed instructions from http://www.frontiernet.net/... and again it doesn't boot with FEH but just to the windows app.

What am I doing wrong. Is there a log file where the errors are recorded that can give me guidance

05:39 GMT on Dec 07, 2007

... Vinnie wrote:

I think for some reason my install of FEH and Uncluster is not working (not installing properly). Can someone guide me thru this?

05:50 GMT on Dec 07, 2007

... Mike wrote:

I was wondering about mounting the touchpad and keyboard to the back of the frame. How would you use this, since you cannot see the screen at the same time?

21:15 GMT on Dec 16, 2007

... Anthony wrote:

So with the help of a high school kid who knows way more about linux than I could ever care to know, I was able to make 2 frames, one at my moms house and one at my mom in laws house.

Both frames sync on there own over wireless and they grab pictures from my home PC over the internet.

Pretty cool build.

19:57 GMT on Apr 15, 2008

... George wrote:


Props to you for this guide - we're not building a photo frame, but the project we're designing uses almost all of your scripts or inspires similar ones.

Just wanted to let you know how much time and effort you've saved us!

Thanks again

12:07 GMT on Jun 11, 2008

... Kelly McNiece wrote:

I have created a forum to discuss details and instructions to build Digital Picture Frames. Please contribute. http://forums.burgerfaire.com

I have created a few topics to get started, but would love feedback, if you are interested.

I would love the abilitly to discuss some of these topics with everyone.


19:40 GMT on Aug 04, 2008

... Koops wrote:

anyone sucessfully running this from a usb drive?

if using the DSL embedded its running in ramdrive mode and nothing you do is saved to disk.

I havn't quite yet located any info on how to make it a proper writable filesystem

12:03 GMT on Oct 29, 2008

... Koops wrote:

ahha! i think i've found how to make it persistant!

08:31 GMT on Oct 30, 2008

... Allistar wrote:

I've just completed construction of mine. It runs completely off a USB “pen” drive. The laptop has no battery and no hard disk (which means less weight and much less noise). It boots automatically in the morning (a setting in the BIOS) and shuts down at 10pm (using MyCron). This is also running DSL. The whole OS loads to RAM (the laptop only has 256Mb but it works brilliantly).

07:16 GMT on Dec 01, 2008

... Peter Simpson wrote:

Hi -
Just completed the first of two photo frames I'm working on by following your instructions. I stuck to your basic outline, but did have a little trouble with the scripts.

The cron_start_frame.sh, cron_reload_frame.sh and scripts “feh” command has a problem with the “--slide show-delay” argument, it should be “--slideshow-delay”.

One thing I discovered when trying to use a *very* old Dell Latitude CSi laptop with DSL, is that, if you use the framebuffer display driver (couldn't get the VESA driver to work), the X11 “xset s” commands won't turn the backlight off. I'm going to deal with this by using a parallel port control program I found at http://bigasterisk.com/proj... to control a transistor which will cut the power to the backlight inverter. Since I'm disassembling the display anyway, I'll have access to the power line.

Other changes I made, included ditching local image storage (well, I do still have a couple of default images in case the net drive isn't available) and using a SAMBA mounted directory for the photos, wireless networking, and installing ntpd to guarantee that the clock stays accurate.

After I decided to do this with one of my own laptops, I casually mentioned the project to my boss, who suggested I build a frame for work out of some old laptops we had lying around. We're now using it as a brag display to show prospective clients photos of some of the projects our EE group has done (I work for a design consultancy — shameless plug). Since the photos are on an existing shared drive on our server, anyone can change them without needing to understand Linux or ssh.

The frame and custom mat came to about $40 at Michael's and I mounted the display on one side of a piece of black “foamcore” board, and the laptop base on the other side with hot glue. Remember to allow some venting for the heat generated by the display and backlight...I cut openings at the top and bottom of the foamcore board to allow some convection flow. The frame is essentially made from 1“x2” lumber, and makes a good solid base for mounting everything.

Thanks for making the process much easier!

12:04 GMT on Dec 05, 2008

... BaBo_FiSH wrote:

Koops / Allistar can you point me in the right direction for how to get the USB thumb drive to act like a real HDD?

It saves some of my settings but not all it seems selective.

00:30 GMT on Dec 12, 2008

... aerosmith wrote:


I followed this blog to build a DPF of my own running on xubuntu. It came out fine. Thanks for providing such detailed description and the scripts. But there are some items which I would like to see. Below is my wish list:
- Use rtcwake to sleep for a certain amount of time. Right now there are some problems with the rtcwake program and my graphics card (SIS M650). It does not work reliably.
- Use the gdesklets widgets like icandy calendar, world time and weather to lay on top of the slide show. Apparently feh does not honour the “stay on top” option set for the widget. feh steals focus
- A better support for power management from the OS.
- Some options from feh to transition slides. Something like zoom in or fade in options

03:17 GMT on Dec 31, 2008

... aerosmith wrote:

yay! I got my first wish. The following script made this possible. Now I can really make my DPF go to sleep for the specified amount of time. Below is the script that you can use. Note that I am using gdm. I needed to restart because x would not perform a clean start upon wake.

# sleep script

# kill the slide show first
sudo ./kill.sh feh

# example:
# ./sleep.sh 21:00:00
# will wake up the computer from suspend or hibernate
# and will restart the desktop manager and the
# slide show
t=`date --date “$1” +%s`

# to get sudo hand before the executing the
# rtcwake in background:
sudo /bin/true
sudo rtcwake -u -t $t -m on &

# give rtcwake some time to make its stuff
sleep 5

# then suspend
sudo pm-suspend

# Due to a bug in xubuntu this is necessary
# https://bugs.launchpad.net/...
xhost +

# I'll take it from here
# Need to kill rtcwake so that the subsequent call to
# rtcwake does not result in device or resource busy error
sudo ./kill.sh rtcwake

sudo /etc/init.d/gdm restart

# give gdm desktop manager some time to restart
sleep 14

# Start the slide show now

22:50 GMT on Jan 01, 2009

... aerosmith wrote:

just another note on the above script. Use absolute path for the shell scripts and the programs used. Another example of running the above script is: ./sleep.h “1 hours 30 minutes”. Which puts the system to sleep and wakes up in one hour and 30 minutes.

01:09 GMT on Jan 07, 2009

... Richard Bronosky wrote:

Thank you so much for this head start! I think that feh should be replaced by a true graphical slide show, as others have mentioned. I do not know of a good Linux project for this, so I intend to write my own using pygame. I want the ability to fade, scale, pan, and rotate images. I like pygame because I can easily incorporate into my python slideshow hooks to communicate with my Arduino. I'll let you know how it goes. Based on my experience with this tutorial http://www.pygame.org/docs/... it shouldn't be too hard.

19:00 GMT on Feb 05, 2009

... seshu parvataneni wrote:


I am just about to complete a web interface to do some basic operations like start a media player, reload the slideshow or start the slideshow and launch/kill a program increase decrease system volume. The itnerface is using several html forms that execute the corresponding php scripts. The php scripts eventually call the shell scripts provided in this DIY. I installed suexec and apache2 and virtualhost configuration to make this possible. I think I should patent this application as none of the commercial picture frames that are available out there provide this. I intend to add more controls to this inerface. I will post the instructions as soon as I am done so that you folks can enjoy. By the way I previously posted some comments as aerosmith.

18:14 GMT on Jun 01, 2009

... Seshu Parvataneni wrote:

Ok, I've finally completed writing the scripts and loading the instructions on to the internet. The document with the relevant details have been posted at:http://semagallery.googlepages.com/dpfControls.html
Feel free to use them at your will and have fun.

06:00 GMT on Jun 20, 2009

... Alexa20 wrote:

I value your release close to this post. I just wanted tell that I didnt see such kind of talented writer until today. Have you a chance compose the truly well written <a href="http://www.topthesis.com">dissertation writing</a> or thesis papers?

06:11 GMT on Dec 18, 2009

... sam wrote:

OK so I got all the scripts and all the files edited, still I am having trouble understanding, the crontab -e is that like a linux default (linux new born here) or is it another script that we have to put in there, so cron can read it and go from there?

thanks for the project, it got me interested in learning linux.


02:48 GMT on Dec 28, 2009
This item is closed, it's not possible to add new comments to it or to vote on it