Home > Articles > Operating Systems, Server > Linux/UNIX/Open Source

  • Print
  • + Share This
Like this article? We recommend

Like this article? We recommend

The Picture Frame Code

The following code is not secure, nor is it bulletproof. In addition, there are many other ways to show or loop through pictures. For example, you might want to add a random-timing feature, or perhaps a "hidden" image that shows up every 20 days. The options are up to your imagination!

xli

Prior to doing anything, you must test the xli program installed with the VNC add-on. xli is an image viewer based on xloadimage that does much more than just show a picture. Included in this package is support for clipping, zooming, focusing, background-color adjustments, and more. However, before using it, you must make sure that all the libraries are loaded.

To do this, type xli at the command prompt. If you get an error about a missing libpng.so.2 file, you need to create a link using the following command:

ln /usr/vnc/lib/libpng.so.2 /usr/lib/libpng.so.2

This step creates a shortcut to the missing library file that essentially tricks the OS into believing the missing file is now installed in /usr/lib. If you need to locate any other missing files, use this command:

find / -print | grep <filename>

Altering the Default fvwm95 Display

In this project, we're using fvwm95 as our window manager. This isn't essential, and you could avoid a window manager altogether. However, by using fvwm95, your DPF will include a GUI that can be used for games and other applications.

First, we need to remove a few extra parts from fvwm95 to hide it from the user.

When startx is executed, it performs some checks and then attempts to load fvwm95. fvwm95 loads according to a configuration file and then passes control back to the startx script for further processing. muLinux is configured by default to open several programs in the GUI, such as xterm, xload, and a file manager. We don't want these to load, which means that the startx file must be edited. To do this, type vi /usr/X11R6/bin/startx and open the startx script in vi (our editor). Arrow down until you find the lines responsible for loading the extra programs. With the cursor set at the beginning of the line, press i (insert) followed by #. This action tells the shell to ignore the line. Save your changes and close vi by pressing Esc, followed by Shift-z-z.

If you execute startx now, you should only see a cyan screen with a taskbar. Click the screen with your mouse and exit fvwm95. Then type the following to load the fvwm95s configuration file into vi:

vi /usr/X11R6/lib/X11/fvwm95-2/fvwm95-2.mu

Again, arrow down through the lines until you come to this line:

AddToFunc "InitFunction"   "I" Exec xsetroot -solid cyan4 &

First, change this line as follows to ensure that fvwm95 uses a black background:

AddToFunc "InitFunction"   "I" Exec xsetroot -solid black &

Next, add a # by using the insert command in front of the line to stop fvwm95 from loading the taskbar:

#+     "I" Module FvwmTaskBar

With all these steps complete, save the file and execute startx again. You should be rewarded with a blank black screen, with the exception of a small X in the center for the mouse cursor. Click the screen for the fvwm95 menu and then exit the window manager.

The Picture Script

The goal of this project was to make a user-friendly DPF. At this point, I could manually tell my laptop to view a picture, but my in-laws wouldn't find this very amusing. To complete the conversion from laptop to picture viewer, I needed some customized code that would automatically load and display pictures without interaction from a user.

After a little thought, I came to the conclusion that my script would have to prompt the owner for a floppy disk, copy images from the floppy to the local drive, and cycle through the images, loading each for a predefined period of time. Thankfully, xli had the power and options to help me; for a complete listing, type xli -help at the command prompt.

path=/pics

I'll include my picture script to give you a place to start. Feel free to plagiarize this for your own purposes. This entire file was saved as runpics in the /root directory. Included are comments explaining the purpose of each line.

##################################################################
#Send message to screen prior to picture load. This is also done with splashpage image.
#Added a pause to allow X to start, the splash image to load, and the user to insert
#the image floppy
echo MAKE SURE YOU SWAP THE FLOPPY!!!!
echo Sleeping for a minute
sleep 60
echo Mounting floppy and copying over new pictures
umount /a           ;if the floppy is mounted, unmount it
mount -t vfat /dev/fd0 /a   ;mount the floppy using vfat (Windows) format
cd /a             ;change directory to the floppy
cp *.jpg /pics        ;copy the jpgs to the /pics folder
sleep 10           ;I like to sleep a lot
#umount /dev/fd0       ;I keep it mounted in case I want to remove a file

echo Copy complete. Starting image cycle.
#Start image load process
xlist=$(xli -list)      ;Get file listing from xli (also returns folder name)
badname="/pics//pics:"	;Assign badname with '/pics//pics:' (folder not a picture)
while [ 0 -eq 0 ]; do     ;Continuous loop (0 will always equal 0)
    for i in $xlist    ;Assign $i with image name
    do
       xname=/pics/$i ;Assign xname with image path & name
       if [ $xname != $badname ]    ;Test to see if xname = '/pics//pics:'
       then
           #Load the image according to my specification using xli
           xli -onroot -display localhost:0 -border black -center $xname
       fi

       sleep 20    ;sleep for 20 seconds and then repeat!
    done
done
#################################################################

Once your script file is created, change the permissions on it to allow it to execute, by using the following command:

chmod 755 <filename>

SplashPage Script

To make sure that the user doesn't forget to insert the image floppy, I decided to set up a splash page to provide a reminder. In addition, the splash page would be nicer to look at than a blank window or text as the runpics script took its naps. However, I wanted this part of the startup routine to be separate from the runpics script, so I created a splash script with the following line:

xli -onroot -display localhost:0 -center -border black /root/splashPage.jpg

Go Script

I next wanted to create a starting point from which everything could be executed. As a result, I created a third script called go, which I placed in the /usr/bin directory. This would allow me to execute go from any location on the computer. The contents of this file are as follows (the & tells the command to execute in the background and allow the script to continue to the next line):

rm /tmp/.X0-lock
startx &
/root/runpics &
/root/splash &

With all this work complete, it's a good time to test the entire process to make sure that it works. After a clean reboot, login to root and type go. Assuming that you have a splashpage.jpg image in the /root directory, you should be rewarded with a black screen that soon displays your splash image. After about 1.5 minutes, the screen should change to your first image in the /pics folder.

Getting It All Started

The final step was to find a way to execute go during startup. I could have my in-laws log in and type go, but again, that wasn't user-friendly. I first tried adding a reference to go in the rc.local file, but this file failed to execute anything. Instead of troubleshooting, I just decided to edit the /etc/rc/5 file and include an entry to execute go & (this worked beautifully). The technical side of the picture frame was complete.

  • + Share This
  • 🔖 Save To Your Account