Digitaler Bilderrahmen

Hier ist die Dokumentation eines zu meinem Projekt: - Der Bau einens digitalen Bilderrahmens.

Das Projekt begann eigentlich damit, das ich den alten Laptop der noch in meinem Zimmer stand wegwerfen wollte. Da ich jedoch gerne eine Blick in die Innereien von Geräten werfe bevor ich sie entsorge begann ich den Laptop zu zerlegen. Währenddessen kam mir der Gedanke das er zum Anzeigen digitaler Fotos noch ausreicht, da mein Opa zu bemängeln hatte, das er meine, meiner aussage zufolge, so super schnell „entwickelten“ und sichtbaren Digitalfotos so selten zu sehen bekommt, war das Projekt geboren.

Inzwischen ist das Projekt zu einem Ersatzprojekt im Fach KPE (Konstruktive Produktentwiklung) bei Prof. Heidemann an der FH Saarbrücken geworden. Es ist eine Prüfungsrelevante Aufgabe, bei der es darum geht ein Produkt zu ersinnen, zu planen, zu dokumentieren und auch umzusetzen.

Als ich die Elektronik nach 1 1/2 Jahren lose im Zimmer herumliegen, bzw hängen endlich mit dem Alu Rahmen verienen Wollte, musste ich leider festellen, dass der Monitor (vermutlich während dem Einbau) seinen Geist aufgegeben hatte. Jedoch bekam ich zufällig keinen Monat später einen neuen (alten) Laptop, einen Toshiba T2130CT. Seitdem ist der Rahmen endlich in seiner Endversion mit Rahmen, bzw in Version 2.0

Anforderungsliste

  • Bilder anzeigen
  • An der Wand hängen
  • Nicht zu hören
  • Keine Interaktion duch den Benutzer bis auf ein/ausschalten
  • Speicherung von mindestens 300 Bildern
  • Anzeigen der Bilder für eine bestimmte Dauer.
  • Zufällige Wahl der Bilder aus einem bestimmten Ordner
  • Einfache Austauschbarkeit der Bilder

Hardware

Beginn: Alter Laptop

Bei dem Laptop handelt es sich um einen alten Compaq ??? 100 (genaue Modellbezeichnung unbekannt)

Technische Daten: 2freaky.org_photos_thumbs_237.jpg

  • Pentium DX4 100 Mhz
  • 64MB Ram
  • WD 90C24A Grafikkarte mit 256bit Farbtiefe und einer Auflösung von 640×400
  • Floppy Laufwerk
  • Trackball
  • Defekte 6Gb Hitachi Festplatte, ersetzt duch IBM Travelstar
  • 2x PCMCIA Steckplätze

Auseinandernehmen und Funktionstest

Ich begann mit dem Zerlegen und gleichzeitigem Funktionstest des Gerätes. Da der Akku defekt ist muss der Rahmen immer mit einem Netzteil versorgt werden. Zum Testen diente eine Installationsdiskette von Suse Linux 7.2, die auch anschliessend zur Netzwerkinstallation des Betriebssystems genutzt wurde, da der Laptop weder über DVD noch über CDROM-Laufwerk verfügt. 2freaky.org_photos_thumbs_236.jpg Die im Laptop orginal verbaute Festplatte (Hitachi DK227A-50, 4,5GB) erwies sich leider während des ersten Installationsversuches als defekt. Ursache ist vermutlich ein Headcrash, also ein Einschlag des Lesekopfes in die magnetische Speicherschicht verursacht duch schwere Erschütterungen oder einen Schlag.

Als Ersatz kam eine IBM Travelstar Dyla 28100 mit 8GB zum Einsatz

Erstes "rohes Technikum"

Nachdem die Software funktionsfähig war und ich festgestellt hatte, das der Rahmen nach Anlegen der Betriebsspannung auch ohne den mit auf dem Tastertur-PCB verbauten Ein/Ausschalter einschaltet und hochfährt, befestigte ich das Display auf der Unterseite des Laptopmainboards und hing das ganze ohne Tastatur und Trackball an die Wand. Der Bilderrahmen hängt zum ersten mal. 2freaky.org_photos_thumbs_240.jpg Um sicherzugehen dass die verwendete Festplate auch in dieser ungewöhnlichen Einbaulage (über Kopf, die Anschlusskontakte nach unten) funktioniert zog ich das Datenblatt IBM Travelstar Dyla 28100 zurate. Demzufolge ist die Festplatte in allen Einbaulagen zu betreiben, sollte jedoch auch in dieser Lage formatiert werden, da sich anscheind die Lage der Spuren minimal je nach Einbaulage unterscheidet. So muss die Spurkorrektursteuerung der Platte weniger arbeiten um die Daten sicher auszulesen.

Version 2.0

Da sich die Hardware der ersten Version ja leider verabschiedet hatte, bekam ich einen Toshiba T2130CT mit 16MB ram. Dieser wurde nun im Alu Rahmen eingebaut, Die Festplatte und die Software Installation blieben gleich.

gallery.berndlux.de_d_2646-2_dsc_2608.jpg gallery.berndlux.de_d_2629-3_dsc_2603.jpg gallery.berndlux.de_d_2642-3_dsc_2606.jpg













Bernd 2007/04/28 12:38

Konstruktionszeichnung Alurahmen

Um dem Rahmen mehr das Aussehen eines Bilderrahmens zu geben ließ ich mir eine Alublende fertigen. Hier die Konstruktionszeichnung für den Auftrag. 2freaky.org_photos_thumbs_241.jpg

Derzeit berreitet mir die befestigung der Elektronik hinter der Alublende Probleme, da diese nicht duchbohrt werden darf. Ich hab drei möglichkeiten ersonnen: das aufkleben von Holzstücken, und anschliessende befestigung duch Holzschrauben, das aufkleben von Metallbolzen mit Innengewinde oder das verschrauben an aufgklebten PVC Klötzchen. Die umsetzung steht noch aus.

  • 2007.04.27

Der Rahmen version 2.0 wurde nun endlich in den Alu Rahmen eingebaut. Als Befestigung nahm ich einfach Doppelseitiges Klebeband für das Display, für das Mainboard 2K Kleber und einfach zweis Messingschrauben in Bohrungen durch das Alu. Dadurch das der Rahmen sowieso mit einigen überflüssigen Ausspahrungen für das alte, nun defekte Board versehen ist, machen die zwei Schrauben den Rahmen auch nicht mehr wesentlich hässicher als er schon ist.

Bernd 2005/10/17 10:30

Einbau des Displays in den Rahmen

(27.04.2007 endlich vollendet)

gallery.berndlux.de_d_2650-2_dsc_2611.jpg gallery.berndlux.de_d_2654-2_dsc_2612.jpg













Software

Installation von Suse 7.2 über Netzwerk

Die installaton erfolgt nach den Anweisungen des Setup Programms (Yast) von Suse als Installation über Netztwerk. Die Installations DVD wurde als Netzwerkfreigabe von meinem PC zur Verfügung gestellt und der Laptop mit den Bootdiketten gestartet. Nach einschieben der Netzwerkarte wurde der PCMCIA Treiber geladen und die Installation begonnen.

2freaky.org_photos_thumbs_236.jpg Das Suse Setup im Textmodus.

Suse Abspecken

Aus der Suseinstallation wurden soweit möglich alle für den Einsatzzeck als Bilderrahmen nicht erforderlichen Programme und Scripte entfernt. Während dem Booten werden nurnoch PCMCIA, cardmanager, Netzwerk, SSHD, NSCD, Kyboard und das Diashow Script gestartet. Alles andere wurde entfernt oder zur steigerung der Bootgeschwindikeit abgespeckt.

Configuration von XFree86

Die configuration der Grafikkarte bereitete mir erhebliche Schwierigkeiten weil ich am Anfang permanent versuchte die Auflösung auf 16bit einzustellen in der erwartung das selbst ein alter Laptop so tief auflösen könne. Nach einer Recherche bei Google fand ich jedoch eine Beschreibung der Configuration von XFree86 unter Linux mit dem WD 90C24A Chip. Erst als ich die Farbtiefe auf 256 Farben einstellte erhielt ich ein Bild. Der Laptop wird jetzt mit einer auflösung von 600×450 @ 256farben betrieben, was für mässige Bildqualität sorgt. Ich hoffe bald einenen anderen Laptop mit höherer Frabtiefe zur verfügung zu haben. 2freaky.org_photos_thumbs_238.jpg Erster Grafiktest mit KDE und Xfract. Der Laptop berechnet Madelbrotgrafiken und zeugt diese an.

Hier meine /etc/X11/XF86Config

  # SaX autogenerated XF86Config file
  # This file was generated from the SaX
  # Version: 2.8 - sax@suse.de
  # Date: Tue Nov 30 14:49:28 CET 1999
  # Xserver:SVGA
  # MouseVendor:Unknown
  # MouseName:Unknown
  # RamDac:60
  # Dac8:60
  # Dac16:60
  # Dac24:60
  # Dac32:60
  
  Section "Files"
    RgbPath       "/usr/X11R6/lib/X11/rgb"
    FontPath      "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
    FontPath      "/usr/X11R6/lib/X11/fonts/local"
    FontPath      "/usr/X11R6/lib/X11/fonts/misc:unscaled"
    FontPath      "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
    FontPath      "/usr/X11R6/lib/X11/fonts/Type1"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/URW"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/Speedo"
    FontPath      "/usr/X11R6/lib/X11/fonts/75dpi"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/100dpi"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/PEX"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/cyrillic"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/latin2/misc"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/latin2/75dpi"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/latin2/100dpi"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/latin2/Type1"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/latin7/75dpi"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/kwintv"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/uni"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/baekmuk"
  # FontPath      "/usr/X11R6/lib/X11/fonts/ucs/misc"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/ucs/75dpi"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/ucs/100dpi"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/hellas/misc"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/hellas/75dpi"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/hellas/100dpi"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/hellas/Type1"
  #  FontPath     "/usr/X11R6/lib/X11/fonts/xtest"
  EndSection
  
  Section "ServerFlags"
    AllowMouseOpenFail
    unclutter # hides cursor if not moved
  # Option "BlankTime" "off"
  #  NoPM "on"
  EndSection
  
  Section "Module"
  EndSection
  
  # This section is no longer supported
  # See a template below
  # Section "XInput"
  # EndSection
  
  Section "Keyboard"
    Protocol      "Standard"
    XkbRules      "xfree86"
    XkbModel      "pc104"
    XkbLayout     "de"
    XkbVariant    "nodeadkeys"
  EndSection
  
  Section "Pointer"
    Protocol              "PS/2"
    Device                "/dev/psaux"
    SampleRate            60
    Emulate3Buttons
    Emulate3Timeout       200
    BaudRate              1200
  EndSection
 
  # Any number of monitor sections may be present
  
  Section "Monitor" # first section for LCD alone
                    # (not used; here FYI)
  
      Identifier  "LCD Screen"
      VendorName  "Sharp"
      ModelName   "Unknown"
  
      Bandwidth   40  #  changed from 29
      HorizSync   30-37.36  # X -probeonly says  
      VertRefresh 50-62.36  # X -probeonly says
  
      ModeLine "640x480" 25.175 640 664 760 800 480 491 493 525
      Modeline "640x480" 24.96 640 656 720 832 480 480 484 501
      Modeline "800x600" 33.28 800 816 928 1040 600 600 604 626
  
    
  #    Mode "640x480"
  #        DotClock       25.175 # The dual scan LCD uses the first clock
  #        HTimings       640 664 760 800
  #        VTimings       480 491 493 525
  #    EndMode
  
  EndSection # monitor 1
  
  # Any number of graphics device sections may be present
  
  Section "Device"
      # SVGA WD90c24a2 in Twinhead Slimnote with simultaneous display
      Identifier  "WD90C24A2"
      VendorName  "Western Digital"
      BoardName   "RocketChip"
  
   #  Option      "slow_dram" # Set Mclk to 47.429 MHz
      Option      "med_dram"  # Set Mclk to 49.219 MHz
   #  Option      "fast_dram" # Set Mclk to 55.035 MHz
      Clocks     25.175 28.322 65     36     # These are *not* programmable
      Clocks     29.979 77.408 62.195 59.957 # these are programmable
      Clocks     31.5   35.501 75.166 50.114 # these are *not* programmable
      Clocks     39.822 72.038 44.744 80.092 # these are programmable
      Clocks     44.297                      # Change this if you change
  
  EndSection
  
  # The colour SVGA server
  Section "Screen"
  
      Driver      "svga"
      Device      "WD90C24A2"
      Monitor     "LCD Screen"
  #   Monitor     "CRT&LCD"
      Subsection "Display"
      Depth           8
      Modes "640x480" 
      ViewPort    0 0
  #   Virtual     1024 768    # Virtual for CRT only use
                              # comment out if you want 800x600 virtual 
                              # on LCD.  uncomment if you want 640x480 LCD.
  
      EndSubsection
  
  EndSection

System in Readonly Mode versetzen

Um den Betrieb der Festplatte im Readonly-Mode, also nur mit lesendem Zugriff zu ermöglichen ist es notwenig für die Ordner /tmp und /var ein Tempfs zu erstellen da in diesen auch geschrieben werden muss. Das Tempfs ist ein virtuelles Dateisystem, dass nur im Arbeitspeicher angelegt und verändert wird, nach dem Herunterfahren des Rechners sind alle Daten aus diesem Dateisystem verloren. Das Tempfs wird im der Datei /etc/init.d/boot erzeugt.

Hier der Code ausschnit dazu

  /bin/mount /tmp/;
  /bin/mount /var/;
  mkdir /var/lib /var/cache /var/log /var/log/news/ /var/run /var/lock;
  mkdir /var/tmp /var/lib/pcmcia/ /var/adm /var/state;

Bootscripte

Die Bootscripte dei beim Booten des Laptops aufegrufen werden und die die Diashow starten.

veränderungen wurden nur an den Datein /etc/init.d/boot vorgenommen und die neu erstellte Datei /etc/init.d/diashow ist für die Diashow zuständig. Es muss auf dem System ein Benutzer „bernd“ angelegt werden, in dessen Rechtebereich die Diashow läuft und auch die Bilder verwaltet werden.

Das wichtige an /etc/init.d/boot ist der letzte Teil, in dem die tempfs's mit einigen Unterordnern erzeugt werden und das “/“ Dateisystem anschliessed Readonly gemountet wird. Ganz am Ende erfolgt der Aufruf des eigendlichen Diashowscriptes. Ich habe eimal die wichtigen Zeilen ausgeschnitten.

  #
  #
  # root fs readonly mounten und Diashow starten
  #
  
  /bin/mount /tmp/;
  /bin/mount /var/;
  mkdir /var/lib /var/cache /var/log /var/log/news/ /var/run /var/lock;
  mkdir /var/tmp /var/lib/pcmcia/ /var/adm /var/state;
  echo -e "\033[40m\033[1;31m Mount / FS  Readonly \033[0m "
  sleep 2;
  /bin/mount -n -o remount,ro / ;
  echo
   ( /etc/rc.d/diashow ) &
  echo -e "\033[40m\033[1;31m starteted Diashow \033[0m "
  echo

Weitere änderungen sind weniger von Bedeutung, sie dienen ledigtlich der abschaltung von unwichtigen Funktionen duch vorangesetzte kommentarzeichen ( “#“ ) was sich letztlich auf die Geschwindigkeit des Bootvorgangs auswirkt.

/etc/init.d/boot

  #! /bin/sh
  #
  # Copyright (c) 1996 SuSE GmbH Nuernberg, Germany.  All rights reserved.
  #
  # Author: Ruediger Oertel <ro@suse.de>, 1996-2000
  #         Werner Fink <werner@suse.de>, 1996-2000
  #         Burchard Steinbild <bs@suse.de>, 1996-2000
  #         Florian La Roche <florian@suse.de>, 1996
  #
  # /etc/init.d/boot
  #
  # first script to be executed from init on system startup
  #
 
  . /etc/rc.status
  . /etc/rc.config
  echo "Running $0"
 
  rc_reset
  echo -n "Mounting /proc device"
  mount -n -t proc proc /proc
  rc_status -v -r
 
  echo -n "Mounting /dev/pts"
  optpts="-o mode=0620,gid=5"
  mount -n -t devpts $optpts devpts /dev/pts
  rc_status -v1 -r
 
  #
  # Start blogd, requires /proc and /dev/pts.
  # Export the real device in variable REDIRECT.
  #
  REDIRECT="`showconsole 2>/dev/null`"
  test -x /sbin/blogd && /sbin/blogd $REDIRECT
  export REDIRECT
 
  #
  # possibly there are file systems on devices, which need a kernel
  # module to be loaded.  So start kerneld as early as possible.
  #
  if test "$START_KERNELD" = yes -a \
          -x /sbin/kerneld -a ! -e /proc/sys/kernel/modprobe ; then
      echo -n "Starting kerneld:"
      /sbin/kerneld > /dev/null 2>&1
      rc_status -v -r
  fi
 
  #
  # check if sysrq should be enabled
  #
  if test -e /proc/sys/kernel/sysrq ; then
  if test "$ENABLE_SYSRQ" = yes ; then
      echo "1" > /proc/sys/kernel/sysrq
  else
      echo "0" > /proc/sys/kernel/sysrq
  fi
  fi
 
  #
  # check if STOP-A should be enabled
  #
  if test -e /proc/sys/kernel/stop-a ; then
  if test "$ENABLE_STOP_A" = yes ; then
      echo "1" > /proc/sys/kernel/stop-a
  else
      echo "0" > /proc/sys/kernel/stop-a
  fi
  fi
 
  # Disable ECN if required.
  if test "$DISABLE_ECN" = "yes" -a -f /proc/sys/net/ipv4/tcp_ecn; then
          echo "0" >/proc/sys/net/ipv4/tcp_ecn
  fi
 
  #
  # maybe we use "Multiple devices".  So initialize MD.
  #
  if test -f /etc/raidtab -a -x /sbin/raid0run ; then
    echo "Initializing Multiple Devices..."
      /sbin/raid0run -a
  elif test -f /etc/mdtab -a -x /sbin/mdadd ; then
 
      echo "Initializing Multiple Devices..."
      /sbin/mdadd -ar && MDADD_RETURN=0 || MDADD_RETURN=1
      if test $MDADD_RETURN -ne 0 ; then
          if test  -x /sbin/ckraid ; then
                echo "Initializing Multiple Devices failed.  Trying to recover it..."
              /sbin/mdstop -a
              for i in /etc/raid?.conf ; do
                  /sbin/ckraid --fix $i
              done
              /sbin/mdadd -ar
              rc_status -v1 -r
          else
              rc_status -v1 -r
          fi
      fi
  fi
 
  #
  # s390 is 'like' serial console(better: no console ttys at all)
  # and we don't have access to the HW Clock
  #
  if test "$HOSTTYPE" = "s390" ; then
      SERIAL_CONSOLE=yes
      HWCLOCK_ACCESS=no
  fi
 
  #
  # If we use a serial console, don't use the fsck progress bar
  #
  if test -z "$SERIAL_CONSOLE"; then
     FSCK_PROGRESSBAR="-C"
  else
     FSCK_PROGRESSBAR=""
  fi
 
  #
  # Find and activate volume groups (HM 1/1/1999)
  #
  if test -d /etc/lvmtab.d/ -a -x /sbin/vgscan -a -x /sbin/vgchange ; then
      echo "Run file system check on root for LVM activation"
      while read des fs type rest; do
          case "$des" in ""|\#*) continue ;; esac
          case "$fs" in
              /) break ;;
              *)       ;;
          esac
      done < /etc/fstab
 
      FSCK_RETURN=0
      # on first startup of a system with a lvm root device lvm /dev entries
      # may not exist at this time, so skip fsck in this case
      # skip fsck also for reiserfs case
      if test "$fs" = / -a -f "$des" -a "$type" != "reiserfs"
      then
          fsck $FSCK_PROGRESSBAR -a -t $type /
          FSCK_RETURN=$?
    fi
      # A return code of 1 indicates that file system errors
      # were corrected, but that the boot may proceed.
      # A return code of 2 or larger indicates failure.
      test $FSCK_RETURN -lt 2
      rc_status -v1 -r
      if test $FSCK_RETURN -gt 1 ; then
          # Stop blogd since we reboot after sulogin
          killproc -QUIT /sbin/blogd
          if test -x /etc/init.d/kbd ; then
              /etc/init.d/kbd start
          fi
          echo
          echo "fsck for root file system (/) failed."
          echo "Please repair it manually and reboot."
          echo "The root file system is currently mounted read-only."
          echo
          echo "Attention: Only CONTROL-D will reboot the system in this"
          echo "maintanance mode. shutdown or reboot will not work."
          echo
          PS1="(repair filesystem) # "
          export PS1
          /sbin/sulogin /dev/console
 
          # if the user has mounted something rw, this should be umounted
          echo "Unmounting file systems (ignore error messages)"
          umount -avn
 
          # on umsdos fs this would lead to an error message. so direct
          # errors to /dev/null
          mount -no remount,ro / 2> /dev/null
 
          sync
          reboot -f
      else
          echo "Remounting root file system (/) read/write for vgscan..."
          mount -n -o remount,rw /
          echo "Scanning for LVM volume groups..."
          /sbin/vgscan
          mount -n -o remount,ro /
          echo "Activating LVM volume groups..."
          /sbin/vgchange -a y
      fi
  fi
 
  #
  # fsck may need a huge amount of memory, so make sure, it is there.
  #
  echo "Activating swap-devices in /etc/fstab..."
  swapon -a &> /dev/null
  rc_status -v1 -r
 
  case `uname -r` in
      0.*|1.*|2.[01].*|2.2.?|2.2.10)
            echo -n "Running update (bdflush) daemon"
          /sbin/update
          rc_status -v -r
          ;;
  esac
 
 
  #
  # do fsck and start sulogin, if it fails.
  #
  FSCK_RETURN=0
  if test ! -f /fastboot -a -z "$fastboot" ; then
      FSCK_FORCE=""
      test -f /forcefsck && FSCK_FORCE="-f"
      # on an umsdos root fs this mount will fail, so direct error messages
      # to /dev/null.
      # this seems to be ugly, but should not really be a problem.
      mount -n -o remount,ro / 2> /dev/null
        if test $? = 0; then
          echo "Checking file systems..."
          fsck $FSCK_PROGRESSBAR -A -a $FSCK_FORCE
          # A return code of 1 indicates that file system errors
          # were corrected, but that the boot may proceed.
          # A return code of 2 or larger indicates failure.
          FSCK_RETURN=$?
          test $FSCK_RETURN -lt 2
          rc_status -v1 -r
          if test $FSCK_RETURN -gt 1; then
              # Stop blogd since we reboot after sulogin
              killproc -QUIT /sbin/blogd
              if test -x /etc/init.d/kbd ; then
                /etc/init.d/kbd start
              fi
              echo
              echo "fsck failed.  Please repair manually and reboot. The root"
              echo "file system is currently mounted read-only. To remount it"
              echo "read-write do:"
              echo
              echo "   bash# mount -n -o remount,rw /"
              echo
              echo "Attention: Only CONTROL-D will reboot the system in this"
              echo "maintanance mode. shutdown or reboot will not work."
              echo
              PS1="(repair filesystem) # "
              export PS1
              /sbin/sulogin /dev/console
 
              # if the user has mounted something rw, this should be umounted
              echo "Unmounting file systems (ignore error messages)"
              umount -avn
 
              # on umsdos fs this would lead to an error message. so direct
              # errors to /dev/null
              mount -no remount,ro / 2> /dev/null
 
              sync
              reboot -f
          fi
          sync
          mount -n -o remount,rw /
      else
          mounts=/etc/mtab
          test -r /proc/mounts && mounts=/proc/mounts
          while read des fs type rest; do
              case "$fs" in
                  /) break ;;
                  *)       ;;
              esac
          done < $mounts
 
          if test "$fs" = / -a "$type" != "umsdos" ; then
              echo
              echo '*** ERROR!  Cannot fsck because root is not read-only!'
              echo
          fi
        fi
  else
      echo "File systems are NOT being checked."
      mount -n -o remount,rw /
  fi
 
  #
  # clean up
  #
  rm -f /etc/mtab* /etc/nologin /nologin /fastboot
 
  #
  # initialize database for kerneld.  This should be done earlier, but
  # could cause a lot of trouble with damaged file systems.
  # restart of kerneld will be done by /etc/init.d/kerneld
  #
  #MODULES_DIR=/lib/modules/`uname -r`
  #if test -x /sbin/depmod -a -d $MODULES_DIR ; then
  #    for i in $MODULES_DIR/* $MODULES_DIR/*/* /etc/modules.conf ; do
  #        test -e $i || continue
  #        if test $i -nt $MODULES_DIR/modules.dep ; then
  #            rm -f $MODULES_DIR/modules.dep
  #            break
  #        fi
  #    done
  #    if test ! -e $MODULES_DIR/modules.dep ; then
  #        echo -n Setting up $MODULES_DIR
  #        /sbin/depmod -a > /dev/null 2>&1
  #       rc_status -v -r
  #    fi
  #fi
 
  #
  # Mount local filesystems in '/etc/fstab' (and create an entry
  # for / and /proc).
  #
  echo "Mounting local file systems..."
  mount -fv -t proc proc /proc
  rc_status
  mount -fv -t devpts $optpts devpts /dev/pts
  rc_status
  mount -av -t nonfs,noproc,nodevpts
  rc_status -v1 -r
 
  #
  # Run boot.crypto before fideling with files and file systems
  #
  if test -x /etc/init.d/boot.crypto ; then
      /etc/init.d/boot.crypto start
  fi
 
  #
  # After mounting we may activate swap files in /etc/fstab
  # .. this should work know with the new swapon behavio(u)r
  #
  echo "Activating remaining swap-devices in /etc/fstab..."
  swapon -a &> /dev/null
  rc_status -v1 -r
 
  # set and adjust the CMOS clock
  if test "$HWCLOCK_ACCESS" != "no" ; then
  echo -n Setting up the CMOS clock
  CLOCKCMD=hwclock
  while read line; do
          case "$line" in
  #               *MacRISC*)  CLOCKCMD=clock ;;
                  *MTX\ Plus*) CLOCKCMD="hwclock --mtxplus --directisa" ;;
                  *PReP\ Dual\ MTX*) CLOCKCMD="hwclock --mtxplus --directisa" ;;
          esac
  done < /proc/cpuinfo
 
  test "$GMT" != "YAST_ASK" && $CLOCKCMD --hctosys $GMT
  rc_status
  test -f /etc/adjtime || echo "0.0 0 0.0" > /etc/adjtime
  if test "$GMT" != "YAST_ASK"  -a "$START_XNTPD" != "yes" ; then
      $CLOCKCMD --adjust $GMT
      rc_status
  fi
  rc_status -v -r
  fi
 
  #
  # reinit quota, if fsck has returned value != 0
  #
  if test $FSCK_RETURN -gt 0 -a -n "$START_QUOTA" -a "$START_QUOTA"="yes" ; then
      # Check quota and then turn quota on.
      if test -x /sbin/quotacheck ; then
          echo "Checking quotas. This may take some time."
          /sbin/quotacheck -avug
          rc_status -v1 -r
      fi
  fi
 
  # Let ld.so rebuild its cache.
  # But do some tests before if it is really needed (bs@suse.de 01/2000)
  LDCONFIG_NEEDED=false
  test -s /etc/ld.so.cache || LDCONFIG_NEEDED=true
  test "$run_ldconfig" = true && LDCONFIG_NEEDED=true
  test -x /usr/bin/find -a "$LDCONFIG_NEEDED" = false && {
      for DUMMY in `/usr/bin/find /etc/ld.so.cache -mtime +30` ; do
          LDCONFIG_NEEDED=true
      done
  }
  LIBDIRS="/lib /usr/lib /usr/local/lib"
  test -s /etc/ld.so.conf && {
      for DIR in `cat /etc/ld.so.conf` ; do
          case $DIR in
            /*)
              test -d "$DIR" && LIBDIRS="$LIBDIRS $DIR"
            ;;
          esac
      done
  }
  for DIR in $LIBDIRS ; do
      test $DIR -nt /etc/ld.so.cache && {
          LDCONFIG_NEEDED=true
          break
      }
  done
 
  test -x /sbin/ldconfig -a "$LDCONFIG_NEEDED" = true && {
      echo -n "Starting ldconfig (setting up /etc/ld.so.cache)"
      { /sbin/ldconfig -X 2>/dev/null || \
          { echo ; echo -e "ldconfig $rc_failed" ; } ; } &
      rc_status -v -r
  }
 
  #
  # Let zic set timezone - if present.
  #
  if test -n "$TIMEZONE" -a "$TIMEZONE" != "YAST_ASK" -a -x /usr/sbin/zic ; then
      echo -n Setting up timezone data
      /usr/sbin/zic -l $TIMEZONE
      rc_status -v -r
  fi
 
  #
  # initialize loopback device
  #
  if test "$START_LOOPBACK" = yes; then
      echo -n Setting up loopback device
      ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
      rc_status
      case `uname -r` in
      0.*|1.*|2.[012].*)
          route add -net 127.0.0.0 netmask 255.0.0.0 dev lo
          rc_status
        ;;
      esac
      rc_status -v -r
  fi
 
  # clean up old yp bindings
  rm -f /var/yp/binding/*.[12]
 
  #
  # set hostname and domainname
  #
  test -n "$FQHOSTNAME" && {
      echo -n Setting up hostname
      hostname ${FQHOSTNAME%%.*}
      rc_status -v -r
  }
  test -n "$YP_DOMAINNAME" && {
      echo -n Setting up YP domainname
      domainname $YP_DOMAINNAME
      rc_status -v -r
  } || domainname ""
 
 
  #
  # clean up
  #
  rm -f /var/lock/* /var/lock/*/* /tmp/.X*lock \
        /var/run/*  /var/run/*/*  /var/spool/uucp/LCK* 2>/dev/null
  rm -rf /tmp/screens 2>/dev/null
  rm -f /var/run/utmp
  echo -n > /var/run/utmp
  chmod 664 /var/run/utmp
  chown root.tty /var/run/utmp
  # Restore a possibly dynamically modified /etc/resolv.conf
  if ls /etc/resolv.conf.saved.by.* &>/dev/null ; then
      echo "/sbin/modify_resolvconf:"
      /sbin/modify_resolvconf cleanup
      echo -e "$rc_done_up"
  fi
 
  if test "$CLEAR_TMP_DIRS_AT_BOOTUP" = yes; then
    echo -n "Cleaning temporary directories $TMP_DIRS_TO_CLEAR"
    for CURDIR in $TMP_DIRS_TO_CLEAR ; do
      find $CURDIR -printf '%P\n' | ( cd $CURDIR ; xargs rm -rf )
    done
    for CURDIR in /tmp /tmp/.X11-unix /var/tmp /var/tmp/vi.recover ; do
          test -d $CURDIR || mkdir -p $CURDIR
          chown root.root $CURDIR
          chmod 1777 $CURDIR
    done
    rc_status -v -r
  fi
 
  #
  # there could be a new kernel version.  reinit /etc/psdevtab, to be sure.
  #
  rm -f /etc/psdevtab
  test -x /bin/ps && /bin/ps > /dev/null 2> /dev/null
 
  #
  # mount shmfs is necessary (2.4 kernels)
  #
  unset HAVE_SHM
  while read dev type; do
      test "$type" = "shm" && HAVE_SHM=1
  done < /proc/filesystems
  if test ! -z "$HAVE_SHM"; then
      ECHO_RETURN=$rc_done
      test -d /dev/shm || mkdir /dev/shm
      echo -n "Mount SHM FS on /dev/shm"
      mount -t shm shmfs /dev/shm || ECHO_RETURN=$rc_failed
      echo -e $ECHO_RETURN
  fi
  #unset HAVE_SHM
  #
  # start bootup client scripts.
  #
  if test -d /etc/init.d/boot.d/ ; then
      for i in /etc/init.d/boot.d/S*; do
          test -f $i || continue
          if test -x "$i" ; then
              # Active boot scripts, should have their own messages
              $i start
          else
              # Old boot scripts, may not have any message
              echo Running $i
              /bin/sh $i b
              rc_status -v1 -r
          fi
      done
  fi
 
  #
  # setup PNP if config file is present
  #
  if test -r /etc/isapnp.conf -a -x /sbin/isapnp -a "$START_ISAPNP" = yes ; then
      echo "Initializing PnP devices"
      /sbin/isapnp /etc/isapnp.conf
      rc_status -v1 -r
  fi
 
  ##
  ## start user defined bootup script.
  ##
  #if test -f /etc/init.d/boot.local ; then
  #        echo "Running /etc/init.d/boot.local"
  #        /bin/sh /etc/init.d/boot.local
  #       rc_status -v1 -r
  #fi
 
  ## Read all kernel messages generated until now and put them in one file.
  #test -s /var/log/boot.msg && mv -f /var/log/boot.msg /var/log/boot.omsg
  #if test -x /sbin/klogd ; then
  #       echo Creating /var/log/boot.msg
  #       /sbin/klogd -s -o -n -f /var/log/boot.msg
  #       /bin/sleep 1
  #       test -s /var/log/boot.msg
  #       rc_status -v1 -r
  #elif test -x /bin/dmesg ; then
  #       echo Creating /var/log/boot.msg
  #       /bin/dmesg -s16384 > /var/log/boot.msg
  #       /bin/sleep 1
  #       test -s /var/log/boot.msg
  #       rc_status -v1 -r
  #fi
  #if test -x /usr/sbin/klogconsole ; then
  #   if test -z "$SERIAL_CONSOLE" ; then
  #       ( test -c /dev/tty10 && > /dev/tty10 ) > /dev/null 2>&1 &&   /usr/sbin/klogconsole -r10
  #   else
  #       /usr/sbin/klogconsole -l 7 -r 0
  #   fi
  #fi
 
  #
  # Say blogd that I/O is possible now
  #
  killproc -IO /sbin/blogd
 
  #
  # enable DEXE binary format
  #
  if test -d /proc/sys/fs/binfmt_misc -a -x /usr/bin/dosexec; then
    echo -n "Registering DEXE for binfmt"
    echo :DEXE:M::\\x0eDEXE::/usr/bin/dosexec: > \
      /proc/sys/fs/binfmt_misc/register
    rc_status -v -r
  fi
  fi
 
  #
  # Enable "dynamic IP patch"
  #
  if test -n "$IP_DYNIP" -a "$IP_DYNIP" != no -a \
      -e /proc/sys/net/ipv4/ip_dynaddr ; then
      echo -n "Enabling dynamic IP patch"
      case "$IP_DYNIP" in
          yes)    echo 7         ; ECHO_RETURN=$rc_done ;;
          [1-9])  echo $IP_DYNIP ; ECHO_RETURN=$rc_done ;;
          *)      ECHO_RETURN=" invalid IP_DYNIP=$IP_DYNIP $rc_skipped" ;;
      esac > /proc/sys/net/ipv4/ip_dynaddr || ECHO_RETURN=$rc_failed
      echo -e "$ECHO_RETURN"
  fi
 
  #
  # Enable syn flood protection
  #
  if test -n "$IP_TCP_SYNCOOKIES" -a "$IP_TCP_SYNCOOKIES" != no -a \
      -e /proc/sys/net/ipv4/tcp_syncookies ; then
    echo -n "Enabling syn flood protection"
      case "$IP_TCP_SYNCOOKIES" in
          yes)    echo 1         ; ECHO_RETURN=$rc_done ;;
          *)      ECHO_RETURN=" invalid IP_TCP_SYNCOOKIES=$IP_TCP_SYNCOOKIES $rc_skipped" ;;
      esac > /proc/sys/net/ipv4/tcp_syncookies || ECHO_RETURN=$rc_failed
      echo -e "$ECHO_RETURN"
  fi
 
 
  #
  # Enable IP forwarding ?
  #
  if test -e /proc/sys/net/ipv4/ip_forward -a -n "$IP_FORWARD" ; then
      case $IP_FORWARD in
        yes)
          echo -n "Enabling IP forwarding"
        echo "1" > /proc/sys/net/ipv4/ip_forward
        ;;
        *)
          echo -n "Disabling IP forwarding"
          echo "0" > /proc/sys/net/ipv4/ip_forward
        ;;
      esac
      rc_status -v -r
  fi
 
  ##
  ## insert memstat module for xosview
  ##
  #if test "$LOAD_MEMSTAT_MODULE" = yes ; then
  #  if test -f $MODULES_DIR/misc/memstat.o ; then
  #    echo Loading memstat module
  #    insmod $MODULES_DIR/misc/memstat.o
  #    rc_status -v1 -r
  #  fi
  #fi
  #
  #
  # Stop blogd
  #
  killproc -QUIT /sbin/blogd
  #
  ##
  ## look for stuff to do for first bootup.
  ##
  #if test -e /var/adm/setup/setup.newinst -o -e /usr/lib/YaST/.configured2 ; then
  #    if test -w / -a "$NO_AUTO_SETUP" != true ; then
  #       exec 0<> $REDIRECT 1>&0 2>&0
  #        if test -e /usr/lib/YaST/.configured2 ; then
  #            echo
  #            echo It seems, that last installation setup has not been finished...
  #            echo To be sure, it will be started again.
  #            echo
  #            sleep 2
  #            rm -f /usr/lib/YaST/.configured2
  #        fi
  #        /lib/YaST/bootsetup
  #        #
  #        # maybe YaST has started gpm. This can lead into trouble with
  #        # setserial.  Since it is started again, when entering into
  #        # runlevel 2, we can kill it here.
  #        #
  #       test -x /usr/sbin/gpm && \
  #            killproc -TERM /usr/sbin/gpm > /dev/null 2> /dev/null
  #    fi
  #fi
  #
  #
  ##
  ## Let YaST2 finish its installation, if you installed with YaST2
  ##
  #if test -f /var/lib/YaST2/runme_at_boot ; then
  #    exec 0<> $REDIRECT 1>&0 2>&0
  #    # if yast2 failed, this ensures proper system setup
  #    touch /var/lib/YaST2/run_suseconfig
  #    if test -x /usr/lib/YaST2/bin/YaST2.firstboot; then
  #       /usr/lib/YaST2/bin/YaST2.firstboot
  #    else
  #       # oops, yast2 not installed
  #       rm -f /var/lib/YaST2/runme_at_boot
  #    fi
  #fi
  ## run SuSEconfig (with args) if needed
  #if test -f /var/lib/YaST2/run_suseconfig ; then
  #    /sbin/SuSEconfig `cat /var/lib/YaST2/run_suseconfig`
  #    rm -f /var/lib/YaST2/run_suseconfig
  #fi
 
 
 
  #
  #
  # root fs readonly mounten und Diashow starten
  #
 
  /bin/mount /tmp/;
  /bin/mount /var/;
  mkdir /var/lib /var/cache /var/log /var/log/news/ /var/run /var/lock;
  mkdir /var/tmp /var/lib/pcmcia/ /var/adm /var/state;
  echo -e "\033[40m\033[1;31m Mount / FS  Readonly \033[0m "
  sleep 2;
  /bin/mount -n -o remount,ro / ;
  echo
   ( /etc/rc.d/diashow ) &
  echo -e "\033[40m\033[1;31m starteted Diashow \033[0m "
  echo
 
  rc_reset
  exit 0
 

Init.d Script

/etc/init.d/diashow

  #!/bin/bash
  
  # Einfachse Startscript für den einen Xserver
  #

  if ( test -f /tmp/imagelist ) ; then rm -f /tmp/imagelist; fi;  # delete staled imagelist
  if ( test -f /var/xlog ) ; then rm -f /var/xlog; fi;  # do the same to the xlog
  /usr/X11R6/bin/X -ac -kb -s 0 -quiet -dpms -v :0 vt7 &>/var/xlog &   # start xserver in bg
  /usr/X11R6/bin/xset -display :0 s off;                    # disable screensaver.
  /usr/X11R6/bin/unclutter -display :0 -root &                  # hides the cursor
  su - bernd -c "/home/bernd/bin/diashow.pl -w 50 -p /Bilder/"  # an run the show as user bernd
  /sbin/killproc /usr/X11R6/bin/X ;                             # if we exit kill X
  # init 0                                                      # shutdown the Computer
  exit 0;

Diashow Script

Das Diashow script ist in Perl geschrieben und mitlerweile sehr strak vom Orginal, das nicht vom mir geschrieben wurde und eigendlich als Bildschirmschoner diente, abgewandelt. Da es unter dem Benutzer bernd läuft kann es auch in dessen Homeordner liegen.

/home/bernd/bin/diashow.pl

  #!/usr/bin/perl
  #############################################################################
  #
  # 17.10.05 changet a lot to fit in my digital picture frame
  #
  # bernd@rlux.org 2004.02.16 23:49
  # added some functions in the image grabbing process to prevent some
  # subdirs/images to be shown. the directories and images containing
  # "n4all" (= not for all),  "schrott" (= garbage) "thumbs",
  # "html"  will not be shown
  #  05.09.21
  #  buil a second version of this script (diashow.pl), witch doesn't
  #  show images in root layer
  #
  #
  #############################################################################
  #   Display a slide show on the root window (to be used with xscreensaver)
  #
  # Note: chbg (http://chbg.sourceforge.net/) does a better job probably.
  #
  # Usage: slideshow -p imagedir -w wait
  # See below for explanation of options.
  #
  # The images are displayed in random order.
  # Each image is displayed only once.
  #
  # In order to save the 'find' every time this screensaver is started,
  # it tries to write the list of images into imagedir.
  # If that fails, it will try to write that list into /tmp.
  #
  # How to make it run under KDE (as of KDE2):
  #   Manually:
  #     find the process named 'kdesktop' and kill it;
  #     start xscreensaver-demo and close it again;
  #     put the following line into your ~/.xscreensaver
  #         "My Art Images Slide Show"  slideshow -p /raphael/art -w 30 \n\
  #     under the section "programs:";
  #     run xscreensaver-demo again and test it;
  #     (maybe you have to start the demon under the File menu).
  #   Automatically:
  #     First, perform the above steps manually;
  #     Create a file 'xscreensaver' in ~/.kde/Autostart/ with the following lines
  #               #!/bin/sh
  #               killall kdesktop
  #               xscreensaver
  #     chmod a+x ~/.kde/Autostart/xscreensaver;
  #
  # Problem:
  #   The currently displayed image is echo'd on stdout,
  #     but xscreensaver seems to do a newline every time, which makes the print
  #     scroll off the screen after a while ...
  #
  # Prerequisites:
  #   xv & perl.
  #
  # Gabriel Zachmann (gabriel.zachmann@gmx.net), June 2002.
  #
 
  require 'getopts.pl';
 
  #use diagnostics;
  use English;
  use FileHandle;
 
  Getopts('p:w:h');
  if ( $opt_h )
  {
          print "slideshow -p imagedir -w wait\n";
          print "  -p imagedir  root directory of all images\n";
          print "  -w wait      wait that many seconds until next image\n";
          print "  -h       this help\n";
          exit 0;
  }
  if ( ! $opt_p )
  {
          print "slideshow: No image directory specified!\n\n";
          print "usage:\n";
            print "slideshow -p imagedir -w wait\n";
          print "  -p imagedir  root directory of all images\n";
          print "  -w wait      wait that many seconds until next image\n";
          print "  -h         help\n";
          exit 1;
  }
  if ( ! $opt_w )
  {
          $opt_w = 20;
  }
 
  $imagedir = $opt_p;
  $wait = $opt_w;
  $listdir= "/tmp";
 
  #unless ( open LIST, "$listdir/imagelist" )
  #{
  #       chdir $imagedir;
  #
  #       if ( -w $imagedir )
  #       {
  #               $listdir = $imagedir;
  #       }
  #       else
  #       {
  #               $listdir = "/tmp";
  #       }
  #
  #       `find . -type f -iname '*.jpg' -o -iname '*.png' -o \\
  #                       -iname '*.tif' -o -iname '*.tiff' -o -iname '*.gif' | \\
  #                       grep -v -i -e 'thumbs' -e 'n4all' -e 'html' -e 'schrott' \\
  #                        -e 'tmbn' -e 'xvpic' > $listdir/imagelist`;
  #       # the 'grep' tries to filter out thumbnails and other stuff
  #
  #       unless ( open LIST, "$listdir/imagelist" )
  #       {
  #               die "slideshow: could not create image list $listdir/imagelist";
  #       }
  #}
         unless ( -w $listdir )
         {
                 die "diashow: could not create image list /tmp/imagelist";
         }
 
  # index all pictures
 
         `find $imagedir/ -type f -iname '*.jpg' -o -iname '*.png' -o \\
                         -iname '*.tif' -o -iname '*.tiff' -o -iname '*.gif' | \\
                         grep -v -i -e 'thumbs' -e 'n4all' -e 'html' -e 'schrott' \\
                          -e 'tmbn' -e 'xvpic' > $listdir/imagelist`;
 
  unless ( open LIST, "$listdir/imagelist" )
         {
                 die "diashow : could not open $listdir/imagelist ";
         }
 
  @images = <LIST>;
  $nimages = @images;
 
  srand;
 
  while ( $nimages )
  {
          $i = int rand $nimages;
 
  #       if ( -z "$imagedir/$images[$i]" )
  #       {
  #               next;
  #       }
 
         $tmp = $images[$i];
 
          if ( ! -f $tmp )
          {
           print "$tmp";
          `echo -n "$tmp" >> /var/bilderlog`;
          `xv -smooth -root +nore -maxpect -quit -display :0 -rmode 5  $tmp >/dev/null 2>/dev/null`;
 
          sleep $wait;
 
          } else
          {
           print " $tmp doesn't exist ";
           `echo -n "$tmp does not exist" >> /var/bilderlog`;
            }
 
          $images[$i] = $images[$nimages-1];
          $nimages -= 1;
  # should run forever
      if ( $nimages&2 == 0)
      {
      srand;
      # perhaps i will see "some" pictures less ofthen
      }
      if ( $nimages == 1 )
      {
        $nimages = @images;
       #new inilizing
       srand;
      }
 
  }
 

2freaky.org_photos_thumbs_239.jpg Das erste Bild auf dem zukünftigen Bilderrahmen.

Weitere Hilfsscripte

Hier weitere Hilfsscripte die ihre verwndung finden um das Dateisystem zum Fotoabgleich in den Read/write-Modus und wieder zurück in den Readonly-Modus zu versetzen. Diese sollten nach /usr/bin/ kopiert werden.

/usr/bin/mountrw

  #!/bin/bash
  su -c "mount -t ext2 -o remount,rw /dev/hda2 /" && echo "Erfolgreich in den RW modus gewechselt" && exit 0;
 
  echo "Es gabe eine Fehler" && exit 1;

/usr/bin/mountro

  #!/bin/bash
  su -c "mount -n -t ext2 -o remount,ro /dev/hda2  /"&& echo "Erfolgreich in den RO modus gewechselt" && exit 0;
 
  echo "Es gabe eine Fehler" && exit 1;

User Manual

neue Bilder hochladen

Um neue Bilder auf den Bilderrahmen zu laden benötigt man einen SCP oder sftp client. Ausserdem benötigt man einen SSH Client, da die Festplatte erst vom Readonly-Modus in den Read-Write Modus geschaltet werden muss. Unter Windowas stehen die oben genannten Clients auch zur verfügung, jedoch kann speziell die verwendung des SCP Clients abweichen. Wer es Komfortabler findet kann auch einen FTP server auf dem Bilderrahmen einrichten und die Bilder mit FTP übertragen, jedoch bleibt das auf Read-Write schalten weiterhin erhalten. Das Laden der Bilder erfolgt in Folgenden schritten:

  • Festplatte auf dem Bilderrahmen in Read-Write Modus schalten.
  • Bilder übertragen oder alte löschen.
  • Festplatte wieder in Readonely Modus schalten.
  • Neustart der Rahmens um die neuen Bilder in die Diashow zu übernehmen.

Sollen die Bilder sofort angezeit werden ist der Bilderrahmen einmal neu zu starten, da die Bilder erst nach dem Neustarten in die Diashow überneommen werden.

Unter Linux erfolgt das Übertragen eines Ordners mit folgendem Kommandos

In den Readwrite-Modus Wechseln:

  ssh -4 [Rahmen IP] mountrw

Beispiel:

  bernd@didju:~> ssh -4 shad mountrw
  bernd@show's password:   # eingabe des Benutzerpasswortes auf dem Bilderrahmen
  Password: root     # Das Skript verlangt das Rootpasswort
  Erfolgreich in den RW modus gewechselt
  bernd@didju:~>
Einen Ordner mit Bildern in /Bilder übertragen:
  scp  /Pfad/zu/den/Bildern/ [Rahmen IP]:/Bilder/
Beispiel:
  bernd@didju:~/Bilder/00-tmp> scp -4r 05.09.22-zusammenst/ show:/Bilder/
  bernd@shad's password:   
  05.09.03-Primm-Party.JPG                     100%   94KB   0.0KB/s   00:00    
  IMG_2593-gimp-test2.JPG                      100%  125KB   0.0KB/s   00:00    
  IMG_2611-gimp2-falschfarben-sobel1.JPG       100%  297KB 296.7KB/s   00:01    
  IMG_8162.JPG                                 100%  134KB   0.0KB/s   00:00    
  IMG_5329.JPG                                 100%  181KB   0.0KB/s   00:00    
  IMG_5339.JPG                                 100%  216KB 216.1KB/s   00:01    
  IMG_5361.JPG                                 100%  235KB   0.0KB/s   00:00    
  IMG_5420.JPG                                 100%  167KB 167.5KB/s   00:01    
  IMG_5452.JPG                                 100%  158KB   0.0KB/s   00:00 
Wieder in den RO-Modus zurückkehren:

 ssh [Rahmen IP] mountrw

Beispiel:

  bernd@didju:~> ssh shad mountro
  bernd@show's password:   # eingabe des Benutzerpasswortes auf dem Bilderrahmen
  Password: root     # Das Skript verlangt das Rootpasswort
  Erfolgreich in den RO modus gewechselt
  bernd@didju:~>

Bilder löschen

Bilder sind entweder über einen Grafischen SCP Client zu aus /Bilder zu löschen , nachdem in den RW-Modus gewechselt wurde, oder über eine SSH Sitzng direkt auf dem Bilderrahmen wie im Beispiel gezeigt.

bernd@didju:~> ssh show 
bernd@shad's password: 
Have a lot of fun...
bernd@show:~ > cd /Bilder/
bernd@show:/Bilder > ls
05.09.22-zusammenst  05.10.10-zusammenst  loeschmich
bernd@shad:/Bilder > mountrw
Password: 
Erfolgreich in den RW modus gewechselt
bernd@show:/Bilder > rm -rf loeschmich/
bernd@show:/Bilder > mountro
Password: 
Erfolgreich in den RO modus gewechselt
bernd@show:/Bilder > exit
logout
Connection to shad closed.

Wunschliste

  • Start noch beschleunigen, speziell start des X Server und XV
  • Webserver um Bilder via Webinterfache hochzuladen
  • Einbau einer CF-Karte als Speichermedium (oder leisere Festplatte)
  • Anderer Laptop mit höherer Auflösung/Farbtiefe
  • Anzeigen von EXIF tags (aufnahme Datum) oder Dateiname
  • Bilderbeschickung mit USB-Stick oder CF karte
  • (unnötig aber möglich: Laden der Bilder von einer Netzfreigabe - würde den Sinn einen „Standalone Bilderrahmens“ verfehlen)

Bernd 2005/10/12 23:49

Bernd 2005/10/16 17:09

elektr/bilderrahmen.txt · Zuletzt geändert: 2012/09/10 23:13 (Externe Bearbeitung)
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki