Zaurus Productivity Setup

For all users of SHARP Zaurus PDAs, model SL-C3x00, the following may be interesting.
I have used the "Cacko 1.23" ROM as a basis in order to get as much productivity out of the Zaurus as possible for me. Below you can see a list of modifications and installations I have done.

This productivity setup was kind of the predecessor of "weeXpc", my X11-based PC-like system for the Zaurus. I hit the limits of the QTopia-based Cacko ROM while developing this productivity setup, and thus I decided to migrate to an X11-based platform (pdaXrom). I then applied a lot of productivity enhancements to pdaXrom and from that point slowly developed weeXpc, which you can still buy from me for a small fee.

But if you prefer QTopia, and if you prefer to do it all by yourself and for free, use the following as a guideline:

Sharp Zaurus SL-C3000 / SL-C3100 Productivity Setup using Cacko 1.23 ROM

Please note: Some parts of this setup will only work, if you exactly
duplicate other parts of the setup. For example, if you use the 
provided ~/.slrnrc for the slrn newsreader, it will only work without 
further tweaking, if you also install the pico editor.

Instead of links, I have only used names for references to other
programs / scripts / IPKs. 
You can use the search feature of your browser to find out if more info 
on such a name is on this page.Use google in order to find out where 
else you can find further information.

I have tried to sort the setup items in an order that you do not have to 
jump around on this page. But it may be that a required software package X for 
software Y is mentioned _behind_ software Y here. So if you have a 
problem which may be due to a missing package, first go on and install 
the remaining things, then it may work.

Also, this is kind of a journal. Some sections may end in an error
or other bad result (I have added a note what's going wrong),
when I have not been able to accomplish a setup successfully.
If you know a solution to one of these problems, please let
me know!

Selection of compatible accessories (Hardware)

  • PNY SD card 2GB
    • usable only with new SD driver package, see OESF topic 18523 by Cresho
    • for software development, mutt email, homepage and another card for backup
    • formatted with ext2 filesystem in order to avoid problems with letter case in file names and with file access rights and file locking mechanims under Linux (important e.g. for software development environment and for mail under mutt)
      • Insert the card into the Zaurus
      • su
      • umount /mnt/card
      • With fdisk, change partition type to "linux"
      • mkfs.ext2 /dev/mmcda1 (all previous contents will be lost!)
      • Eject card
      • Reinsert card and see if it is mounted correctly
  • WLAN D-Link DCF-660W 11MBit CF WLAN card
  • WLAN Ovislink WL-1100CF
  • AC adapters (switching power supplies with abt. 1000mA, work well on the 4.5V setting)
  • 4AA battery holder with outlet plug for Zaurus, use only with rechargeables, as Alkalines will supply a too high voltage!
  • USB OnTheGo Cable HAMA No 41848 (with USB-A jack f, short)
    • for connecting mice, keyboards, USB stick etc.
  • USB OnTheGo Cable HAMA No 41846 (with USB-B plug m, long)
    • for connecting larger devices: scanners, printers, some camera dockings etc.
  • USB OnTheGo Cable HAMA No 41847 (with USB-Mini-B plug m)
    • e.g. for connectio to another Zaurus
  • Belkin Quadra 4-in-1 Pen
    • LED reading light, Laser pointer, Ballpoint pen, PDA stylus
  • Self-made headset with 3,5" stereo plug, micro on tip
  • Microsoft Optical USB mouse
  • Siemens S45i mobile phone
    • GPRS setup in Network settings worked straight forward (EPlus)
    • Other functions such as synchronization with KDEPIM/PI problematic
  • Nokia 6310 mobile phone
    • GPRS in NEtwork settings: Use init string ATZ and enter APN directly at the phone in setting no 1, then use dial string *99***1#
    • The phone did not respond with OK to the AT+cgdcont init string!
  • Nokia DTL-4 Bluetooth CF card
    • Sold, because it works very instable with the bluez drivers!
  • AGM Bluetooth USB dongle
  • Billionton Bluetooth CF card
  • Second battery
  • External charger (Cheap model for Camcorders and modified to fit the Zaurus battery polarity, made in China)
  • Fujitsu Siemens Mini RF mouse
  • IOData CFXGA card
    • CF card for external monitor / beamer
    • "Presentation" application can be used to display images on external device
    • "cfxgamirror" for direct output of screen contents, but with latency (1 sec)
      • is already installed in Cacko 1.23
      • In Settings / Mirror
      • If card is present, "Mirror" switches on mirroring if off, and switches off again (kills process) if on.

Cacko ROM 1.23 beta 1

  • installed according to the instructions

General tips

  • Data storage considerations
    • Daily used data on SD card
      • For better backupability
        • daily Documents backup to internal drive for fast file restoring in case of damaged files)
        • Weekly complete card backup to another PC or USB drive
      • And for easier file sharing between several computers
    • Large data / unimportant data on internal drive
      • Multimedia stuff, dictionaries, Photos, file system images etc.
      • i.e. no self-modified data
      • not necessary to back it up
      • If you don't work wich such data, consider buying a cheaper SL-C1000!
  • Disable Magnified screen on every installed application and utility
    • tap and hold on its icon of application, a window opens with the magnified screen option enabled. Disable it.
  • C3000 only: Make sure every application saves its user data to card or HDD or /home/zaurus/Documents (which is a link to the HDD). Not to /home/zaurus, as space is very limited there!
  • File exchange with PC possible via WLAN/SMB out of the box with Cacko ROM
    • Just connect to the Z's WLAN IP with SMB protocol!
    • Tweak Samba
      • in /hdd2/usr/lib/samba/smb.conf change "force create mode = 0755" to "force create mode = 0664"
  • Self-compiled binaries and self-written scripts go into a dedicated directory in the data area
    • This is to allow easy recovery from backups without recompiling and rewriting everything
    • e.g. directory /mnt/card/Documents/bin (refered to as "bin directory" below)
    • In order to make them callable from everywhere, add the bin directory to the path using a /home/zaurus/.bash_profile:
    • export PATH=$PATH:/mnt/card/Documents/bin
  • /home/zaurus (only for SL-C3000)
    • resides on a small partition /dev/mtdblock3 in flash RAM, so cannot be filled with much content
    • If a program needs a file in /home/zaurus, this file should be created elsewhere and linked to /home/zaurus
    • mkdir /mnt/card/Documents/zaurushome
    • Each new file for /home/zaurus should be put into /mnt/card/Documents/zaurushome and linked back to /home/zaurus
    • If a program creates a file in /home/zaurus, move it to /mnt/card/Documents/zaurushome and link it back immediately
    • On the SL-C3100 the home partition is larger and there is usually no problem with program writing their files to /home/~
  • Disable screensaver when on AC power
    • in file ~/Settings/qpe.conf set [Screensaver] / Interval_AC_Screensaver = 0
    • Each time the "Light and power" configuration is opened and closed again, avlue is overwritten with something >0 so must be reset manually
  • Screenshots
    • In QTopia, use Shift-Fn-C.
      • A shutter sound is played and screenshot is in /mnt/card/Screen_Files
      • Creates large BMP files
    • Or install Screenshot applet (screenshotapplet_arm.ipk)
    • Creates small PNG files in ~/Documents/image
  • MIME type handling
    • /opt/QtPalmtop/etc/mime.types lists all known MIMe types
    • the .desktop files in /opt/QtPalmtop/apps handle which app is launched for which MIME type

General libraries you should install

  • libiconv_1.8-2_arm.ipk
  • libncurses_5.0_arm.ipk
  • libopie1_1.0.3_arm.ipk
  • libSDL-image_1.2.5cvs-1_arm.ipk
  • libSDL-mixer_1.2.5cvs-1_arm.ipk
  • libSDL-net_1.2.5cvs-1_arm.ipk
  • libsdl_1.2.5-slzaurus20050410_arm.ipk
  • openssl-0.9.7a_0.9.7a_arm.ipk

Utilities / Tweaking

  • qtopia combinedbatteryapplet 1.0.5 (also for overclocking)
  • Keyboard tweaking (modify /home/zaurus/Setting/keyhelper.xml)
    • Shift-Space = Space
    • <define key="Space">
      <modifier Shift="On"/>
      <map key="Space"/>
      <map_modifier Shift="Off"/>
      <map_unicode char=" "/>
    • make shift and Fn keys sticky
    • <modifiers>
      <!-- enable shift key to toggle -->
      <define key="Shift" type="Shift" toggle="True"/>
      <!-- enable fn key to toggle -->
      <define key="Fn" type="Fn" toggle="True"/>
      <!-- enable ctrl key to toggle -->
      <define key="Control" type="Control" toggle="True"/>
    • Make right Japanese key to ALT and ALT-Number to F-key-number
    • in <modifiers>:
                      <!-- define right Japanese key -->
                      <define key="F21" type="Alt">
                              <release key="F25"/>
    • call "khctl reload" after all keyhelper.xml modifications
    • unobvious key / character bindings
      • Shift-minus creates backquote
      • Shift-Fn-/ and Shift-Fn-? create { and }
        • On non-German configurations, Fn-o and Fn-p do, too.
      • Fn-vocal produces Umlaut (German configuration)
    • Reverse the Slash / comma swap (SL-C3100 Cacko)
      • From the used langauge files in /home/zaurus/Applications/cyrillica remove the first two lines in [keyboard]
      • ,'     ','     '/'
        '/'     ','     ','
      • from /home/zaurus/Settings/keyhelper.xml remove the section which swaps / and ,
      • in ~/Applications/cyrillica/* (whichever is used)
        • remove the first two lines in [keyboard], which are responsible for / and , swap
      • reboot
  • qpesearch 0.0.3a (great file search utility)
  • temporarily disable suspend timeout
    • recommended for example during automated shellscrip-driven backups and other maintenance jobs
    • qpe_suspendapplet for manually disabling it
    • shell script "" for disabling timeout from other shell scripts
    • #!/bin/sh
      case "$1" in
              qcop QPE/System 'setScreenSaverIntervals(int,int,int)' 0 0 0 
              qcop QPE/System 'setScreenSaverIntervals(int,int,int)' -1 -1 -1 
      exit 0
  • Console
    • Cacko default "qkonsole" is the best (Fullscreen, multisession....)
    • Tried embeddedconsole-tabs_1.5.0-5_arm.ipk as a second console
      • attention: qkonsole icon is gone afterwards!
      • nice, but not as nice as qkonsole
    • qpe-terminal: similar to embeddedconsole-tabs, less features, so not recommended
    • To bring back qkonsole icon in Applications tab, use Tab Settings and restore it (command "qkonsole").
  • Console wrapper
    • Needed if you want to open a console from a QTopia icon or from a TreeExplorer send-to entry
    • #!/bin/sh
      qcop QPE/Application/embeddedkonsole 'setDocument(QString)' \
      "$1 && echo 'Please press Enter to quit console' && \
      read && exit"
    • Usage:
      • Let icon or TreeExplorer execute /path/to/bins/ "console_app_name"
  • Console prompt containing (shortened) path
    • The following describes how the console prompt can be set up so that
      it always shows the current path, e.g.
      zaurus@/mnt/card/Documents> _
    • Script "pwdtrunc", put it somewhere in the PATH
    • #!/bin/bash
      # pwdtrunc - truncates $PWD, writes to /tmp/pwdtrunc.$EUID
      # Mainly from Bash-Prompt-HOWTO, enhanced by Tilman Brock
      # How many characters of the $PWD should be kept
      # Indicator that there has been directory truncation:
      if [ ${#PWD} -gt $pwdmaxlen ]
        pwdoffset=$(( ${#PWD} - $pwdmaxlen ))
      nPWD="`echo $newPWD | sed -e s=$HOME=~=` "
      echo $nPWD > /tmp/pwdtrunc.$EUID
    • entries in ~/.bash_profile
    • export PROMPT_COMMAND="pwdtrunc"
      export PS1='\u@$(cat /tmp/pwdtrunc.$EUID)> '
  • make /etc/rc.d/rc.local usable as a general startup init script for all runlevels
    • Attention: On C3100 / Cacko 1.23 there is already such a file, but it is not used, so rename it before creating a new one!
      • mv /etc/rc.d/rc.local /etc/rc.d/rc.local.ORIGCACKO
    • you can put commands into which should be called at each system restart
    • but the file is not used by default.
    • Use these commands (as root) to make it used:
    • ln -s /etc/rc.d/rc.local /etc/rc.d/rc0.d/S99rclocal
      ln -s /etc/rc.d/rc.local /etc/rc.d/rc1.d/S99rclocal
      ln -s /etc/rc.d/rc.local /etc/rc.d/rc2.d/S99rclocal
      ln -s /etc/rc.d/rc.local /etc/rc.d/rc3.d/S99rclocal
      ln -s /etc/rc.d/rc.local /etc/rc.d/rc4.d/S99rclocal
      ln -s /etc/rc.d/rc.local /etc/rc.d/rc5.d/S99rclocal
  • Commands for rc.local
    • irattach /dev/ttyS1
      • makes IR port usable by applications without need of further interaction
      • e.g. for KDEPIM/PI Beam receive feature
  • Swapfile
    • A swap file is recommended / necessary if you use a lot of applications at the same time or if you use very memory-intensive programs
    • Manual and permanent swap file creation
      • dd if=/dev/zero of=/hdd3/.swapfile bs=1M count=128
        • for 128MB swap space. Change count to fit your needs.
      • mkswap /hdd3/.swapfile
      • swapon /hdd3/.swapfile
      • try with command "free" or "cat /proc/swaps"
      • Automatical enabling of swap during reboot
        • Alternative 1: install automounter-c3000_0.4.8_arm.ipk (also for SL-C3100)
          • Replace automatic swapfile recognition in /etc/rc.d/init.d/mntloop (doesn't work for some reason) by this:
          •  # turn on swap
                if [ -f $SWAP ] && [ "`grep $SWAPFILE /proc/swaps`" = "" ]; then
                  swapon $SWAP
          • automounter seems to cause problems on my configuration so I dropped it again
        • Alternative 2 (only works on C3000): use rc.local (described above) and insert the command:
          • swapon /hdd3/.swapfile
        • Alternative 3 (for C3100): use /sbin/hddmount script
          • mount -o remount,rw /
          • in /sbin/hddmount add as the last line before "exit 0":
            • swapon /hdd3/.swapfile
        • Alternative 4 (C3100, if Meanies automounter-lite or automounter package is installed)
          • in /etc/rc.d/init.d/mntloop is a section which should mount the swapfile. If this does not work, comment out the swapfile handling and replace it by the simple line in "start)":
            • swapon /hdd3/.swapfile
    • Easy graphical, but not permanant swap file creation using Anton Maslovskys Memory Monitor Plugin v1.0.3
      • Has to be reenabled after each reboot.
      • qtopia-memoryapplet_1.0.1_arm.ipk or later must be insalled
  • Loop filesystems
    • Loop devices
      • Zaurus has by default only two loop devices
      • Use hluc's mntloop script to create more of them on each reboot (See below)
      • Needed e.g. for mounting own loopback file systems or X/QT cramfs images etc.
    • Install automounter-c3000_0.4.6_arm.ipk from
      • What it does:
      • It puts as mntloop into /etc/rc.d/init.d and links it to rc5.d and rc6.d
        • ln -s /etc/rc.d/init.d/mntloop /etc/rc.d/rc5.d/S50mnt
        • ln -s /etc/rc.d/init.d/mntloop /etc/rc.d/rc6.d/K50mnt
      • And it puts some new (enhanced) hotplug scripts into /etc subdirectories
        • If you don't want that, install the automounter-lite package, that only includes the mntloop script!
    • now, if you put a loopback file system entry into /etc/fstab, mntloop will mount it aotumatically on system startup
    • Loopback file systems, being single files, can conveniently put anywhere on /hdd3
  • Special characters on console in less
    • export set LESSCHARSET=latin1
      • for less
  • File filters
    • In order to use text files created on other systems (Windows, DOS), it 
      may be necessary to convert these files.
      The scripts given here can be called from command line with the file to 
      be converted as the argument, or they can be embedded into the 
      "Send to" menu in Tree!Explorer QT Plus as a command. To do the 
      latter, use "Add command" and enter as the command
      the script name followed by "%1", e.g.
      dos2unix %1
      As a name I suggest in this case: "FIlter: DOS2UNIX"
      You can then highlight the file in Tree!Explorer and choose 
      SendTo / Filter: DOS2UNIX and the file will be converted.
      Some of the filter scripts create backups (if actual content may be modified), others don't.
    • dos2unix (CRLF --> LF)
    • #!/bin/bash
      # This script converts CRLF
      # line breaks to LF-only used in most Linux environments.
      tr -d '\015' < $1 > dos2unix.tmp &&\
      mv $1 dos2unix2.tmp &&\
      mv dos2unix.tmp $1 &&\
      rm dos2unix2.tmp                                                  
    • dos2latin1 (Codepage 850 DOS CRLF --> ISO-8859-1 LF)
    • #!/bin/bash
      # This script converts ASCII files created under MS-DOS CP850
      # to charset ISO-8859-1 as used in most Linux environments.
      # Saves a backup of the old file under FILENAME.dos
      # If .dos file exists, conversion is not done (to avoid 
      # accidental second conversion)
      # Needs iconv
      if [ ! -f "$1" ]; then
              echo "Input file does not exist ($1)"
              exit 1
      if [ ! -f "$1.dos" ]; then
              iconv -c -s -f CP850 -t ISO-8859-1 $1 | tr -d '\015' > iconv.tmp
              cp $1 $1.dos
              cp iconv.tmp $1
              rm iconv.tmp
              echo File has been converted before!
    • latin12utf8 (ISO-8859-1 LF --> UTF-8 LF)
    • #!/bin/bash
      # This script converts ASCII files using charset ISO-8859-1 
      # to charset UTF-8.
      # Saves a backup of the old file under FILENAME.latin1
      # If .latin1 file exists, conversion is not done (to avoid 
      # accidental second conversion)
      # Needs iconv
      if [ ! -f "$1" ]; then
              echo "Input file does not exist ($1)"
              exit 1
      if [ ! -f "$1.latin1" ]; then
              iconv -c -s -f ISO-8859-1 -t UTF-8 $1 > iconv.tmp
              cp $1 $1.latin1
              cp iconv.tmp $1
              rm iconv.tmp
              echo File has been converted before!
    • post2mbox (HP palmtop Post/LX mail files --> mbox format)
      • described below under "email setup"
    • gdb2csv (HP palmtop GDB database --> CSV)
      • described below under "database"
    • ascii_8bit_to_7bit
      • useful whenever an international application should deal with localized high-ASCII characters but cannot
        • example: kammu for sending SMS cannot handle German Umlauts correctly
      • Adapt sed command file to your needs
      • filter script
      • #!/bin/bash
        # This script converts special characters to 7bit ASCII
        # as defined in the sed command file 
        # /usr/bin/ascii_8bit7bit.sed
        if [ ! -f "$1" ]; then
                echo "Input file does not exist ($1)"
                exit 1
        if [ ! -f "$1.8bit" ]; then
                sed -f /usr/bin/ascii_8bit7bit.sed $1 > $1.7bit.tmp
                cp $1 $1.8bit
                cp $1.7bit.tmp $1
                rm $1.7bit.tmp
                echo File has been converted before!
      • used sed command file ascii_8bit7bit.sed
      • s/ä/ae/g
  • Convenient Internet connection for the command line
    • Script in bin directory
    • #! /bin/bash
      echo Connecting to Internet...
      qcop "QPE/Network" "connectRequest()" > /dev/null 2>&1 
      ping -c 1 "$TRY_IP"  > /dev/null 2>&1 
      while [ $? -ne 0 ] 
        sleep 5
        echo waiting for network...
        ping -c 1 "$TRY_IP" > /dev/null 2>&1
    • This script uses the QTopia internet connection dialog, if no Internet connection is detected.
    • For internet connection detection, replace TRY_IP value by an IP which is always up and near you. You can also leave the default (this is a DNS in Germany)
    • This script can be used by command line applications to establish an Internet connection
      • See mutt, slrn etc. below
  • Internationalization settings for Germany
    • cp /home/QtPalmtop/i18n/en/libsl.qmid /home/QtPalmtop/i18n/de
    • in ~/.bash_profile, set LANG="de"
      • This uses the files in /home/QtPalmtop/i18n/de
      • Here is the complete ~/.bash_profile
      • export LANG="de"
        export TC="default"
        export CHARSET="ISO-8859-1"
  • Cacko network card reset scripting (Wifi specifically)
    • There is a problem in Cacko for C3100 (also C3000?) that you need to 
      pull out and reinsert the WiFi card after disconnecting in order to be 
      able to reconnect to a WLAN after a suspend.
    • taken from
    • /etc/pcmcia/network.opts
      • change CARDSUSPEND=y to CARDSUSPEND=n
    • create new script /etc/apm.d/wlan0
    • !/bin/sh
      PATH = $PATH;/usr/bin
      case "$1" in
              cardctl suspend
              cardctl resume
    • ln -s /etc/apm.d/wlan0 /etc/apm.d/suspend.d/S20wlan0

Software development

  • Silvio Iaccarino's onboard development environment, installed on SD card
    • Download dev-image_1.5.img
    • This environment only works if al files are installed under 
      So you need an SD card formatted with ext2 file system, or you mount 
      it (loopback) to this location. The latter should work even on a 
      vfat-formatted SD card.
      I choose and describe the option of installing the files on an ext2 SD 
      card, as this is probably the more robust solution.
    • su
    • mkdir /mnt/loopback
    • mount -o loop -t cramfs dev-image_1.5.img /mnt/loopback
    • mkdir /mnt/card/devel
    • cp -a /mnt/loopback/* /mnt/card/devel/
      • don't worry about missing file "FlexLexer.h". It is a broken link.
    • umount /mnt/loopback
    • rmdir /mnt/loopback
    • Make libraries available to entire system:
      • as root: mount -o remount,rw /dev/hdc2 /hdd2
      • ln -s /mnt/card/devel/lib/* /usr/lib/
      • ldconfig
    • Now we are able to compile a lot of (simpler) programs, e.g. fetchmail, procmail, post2mbx etc.
  • perl_5.6.1-7_arm.ipk
  • automake-1.9.6
    • ./configure && make && make install
    • dead end: autoconf is required. where to get autoconf?
  • Important: After each compilation, also use "strip <binary>" in order to strip debug code. This makes the binay much smaller.
  • IPK generation
    • after compiling instead of "make install":
      • mkdir ipk
      • make DESTDIR="ipk" install
      • "ipk" can then be used as the IPK root
    • Use to create IPKs

PIM applications: KDEPIM/PI

  • easiest installed by a 'ipkg install *.ipk' in the directory with the IPKs of KDEPIM/PI on the console
  • Make KA/PI and KO/PI fastloadable (tap and hold on icons)
    • Disable fastload for built-in PIMs
  • Disable Zaurus' built-in DTM-based calendar
    • mv /opt/QtPalmtop/bin/datebook /opt/QtPalmtop/bin/datebook.renamed
    • This disables the alarms of the built-in appointment book
  • Reconfigure Application keys to start KDEPIM/PI apps (Settings / Application key)
  • mkdir /mnt/card/Documents/kdepim and set KDEPIM/PI data path to there!
  • German holidays imported via ICS file
    • from
  • Migration of Address book of HP 200LX:
    • via OL2LX PDB synced to Outlook
    • via Intellisync Outlook to Sharp DTM
    • via KDEPIM DTM to KA/PI
  • Migration of calendar from HP 200LX PIM/PE:
    • manually done via cut and paste from PIM/PE data files
    • PIM files with special characters should be converted to Latin1 using this script (embedded into SendTo menu of Tree!ExplorerQT)
    • #!/bin/bash
      # This script converts ASCII files created under MS-DOS CP850
      # to charset ISO-8859-1 as used in most Linux environments.
      # Saves a backup of the old file under FILENAME.dos
      # If .dos file exists, conversion is not done (to avoid 
      # accidental second conversion)
      # Needs iconv
      if [ ! -f "$1" ]; then
              echo "Input file does not exist ($1)"
              exit 1
      if [ ! -f "$1.dos" ]; then
              iconv -c -s -f CP850 -t ISO-8859-1 $1 | tr -d '\015' > iconv.tmp
              cp $1 $1.dos
              cp iconv.tmp $1
              rm iconv.tmp
              echo File has been converted before!
    • Here is a script to convert Latin1 "further" to UTF8
    • #!/bin/bash
      # This script converts ASCII files using charset ISO-8859-1 
      # to charset UTF-8.
      # Saves a backup of the old file under FILENAME.latin1
      # If .latin1 file exists, conversion is not done (to avoid 
      # accidental second conversion)
      # Needs iconv
      if [ ! -f "$1" ]; then
              echo "Input file does not exist ($1)"
              exit 1
      if [ ! -f "$1.latin1" ]; then
              iconv -c -s -f ISO-8859-1 -t UTF-8 $1 > iconv.tmp
              cp $1 $1.latin1
              cp iconv.tmp $1
              rm iconv.tmp
              echo File has been converted before!
    • These scripts can of course also be used for other ASCII files
  • Data export from KDEPIM/PI to mobile phone (nokia 6310i) via IR
    • Menu file / export / mobile phone
    • Settings:
      • Nokia 6310:
        • connection: irda
        • device: /dev/ircomm
      • Siemens SK65:
        • connection: at19200
        • device: /dev/ircomm
    • Sometimes it seems to be necessary to manually call "irattach /dev/ttyS1" before it works!
    • If data export breaks with an error message after some time, a bug of kammu may have stopped it:
      • If a record is too large, kammu crashes with segfault.
      • Troubleshooting: Call kammu from command line:
        • kammu text --restore /tmp/phonefile.vcf
        • See where it stops
        • Shorten the last transfered entry in the vcf and see if it works then.

Data security

  • For passwords, PINs etc. use PWM/PI from the KDEPIM/PI suite.
    • Safe and conveniently to use (GUI)
  • For secure storage of files, no matter which type and size: BestCrypt (self-compiled) (UNSUCCESSFUL, dead end!)
    • download source
    • untar
    • Copy an install-sh from another project (mutt) into the BestCrypt source tree root
    • Modify ./Makefile:
      • INSTALL = ./install-sh -c
    • Modify mod/Makefile:
      • remove if...endif around line 33
        • to avoid error "Missing seperator" when compiling
    • make
      • If you get the Error about missing asm-generic/pgtable.h
        • Comment out line 167 in /mnt/card/devel/include/asm/pgtable.h (include of asm-generic/pgtable.h)
    • sudo make install
    • NOGO: Kernel version mismatch. Apperantly wrong kernel header used. Giving up.
  • For secure storage of files, no matter which type and size: BestCrypt (precompiled)
    • Install libstdc++2.10-glibc2.2_1-2.95.4-16_arm.ipk
      • Downloaded from
    • Download bcrypt.1.6_4.1.tar.gz (from OSEF topic 18726)
    • untar it
    • sudo cp bin/*.o /lib/modules/2.4.20/kernel/drivers/block
    • sudo chown root:root /lib/modules/2.4.20/kernel/drivers/block/bc*
    • sudo depmod -a
    • sudo cp bin/bctool /opt/QtPalmtop/bin/
    • sudo cp etc/bc.conf /etc
    • sudo cp /etc/bcrypt /etc/rc.d/init.d
    • sudo cp lib/* /usr/lib
    • sudo ldconfig
    • chmod +x /etc/rc.d/init.d/bcrypt
    • Manual
      • see
    • Initialization
      • Load modules etc
        • sudo /etc/rc.d/init.d/bcrypt start
      • Create new container on PC (on Zaurus you can create, but not format a new container dur to a missing /sbin/mkfs binary)
        • Linux (demo) version:
          • bctool new -a idea -s 10M bcrypt_container
          • bctool format -t ext2 bcrypt_container
        • Windows (demo) version:
          • Start the BestCrypt Control Center
          • Menu Container / New Container
          • Take care not to format the container with NTFS but with FAT!
      • Use container on Zaurus
        • sudo mkdir /mnt/bc
        • sudo bctool mount -t vfat /mnt/card/Documents/bcrypt_container.jbc /mnt/bc
      • Make usage on Zaurus convenient

Synchronizing with Outlook over WLAN

  • Install English Intellisync on Windows machine as per intructions on
    • Perform ALL steps, including connection via USB with predefined IP addresses
  • Set up a WLAN connection (Infrastructure via AP or adhoc) between Zaurus and PC/Notebook.
    • Notebook / PC should have an IP address ending with .1
    • Otherwise some configuration files or scripts have to be tweaked, because .1 is hardcoded somewhere!
    • e.g. use for PC and for Zaurus.
  • Modify configuration in "zaurus Manager" (you find it in the system tray of Windows when you installed Intellisync) to use the WLAN IP address of the Zaurus
  • Also, set connection type to "USB TCP/IP advanced" (this has to be done with the USB cable attached to both PC and Zaurus)
  • On the Zaurus, in Settings / PC Link set the IP address of the Z's WLAN interface and also the USB TCP/IP advanced setting


  • zbedic 0.9.6 or later with many dicionaries
    • download from
    • Dictionary path e.g. /hdd3/Documents/zbedic_data
      • Copy dictionary files into that directory
      • Set zbedic dictionary path to that directory
      • let zbedic search for new dictionaries
    • even entire wikipedia can be used in zbedic
      • Download wikipedia dump from
      • Copy the file into the dictionary directory
      • Let zbedic search for new dictionaries


  • download TimetrackerAnalysis package from (Zaurus-package)
  • Install tta_0.9.2_arm.ipk
  • mkdir /mnt/card/Documents/bin/lib
    • This will be for large libraries
  • Copy to /mnt/card/Documents/bin/lib/
  • su
  • ln -s /mnt/card/Documents/bin/lib/ /opt/QtPalmtop/lib
  • Move the TT Analysis icon into the PIM tab
  • Now TTAnalysis evaluates the data in kdepim/apps/timetrackerdir


  • There is now an IPK package available for this complex Email setup:
    • "hmc-muttmail" from
  • General considerations
    • This is a console based set of applications. No QTopia GUI. But it is still convenient to use with the provided settings and scripts.
    • Choose a location where the data files (mailboxes, signature, queue) are stored. See below.
      • default is /home/zaurus/Documents/Mail
    • Settings (rc files) for all software conponents are stored in /home/zaurus/
    • Rather do not store your mailbox files on a vfat file system such as the Documents folder of a SL-C3x00!
      • The reason is:
        mutt uses the file properties "last access date" and "last modified date" 
        and compares them in order to determine if there is new mail in a 
        mailbox. On a vfat file system there is only one date field in the 
        properties for a file, so the new mail detection of mutt will not work.
        Another reason is: If you keep your mail files on the hard disk
        (Microdrive) of an SL-C3x00, mutt will be slower than if the files are on 
        flash memory, such as an SD card. Every cursor movement in mutt, 
        selecting another message in the message list, will cause the microdrive 
        to spin up. This costs time and probably shortens the lifetime of the 
        Another reason: If you work with email a lot (like I do), using SD 
        instead of microdrive as storage will save power!
      • So I used /Mail on an ext2-formatted SD card, i.e. /mnt/card/Documents/Mail as my mail directory
      • But FAT works, too, only less well
    • Maildir or mbox?
    • mutt supports mailboxes in maildir format (one file per mail, folder 
      structure), and mbox files (one file for an entire mailbox, can also be 
      stored in subdirectories).
      I have chosen mbox due to the high compatibility with other mail 
      programs and because it was easier to migrate my old HP 200LX Post/LX 
      mailbox files to mbox than to maildir. I have written a simple program 
      POST2MBX for that task.
    • All files / directories which should not appear in mutt as a mailbox or mailbox folder, but reside in the mail directory, should be preceded by a dot
      • e.g. the ".outgoing_queue" or the ".tmp" folder or the ".signature" file
    • "bin directory" refered to below, should be /opt/QtPalmtop/bin
      • since this is where paths to binaries in the default rc files point to
  • install package openssl-0.9.7a for secure email connections
  • install package libncurses_5.0_arm.ipk
  • Migration from HP 200LX: POST2MBX by Daniel Hertrich converts Post/LX to MBOX
    • download from
  • fetchmail sources 6.2.5 compiled
    • fetchmail is for fetching mail from a POP3 server
    • ./configure
    • for make, yacc is needed: byacc_1.9_arm.ipk installed
    • make works. Executables fetchmail and fetchmailconf into bin directory
  • procmail 3.22 sources compiled
    • procmail is for filtering mail into different folders, based on various conditions
    • Modifications to src/authenticate.c
      • #define MAILSPOOLDIR    "/tmp"
        #define MAILSPOOLHOME "/."
      • this makes sure procmail does not try to access /var/spool/mail/zaurus, which does not exist on the Zaurus
    • make
    • put binaries procmail and formail into bin directory
  • mutt sources 1.5.10i compiled
    • mutt is the mail program
    • Download from
    • in Iaccarino's devel environment, do the following to let the compiler access the ncurses includes
      • ln -s /mnt/card/devel/include/ncurses/* /mnt/card/devel/include/
    • ./configure --prefix=/opt/QtPalmtop --with-homespool=mailspool --enable-pop --enable-imap --enable-buffy-size
      • enable-buffy-size lets mutt use the mailbox size to determine if there are new messages in a mailbox (otherwise it uses the modification vs the access date)
        • this is NEEDED if the mbox files will reside on a vfat partition. It can also be used for ext2/3.
    • in config.h replace #define USE_DOTLOCK 1 by #undef USE_DOTLOCK
      • This is only necessary if your mailbox files will reside on a vfat partition (not recommended anyway)
      • It switches off the dotlocking mechnanism which wouldn't work with mailboxes on a FAT partition (error message "Lock count exceeded" when trying to open / close a mailbox)
    • make
    • put mutt binary into bin directory
  • export set TERM=linux
    • enables colors in qkonsole and keeps cursor keys working!
    • But still Umlaut problems...
      • probably an issue with the used combination of libc and libiconv.
  • msmtp 1.4.4 sources compiled
    • msmtp is the program which sends the mails out via SMTP
    • compiled without TSL/SSL support, because libraries were missing, but I don't need that right now)
    • put src/msmtp into bin directory
    • put the enqueue / runqueue scripts (v0.4, seperate package) into bin directory
  • Setup
    • Sloppily following the directions on or
    • needed: libiconv_1.8-2_arm.ipk
    • ~/.fetchmailrc example (put in your own mail server and authentication data)
    • poll your.pop.server 
      protocol pop3 
      user "username" 
      password "password" 
      is zaurus 
      mda "/opt/QtPalmtop/bin/procmail -f %F"
    • chmod 600 ~/.fetchmailrc
    • fetchmail options
    • -k keep messages on server
      -v verbose
      -a fetch all emails
      -m forward messages to procmail
    • ~/.procmailrc example (adapt procmail receipes to your needs, you can delete all receipes and only leave the "default" receipe if you do not need mail filtering)
    • # All subsequent paths are relative to:
      #Spam filter
      * ^Subject:.*(credit|cialis|viagra|sex|penis|mortgage|OEM)
      #All other emails into default inbox folder
      * .*
    • mkdir /home/zaurus/Documents/Mail
      • reminder: Best is to use an SD card formatted with ext2 file system, but in general, the Mail directory may reside on any file system with enough space on it
    • Put old mbox files into that new Mail folder
      • in .muttrc, reference them as e.g. mailboxes =filename if you want to see them in mailbox list
        • "filename" must be relative to the Mail directory
    • create or at least touch all inbox files defined in procmailrc, they must exist if procmail writes to them!
    • Test run: fetchmail -akv -m "/opt/QtPalmtop/bin/procmail -d %T"
      • This does not delete msgs on server
      • all mails from the server should now be in the mailbox files specified in .procmailrc in /mnt/card/Documents/Mail/
    • ~/.muttrc example (adapt the upper part of it, leave the lower part for now as it is)
    • # ============== Adapt to your needs: ====================
      set from="This email address is being protected from spambots. You need JavaScript enabled to view it."         #set to your from address
      set realname="Firstname Lastname"            #set to your name
      # *** Directory and file settings: ***
      set folder = /mnt/card/Documents/Mail
      set tmpdir = /mnt/card/Documents/Mail/.tmp     #don't forget to create this first!
      set record = /mnt/card/Documents/Mail/sent    #sent mail is saved here (this is an mbox file)
      set postponed = /mnt/card/Documents/Mail/send_postponed
      set signature = /mnt/card/Documents/Mail/.signature   #don't forget to create your signature!
      set editor="pico"                         #or set vi, vim, emacs...
      mailboxes =default                        #set names of your mailboxes in mail folder
      mailboxes =hplx                           #(the same ones as the filter targets in .procmailrc)
      mailboxes =hplx-zaurus                    #take care about the space in front of the equal sign!
      mailboxes =dabeta
      mailboxes =spam                           #take care these files exist (empty) in "folder" (see below)
      mailboxes =backlight_preview
      mailboxes =mutt-users
      mailboxes =mutt-announce
      mailboxes =slrn-user
      subscribe hplx@fred                      #subscribed to these mailing lists
      subscribe hplx-zaurus@fred
      subscribe This email address is being protected from spambots. You need JavaScript enabled to view it.
      subscribe This email address is being protected from spambots. You need JavaScript enabled to view it.
      subscribe dabeta@
      subscribe This email address is being protected from spambots. You need JavaScript enabled to view it.
      subscribe backlight@fred
      # ====== From here do not touch unless you know what you are doing: =======
      # set correct mail addresses for mailing lists, use M for m:
      folder-hook . 'bind index m mail'
      bind index M mail
      folder-hook '=mutt-users' 'macro index m "<mail>n<kill-line>This email address is being protected from spambots. You need JavaScript enabled to view it."
      folder-hook '=hplx' 'macro index m "<mail>n<kill-line>This email address is being protected from spambots. You need JavaScript enabled to view it."
      folder-hook '=hplx-zaurus' 'macro index m "<mail>n<kill-line>This email address is being protected from spambots. You need JavaScript enabled to view it."
      folder-hook '=backlight_preview' 'macro index m "<mail>n<kill-line>This email address is being protected from spambots. You need JavaScript enabled to view it."
      folder-hook '=slrn-user' 'macro index m "<mail>n<kill-line>This email address is being protected from spambots. You need JavaScript enabled to view it."
      # do not save messages to myself or to mailing lists in main
      # sent file
      fcc-hook '~t ^windows_pc@online\.de$' '/dev/null'
      fcc-hook '~l' '=sent_to_lists'
      set mime_forward = ask-yes
      #set sort_browser=date
      #set implicit_autoview = yes
      auto_view text/html                      # use .mailcap for these mime types
      # *** For SENDING mail: ***
      set use_from = yes
      set envelope_from = yes
      set sendmail="/usr/bin/"  #for queued sending (recommended for Zaurus)
                                                #needs mstmp-runqueue for actual sending
      #set sendmail="/usr/bin/msmtp"            #here mail is sent immediately from mutt.
                                                #only posible if internet connection is active
                                                #while hitting "y=send" in mutt
      #macro generic S ":unset wait_key\n!\r"    #run msmtp-runqueue when hitting key S
      # *** For RECEIVING Mail: ***
      #macro generic G ":unset wait_key\n!/usr/bin/fetchmail -k -m '/usr/bin/procmail -d %T'\r" 
      #macro index   G ":unset wait_key\n!/usr/bin/fetchmail -k -m '/usr/bin/procmail -d %T'\r"
                                     #run fetchmail by hitting key G
      macro generic G ":unset wait_key\n!/usr/bin/\n"
      macro index G ":unset wait_key\n!/usr/bin/\n" 
      # *** Appearance: ***
      set status_format=" %r %b %f %n      Del %d      Msgs %m %l %> (%P)"
      set pager_format="%-10.10i %[!%a %b %d %R]"
      set date_format="!%H:%M %a %d %b     "
      set index_format="%4C %Z %[%b%d] %-15.15F %s"
      set folder_format="%2C %t %8s %d %N %f"
      set pager_context=1                     
      set pager_index_lines=5                   #show a mini-index in pager
      set menu_scroll
      set pgp_verify_sig=no                     #dont show pgp in pager
      set status_on_top                         #put status line at top
      set sort=date                             #sort by message date in index
      #set allow_8bit
      #set pager="less"                         #you can set an alternative pager
      #set locale=\"de_DE\"                     #you may set this to your local locale
      set ascii_chars                           #use ASCII characters for threading in index
      #set delete=yes                           #delete without prompting
      set include=yes                               #quote msg in reply       
      set fast_reply=yes                            #no prompting on reply
      set beep=no                                         #no noise
      set markers=no                                #no + on wrapped lines
      set confirmappend=no                          #no prompt for save to =keep           
      #set to_chars=" +TCF"                     #no L for mail_list
      set mark_old = no                         #do not mark unread messages as old when leaving mailbox
      set charset="us-ascii"
      #set charset="iso-8859-1"
      set send_charset="us-ascii:ISO-8859-15:utf-8"
      save-hook .* =archive                     #default mbox to (s)ave mail is "=archive"
      bind pager h display-toggle-weed        #toggle headers with h key
      # simulate the old url menu
      macro index \cb |urlview\n 'call urlview to extract URLs out of a message'
      macro pager \cb |urlview\n 'call urlview to extract URLs out of a message'
      # default list of header fields to weed out when displaying mail
      #ignore them all and then unignore what you want to see
      ignore *
      unignore  Date To From: Subject
      hdr_order Date To From Subject 
      # Including the file where you can store your aliases
      # format:
      # fl This email address is being protected from spambots. You need JavaScript enabled to view it. (Firstname Lastname)
      source /mnt/card/Documents/Mail/.aliases
      source ~/.muttrc_colors
      # End of file...but it can go on and on and on....:)
    • ~/.muttrc_colors example (optimized for good readability on the Zaurus screen)
    • color hdrdefault cyan default
      color quoted   green default
      color signature  cyan default
      color attachment brightyellow default
      color status   brightgreen blue
      color tree     red default
      color markers  brightred default
      color tilde    blue default
      color header   brightgreen default ^From:
      color header   brightcyan default ^To:
      color header   brightcyan default ^Reply-To:
      color header   brightcyan default ^Cc:
      color header   brightblue default ^Subject:
      color body     brightblue default [\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+
      color body     brightblue default (http|ftp)://[\-\.\,/%~_:?\#a-zA-Z0-9]+
      # my own messages
      color index      brightyellow   default    ~P
      # new messages
      color index      yellow default       ~N
      # deleted messages
      color index      red default         ~D 
      # tagged messages
      color index      black        green      ~T
      color indicator black cyan
    • The Online script /usr/bin/
      • #!/bin/bash
        # netconnect script: See Zaurus Productivity Setup by Daniel Hertrich:
        echo Sending mail...
        echo Fetching new mail...
        /usr/bin/fetchmail -k -m '/usr/bin/procmail -d %T'
      • uses qcop to call the QTopia network applet for a connection, then fetches and sends email
      • Maybe exchange the IP address ping tried to reach by an address of a server which is nearer to you
    • mkdir /mnt/card/Documents/Mail/.tmp
      • we need a large enough temp directory for mutt
    • touch /mnt/card/Documents/Mail/sent
      • this will be the mailbox where sent mail is stored. Maybe you want to archive it from time to time.
    • ~/.msmtprc
    • account GMX
      logfile /mnt/card/Documents/Mail/.outgoing_queue/msmtp_log
      from This email address is being protected from spambots. You need JavaScript enabled to view it.
      auth on
      user username
      password password
      protocol smtp  
    • edit the scripts and change the queue directory to /mnt/card/Documents/Mail/.outgoing_queue
    • mkdir /mnt/card/Documents/Mail/.outgoing_queue
    • script "m" into bin and link to /usr/bin (to start mutt conveniently)
    • #!/bin/bash
      ps -x | grep "mutt -y" | grep -v "grep" > /dev/null
      if  [ $? -ne 1 ]; then 
      echo "Mutt is already running!"
      exit 1
      export set TERM=linux
      unset LC_ALL
      export set LC_CTYPE=../../../hdd3/tmp/de_DE
      mutt -y
    • MIME handling (viewing HTML mails and attachments)
      • HTML mails
        • ~/.mailcap
        • text/html; links -dump -assume-codepage UTF-8 %s; copiousoutput   
        • take care you have "auto_view = text/html" in .muttrc
        • Install the package links-ssl_0.3_arm.ipk (Links web browser for HTML decoding)
        • ln -s /usr/lib/ /usr/lib/
        • ln -s /usr/lib/ /usr/lib/
      • Image viewing
        • ~/.mailcap
        • image/jpeg; zimager %s;
        • only for JPEG!
      • PDF viewing
        • ~/.mailcap
        • text/html; links -dump -assume-codepage UTF-8 %s; copiousoutput   
          application/pdf; qpdf %s;
        • Install package qpdf2_render-freetype-2.2.1-20040217_arm.ipk
        • Remove the "magnify screen" flag from the PDF viewer icon
      • Open Word attachments in Hancom Word
        • ~/.mailcap
        • application/hancomword; HancomMobileWord %s;
          application/msword; HancomMobileWord %s;
          application/rtf; HancomMobileWord %s;
      • Open Excel attachments in Hancom Sheet
        • ~/.mailcap
        • application/excel; hancomsheet %s;
          application/hancomsheet; hancomsheet %s;
  • Usage of this setup
    • call m at console to start mail environment (mutt)
    • Press G (shift-g) in mutt for an online run (establishing connection, fetching and sending mail)
      • The "macro generic G" line in muttrc controls this.
    • written mails will be enqueued by and they are put into the "sent" file
      • The "set sendmail" line in muttrc controls this
    • If you are done testing this setup and you want to use this as your mail central:
      • delete your mailbox files and recreate them using "touch" (i.e. deplete them)
        • This cleanup removes duplicates of mail you may have due to frequent trying of the fetchmail/procmail setup
      • Run the script using Shift-g in mutt once more to "synchronize" your mailbox files with the mail server
      • Edit
      • remove the -a option of the fetchmail command: This tells fetchmail to only receive new mails, not All
      • remove the-k option of the fetchmail command: This tells fetchmail to not Keep the messages on server, but to delete them after reception.
      • Now, whenever a new mail has arrived on the server and you press Shift-g in mutt, the new mail is fetched and deleted on the server
    • You can even put the SD card into another Linux machine and use your mail files there.
    • If you ever want to modify a written message which is queued for sending but is not sent yet, go into the .outgoing_queue directory and edit the corresponding *.mail file

Newsreader (slrn with slrnpull for offline news reading)

  • Install package slrn_0.9.8.0_arm.ipk (that one with slrnpull, from
  • ~/.slrnrc example (adapt to your needs)
    • set username "username"
      set hostname "host.tld"
      set realname "Firstname Lastname"
      %set signature ".signature"
      server "" "/hdd3/Documents/News/.jnewsrc"
      server "spool" "/hdd3/Documents/News/.jnewsrc_spool"
      nnrpaccess "" "username" "password"
      set signoff_string "greetings from myself"
      %set unsubscribe_new_groups 1
      %Use mutt for sending email-replies
      set mail_editor_command "mutt -H '%s'"
      set mail_editor_is_mua 1
      %Auto-save to the newsrc file itself intead of a temporary one
      set no_autosave 2
      %Switch off confirmation request for "next unread article"
      set query_next_article 0
      %Switch iff confirmation request for "next unread article in next group"
      set query_next_group 0
      %Do not ask for downloading x<10000 articles when entering a group.
      %Because here the articles are stored locally bz slrnpull,
      %it is unnecessary anyway
      set query_read_group_cutoff 10000
      %Use ASCII chars for thread tree visualization
      set simulate_graphic_chars 1 
      %Settings for message display
      set wrap_flags 5
      set wrap_method 2
      % This can either be set to "nntp" (read online) or "spool" (use local spool)
      set server_object "spool"
      % This can be "nntp" (post directly to the server), "inews" (use external
      % program for posting) or "slrnpull" (spool message for slrnpull to send).
      set post_object "slrnpull"
      set postpone_directory "/hdd3/Documents/News/postponed"
      set save_directory "/hdd3/Documents/News/saved"
      set save_posts "/hdd3/Documents/News/sentposts"
      set save_replies "/hdd3/Documents/News/sentmails"
      set sendmail_command "/usr/bin/" 
      % Basic directory settings
      set spool_inn_root "/hdd3/Documents/News/spool"
      set spool_root "/hdd3/Documents/News/spool/news"
      set spool_nov_root "/hdd3/Documents/News/spool/news"
      % These are relative to spool_inn_root unless they start with "/".
      set spool_active_file "data/active"
      set spool_activetimes_file "data/active.times"
      set spool_newsgroups_file "data/newsgroups"
      % This value is relative to the directories under spool_nov_root:
      set spool_nov_file ".overview"
      % Whether to check for each article when reading an overview file (slower,
      % but may save you from lots of "article not available" errors).
      %set spool_check_up_on_nov 0
      %% 3. Which external programs do you want to use?
      % Set your favourite editor.  Use %s for the file name and %d for the line
      % where the cursor should be placed (usually at the beginning of the body).
      set editor_command "pico +%d %s"
      % You can have separate commands for editing posts, mail, and score files.
      %set mail_editor_command "jed '%s' -g %d -tmp --mail-mode"
      %set post_editor_command "jed '%s' -g %d -tmp --mail-mode"
      %set score_editor_command "jed '%s' -g %d -tmp --score-arrange-score"
      % If non-zero, abort posting or email operation if the file was not modified
      % by the editor.
      %set abort_unmodified_edits 0
      % In case we need metamail to display an article:
      %set metamail_command "metamail"
      % WWW browser to use. Xbrowser is used when the DISPLAY environment variable
      % is set; non_Xbrowser otherwise.
      %set non_Xbrowser "lynx '%s'"
      %set Xbrowser "netscape '%s' &"
      % Command to use for printing
      % Note: On Win32, this variable defines the name of the printer queue to use.
      %set printer_name "lpr -Plp"
      % Note: All filenames in this section are relative to HOME unless they start
      %       with a '/'.
      set failed_posts_file "/hdd3/Documents/News/failed.posts"
      set mime_charset "iso-8859-1"
      % For header window:
      % These sorting methods are available:
      % If 0, do not sort.  If 1, perform threading.  If 2, sort by subject.
      % If 3, thread then sort result by subject.
      % If 4, sort by score.  If 5, thread then sort by score.
      % If 6, sort by score and subject.
      % If 7, thread, then sort by score and subject.
      % If 8, sort by date with most recent first.
      % If 9, thread, then sort by date with most recent first.
      % If 10, sort by date with most recent last.
      % If 11, thread then sort by date with most recent last.
      %set sorting_method 3
      % If non-zero, a header with a new subject will start a new thread.
      %set new_subject_breaks_threads 0
      %% 8. Some preferences for the article pager (see the manual for more)
      % Which headers do you want to see by default?
      % You can also match all headers starting with a given string and exclude
      % specific headers by preceding them with "!" (e.g. use "X-,!X-Trace:" to
      % display all the "X-"headers except "X-Trace:").
      %visible_headers "From:,Subject:,Newsgroups:,Followup-To:,Reply-To:"
      % If non-zero, #v+ and #v- will be interpreted as markers of verbatim lines.
      %set process_verbatim_marks     1
      % If non-zero, hide #v+/#v- verbatim marks.
      %set hide_verbatim_marks 0
      % If non-zero, hide signature in articles.
      %set hide_signature             0
      % If non-zero, hide PGP signature in articles.
      %set hide_pgpsignature          0
      %% 9. Display / color settings
      % If non-zero, slrn will draw the thread tree using simple ascii characters
      %set simulate_graphic_chars 0
      % Enable xterm/win32 mouse support: 1 to enable, 0 to disable
      %set mouse 0
      % Draw cursor bar ala tin instead of slrn "->" cursor?
      %set display_cursor_bar 0
      % Set to 1 to have slrn scroll by full page instead of by line.
      %set scroll_by_page 0
      % Should color be used to indicate the score of an article?
      % (0) scores do not influence colors (1) scores are colored by their value
      % (2) subjects are colored by score  (3) both are colored by score
      %set color_by_score 3
      % If non-zero, the subjects of unread articles are highlighted
      %set highlight_unread_subjects 1
      % If non-zero, URLs are highlighted.
      %set highlight_urls 1
      % Enables blinking in monochrome mode and allows bright backgrounds in some
      % color terminals:
      %set use_blink 1
      % This color object is only used when highlight_unread_subjects is set to 2
      % (see the reference manual for details):
      color unread_subject    "white"         "black" "bold"
      mono  unread_subject    "bold"
      % These settings are used for color terminals:
      color article           "lightgray"     "black"
      color author            "magenta"       "black"
      color boldtext          "brightblue"    "black" "bold"
      color box               "black"         "white"
      color cursor            "brightgreen"   "black"
      color date              "lightgray"     "black"  
      color description       "lightgray"     "black"
      color error             "red"           "black" "blink"
      color frame             "yellow"        "blue"
      color from_myself       "brightmagenta" "black" "bold"
      color group             "lightgray"     "black" "bold"
      color grouplens_display "lightgray"     "black"
      color header_name       "green"         "black" "bold"
      color header_number     "green"         "black"
      color headers           "brightcyan"    "black"
      color neg_score         "green"         "black"
      color pos_score         "blue"          "black"
      color high_score        "red"           "black" "bold"
      color italicstext       "magenta"       "black" "bold"
      color menu              "yellow"        "blue"
      color menu_press        "lightgray"     "yellow"
      color message           "lightgray"     "black"
      color normal            "lightgray"     "black"
      color pgpsignature      "lightgray"     "black"
      color quotes            "red"           "black"
      color quotes1           "magenta"       "black"
      color quotes2           "brown"         "black"
      color quotes3           "brown"         "black"
      color quotes4           "brown"         "black"
      color quotes5           "brown"         "black"
      color quotes6           "brown"         "black"
      color quotes7           "brown"         "black"
      color response_char     "green"         "black" "bold"
      color signature         "red"           "black"
      color selection         "yellow"        "blue"  "bold"
      color status            "yellow"        "blue"
      color subject           "lightgray"     "black"
      color thread_number     "lightgray"     "black" "bold"
      color tilde             "green"         "black" "bold"
      color tree              "red"           "black" "bold"
      color underlinetext     "cyan"          "black" "underline"
      color url               "white"         "black" "bold"
      color verbatim          "green"         "black"
      % These attributes are for terminals that cannot display color:
      mono article            "none"
      mono author             "none"
      mono boldtext           "bold"
      mono cursor             "bold"  "reverse"
      mono date               "none"
      mono description        "none"
      mono error              "blink"
      mono frame              "reverse"
      mono from_myself        "bold"
      mono group              "bold"
      mono grouplens_display  "none"
      mono header_name        "bold"
      mono header_number      "none"
      mono headers            "none"
      mono high_score         "bold"
      mono italicstext        "bold"
      mono menu               "reverse"
      mono menu_press         "none"
      mono neg_score          "none"
      mono normal             "none"
      mono pgpsignature       "none"
      mono pos_score          "reverse"
      mono quotes             "none"
      mono quotes1            "none"
      mono quotes2            "none"
      mono quotes3            "none"
      mono quotes4            "none"
      mono quotes5            "none"
      mono quotes6            "none"
      mono quotes7            "none"
      mono response_char      "bold"
      mono selection          "bold"  
      mono signature          "none"
      mono status             "reverse"
      mono subject            "none"
      mono thread_number      "bold"
      mono tilde              "bold"
      mono tree               "none"
      mono underlinetext      "underline"
      mono url                "bold"
      mono verbatim           "none"
      %Onekey-score macro for easy thread watching
      set macro_directory "/hdd3/Documents/News/macros/"
      interpret ""
      setkey article OneKeyScore->watch_subthread "^W"
      setkey article OneKeyScore->ignore_subthread "^K"                 
      set scorefile "/hdd3/Documents/News/scorefile"
    • be sure to use the "server" config command to let slrn save the newsrc file in the News directory instead of in the home (where it may take too much room!)
  • We need these directories (mkdir them!):
    • /hdd3/Documents/News
    • /hdd3/Documents/News/postponed
    • /hdd3/Documents/News/saved
    • /hdd3/Documents/News/spool
      • /hdd3/Documents/News/spool/news
    • /hdd3/Documents/News/macros
  • export set NNTPSERVER=''
  • slrn --create
    • initializes slrn
  • script "sp" for easy slrnpull start
  • #!/bin/bash
    # netconnect script: See Zaurus Productivity Setup by Daniel Hertrich:
    slrnpull -d "/hdd3/Documents/News/spool" -h ""
  • script "s" for easy slrn start
  • #!/bin/bash
    ps -x | grep "slrn -f" | grep -v "grep" > /dev/null
    if  [ $? -ne 1 ]; then
    echo "slrn is already running!"
    exit 1
    export set NNTPSERVER=""
    slrn -f /hdd3/Documents/News/.jnewsrc
  • slrn -h "" -d
    • This downloads a list of available newsgroups from your server where you can later search for interesting groups. The file will be saved where the newsrc file resides ("server" command in config file)
  • Setup of slrnpull
    • /hdd3/Documents/News/spool/authinfo
    • If your news server requires authentication, generate this file and put 
      the login name into the first line, password into the second line.
    • /hdd3/Documents/News/spool/slrnpull.conf
      • # field 1: newsgroup name
        # field 2: how many articles are pulled at most
        # field 3: articles expore after x days (* for never)
        # field 4: 0 : pull bodies, 1 : Pull headers only
        # if a newsgroup lacks values, the default values are used
        default 300     14      0
        de.test 10      7       0
      • Put the names of the newsgroups of your interest and parameters (see comments) into this file
  • Setup of onekey-score macro (for "watching" threads easily)
    • copy into /hdd3/Documents/News/macros
    • add to ~/.slrnrc:
    • %Onekey-score macro for easy thread watching
      set macro_directory "/hdd3/Documents/News/macros/"
      interpret ""
      setkey article OneKeyScore->watch_subthread "^W"
      setkey article OneKeyScore->ignore_subthread "^K"
      set scorefile "/hdd3/Documents/News/scorefile"                    
  • Usage
    • Invoke "sp" to pull news articles (network connection is established if necessary)
    • If slrnpull is finished, you can call "s" to read and write news articles.
      • You will see an empty list, press Shift-L and enter * to see the newsgroups
    • On first start, in slrn you will see an empty newsgroup list. Press Shift-L and then * and enter, this brings up all slrnpull-ed NGs. Then subscribe to each NG by pressing s repeatedly.
      • From now on, on each slrn start the NG list view will show NGs with new messages.
    • If you have written articles, call "sp" anew to post the new articles
    • If you want to write an email-reply (r), the setup above cooperates with mutt to use that for writing the mail. If you do not have mutt installed, modify ~/.slrnrc accordingly (set mail_editor... settings)
    • Adding new newsgroups
      • Add the desired newsgroup to /hdd3/Documents/News/spool/slrnpull.conf
      • Run sp to pull that newsgroup
      • Run s to start slrn
      • Press Shift-L and enter * to display all available newsgroups. The new one(s) wil be displayed as unsubscribed
      • Press s on these newsgroup(s) to subscribe to them
    • Deleting newsgroups
      • Unsubscribe the not wanted newsgroup in slrn (press u) and quit slrn
      • delete the entry for this newsgroup in /hdd3/Documents/News/spool/slrnpull.conf
      • delete the newsgroup (sub)tree in the directory structure of /hdd3/Documents/News/spool/news
    • Watching threads
      • if onekey-score macro is installed (see above):
      • Move cursor to (sub)thread to watch
      • Hit Ctrl-w
      • On next slrn start the thread will be marked red and moved to the top of the index
    • Cleaning up the news spool
      • expired articles should be removed from time to time using
        • slrnpull -d "/hdd3/Documents/News/spool" --expire
      • This can take quite some time
      • So it is a good task for the daily maintenance script (see under "Maintenance")

Fax send / receive

  • efax 0.9

Photo file handling

  • Sharp Photo Storage version 1.0.0 English
    • package photostorage_1.0.0-en_arm.ipk
    • If you want to use the Zaurus as mobile photo album / camera companion
  • Viewing: with Tree!Image using optimized files (Picasa export 640x480)
  • Convenient way to prepare slideshows for Zaurus:
    • Many programs, e.g. Picasa under Windows, allow bulk-export of a collection with resizing the images
    • resize them to abt. 640x480, use good JPG quality
    • Then copy them to the Zaurus
    • Using large files (directly from camera) makes loading on Zaurus very slow!
  • There are even ImageMagick binaries available for the Zaurus:
    • ImageMagick_bin_zaurus_5_4_6.tar.tar


  • Hardware: D-Link DCF-660W (prism2_cs driver is used, works out of the box)
  • Alternative HW: Ovislink WL-1100CF (prism2_cs driver)
  • needs addition to /etc/pcmcia/wlan-ng.conf:
    card "Ovislink"    
    version "INTERSIL3", "Generic-Flash" 
    #   manfid 0x000b, 0x7100    
    bind "prism2_cs"
    then restart PCMCIA using
    /etc/rc.d/init.d/pcmcia restart                                               
  • Via Setting / Network / Add easily configurable

Outlining / Notetaking

  • StageOne!
    • StageOne! is the most intuitive and stable software, yet actively developed
    • Migration from HP 200LX MM/LX: Latest version of MM/LX (v3.5x) has StageOne compatible XML export built-in
    • StageOne does not yet support some MM/LX features, but maybe will (File links etc.)
    • Enhancing HTML export feature of StageOne by external solution
      • Many thanks for Jason Haslup for his valuable help in creating initial 
        versions of the and one2html.xslt scripts and for patching 
        fly with the opoly feature!
      • Installing libxml2
        • gtar -xzvf libxml2-2.6.22.tar.gz
        • cd libxml2-2.6.22
        • ./configure --prefix=/usr --includedir=/mnt/card/devel/include --mandir=/hdd2/usr/local/man
        • export set TMPDIR=/hdd2/tmp
        • make
        • make install
          • /usr/lib/pkgconfig could not be created in my case
          • reason: I linke the qtphone libgammu stuff there, so this directoy existed as a link.
          • Delete the link
          • rerun make install
          • linked CONTENTS of link taget into new diectory
            • ln -s /hdd3/Documents/Install_Files/MobPhones/von_helmut_kolb/gnokii-0.6.4_inst/usr/lib/pkgconfig/* /usr/lib/pkgconfig/
      • Installing libxslt
        • gtar -xzvf libxslt-1.1.15.tar.gz
        • cd libxslt-1.1.15
        • ./configure --prefix=/usr --includedir=/mnt/card/devel/include --mandir=/hdd2/usr/local/man
        • make
        • make install
      • Installing gdLibrary
        • Make sure libpng 1.2.5 is installed (via IPK)
        • ln -s /usr/lib/ /mnt/card/devel/lib/
        • sudo ldconfig
        • Installing zlib-devel_1.2.1_arm.ipk in a special way
          • ipk wants to install .h files to /usr/include, which cannot be done, so:
          • mkdir /mnt/card/temp
          • ipkg zlib-devel_1.2.1_arm.ipk
            • (don't care about "bad tar header" and input/output errors)
          • ipkg -d /mnt/card/temp zlib-devel_1.2.1_arm.ipk
          • cp /mnt/card/temp/usr/include/* /mnt/card/devel/include
          • rm -rf /mnt/card/temp
        • Installing some additional .h files, downloaded from internet
          • jerror.h
          • jpeglib.h
          • jconfig.h
          • jmorecfg.h
          • png.h
          • pngconf.h
          • From freetype-2.1.10.tar.gz all content of "inculde" into /mnt/card/devel/include/
            • freetype.h
            • ftglyph.h
            • ftsizes.h
          • From fontconfig-2.3.91.tar.gz fontconfig/*.h into /mnt/card/devel/include/fontconfig
        • Make sure the libraries themselves are installed
          • libjpeg
          • libpng
          • zlib
        • gtar -xzvf gd-2.0.33.tgz
        • cd gd-2.0.33
        • ./configure --prefix=/usr --without-x --includedir=/mnt/card/devel/include
        • config.h changes
          • #undef HAVE_LIBXPM
        • Makefile changes
          • replace -lpng with -lpng12
        • make
        • make install
      • Installing fly
        • download fly-2.2.0.tar.gz from
        • gtar -xzvf fly-2.2.0.tar.gz
        • cd fly-2.2.0
        • Changes to sources (diffs)
          • Added the opoly function. The original poly function closes polygons 
            automatically. The polygon sketches created by StageOne however are 
            usally unclosed. The new opoly function allows to generate open 
          • fly.h
          • 50a51
            > #define OPOLY 61
          • fly.c
          • 369a370,405
            >            case OPOLY:      /* gdImagePolygon() */
            >                    done = FALSE; i=0;
            >                    if (!quiet) fprintf(verbose_out,"## Polygon ## (");
            >                    colour=get_colour(infile,img);
            >                    if (!quiet) fprintf(verbose_out,") ");
            >                    arg[i++] = get_number(infile); /* get first point */
            >                    arg[i++] = get_number(infile);
            >                    while( ! done ){     /* get next point until EOL*/
            >                            for(c=0; c<=1 ;c++){
            >                                    arg[i++]=get_number(infile);
            >                            }
            >                            if (!quiet) fprintf(verbose_out,"%d,%d to %d,%d; ",
            >                                    arg[i-4],arg[i-3],arg[i-2],arg[i -1]);
            >                    }
            >                    num_entries = i / 2;  i=0;
            >                    for(n=0; n<num_entries; n++)
            >                    {
            >                            points[n].x = arg[i++];
            >                            points[n].y = arg[i++];
            >                    }
            >                    if( brush_on ) {
            >                            gdImageOpenPolygon(img, points, num_entries, gdBrushed);
            >                    } else if ( style_on ) {
            >                            gdImageOpenPolygon(img, points, num_entries, gdStyled);
            >                    } else {
            >                            gdImageOpenPolygon(img, points, num_entries, colour);
            >                    }
            >                    done = FALSE;
            >                    if (!quiet) fprintf(verbose_out,"\n");
            >                    break;
            >            *opoly="opoly",
            >    }
            >    if( strcmp(input_type, opoly) == 0 ){
            >            free(input_type);
            >            return OPOLY;
        • Makefile changes
          • replace -lpng with -lpng12
        • make
        • put fly binary into binary dir and link into /usr/bin
        • ln -s /mnt/card/devel/lib/ /mnt/card/devel/lib/
        • ln -s /mnt/card/devel/lib/* /usr/lib/
        • ldconfig
      • Installing HTML tidy
        • Download IPK from
        • Installation from source:
          • Download source from
          • go into built/gmake direktory
          • make
          • copt tab2space and tiyd binaries from bin directory in source tree to /opt/QtPalmtop/bin
      • Using xsltproc from libxslt together with XSLT sheet to convert StageOne file to HTML (example scripts)
        • script for conversion (adapt paths)
        • #!/bin/bash
          # Creates directory with same name as original file 
          # plus ".HTML" and puts HTML with images into it
          # $1: Input ONE file (entire path or only mile name in cur dir)
          # $2: Output directory (no trailing slash)
          # $3: Output filename (e.g. index.html)
          # $4: XSLT file to use (without path; path is given below)
          # $5: max_heading_depth (outline depth limit between using
          #     headings and ULs in HTML output)
          if [ -z $5 ]; then
          echo "Using style sheet: $XSLT"
          echo "Creating output directory $OUT ..."
          mkdir -p "$OUT"
          N_IMGS=`grep -c "<sketch" "$1"`
          echo $N_IMGS sketches
          # run the first xslt for the html
          $PROC --output "$OUT"/"$OUTFILE" --param max_heading_depth $MHD "$XSLT" "$IN"
          # now run it for the images.
          $PROC --param dir \""$OUT"\"  --param doing_images 1 "$XSLT" "$IN" | $FLY
          #> /tmp/tmpfly
          #fly < /tmp/tmpfly
          cp "$OUT"/"$OUTFILE" "$OUT"/"$OUTFILE".orig
          tidy --show-warnings false --indent auto "$OUT"/"$OUTFILE".orig > "$OUT"/"$OUTFILE"
          rm "$OUT"/"$OUTFILE".orig 
          echo done.
        • one2htmlbeone.xslt file (converts to html with "beone" style sheet, BeOne is the company I work for)
        • <?xml version="1.0" encoding="UTF-8"?>
            <xsl:output encoding="UTF-8" method="html"/>
            <xsl:param name="max_heading_depth" select="2" />
            <xsl:param name="doing_images" select="0" />
            <xsl:param name="dir"/>
            <!-- easier to output a newline using this var -->
            <xsl:variable name="newline">
            <xsl:template match="document">
                <xsl:when test="$doing_images = 0">
                        <xsl:value-of select="@title" />
          <style type="text/css">
             body       { font-size: 12px; font-family: sans-serif; color: #000000; 
          background-color: #ffffff; padding: 2em; padding-top: 2em} 
             em         { color: #aaaaaa; } 
             li         { margin-top : 0.4em; }
             h1         { font-size: 130%; margin-top: 40px; padding-top: 5px; padding-bottom: 
          5px; background-color: #FEF1E5; color: #000000; border-bottom: solid 1px #F47900;}
             h2         { font-size: 130%; border-bottom: dotted 1px #F47900; color: #000000; 
          background-color: #ffffff; margin-top: 2em;  }
             div.foot   { color: #7F7F7F; text-align: right; }
             img.logo   { position: absolute; right: 3em; top: 2em; }
             a:link     { color: #F47900; font-weight: bold; text-decoration: none; }
             a:visited  { color: #7F7F7F; font-weight: bold; text-decoration: none; }
             a:hover    { color: #7F7F7F; font-weight: bold; text-decoration: none; }
             blockquote { font-size: 12px }
                      <xsl:apply-templates select="item|note|sketch|stroke"/>
                          <div class="foot">Daniel Hertrich, BeOne Muenchen GmbH</div>
                  <xsl:for-each select="//sketch">
                    <xsl:call-template name="sketch">
                      <xsl:with-param name="id" select="position()" />
            <xsl:template match="item">
              <xsl:param name="depth" select="1" />
              <!-- we need a choose element in case we have to output a ul tag -->
                <xsl:when test="$depth > $max_heading_depth">
                  <xsl:element name="li">
                    <xsl:value-of select="@text" />
                      <xsl:with-param name="depth" select="$depth + 1" />
                <xsl:when test="$depth = $max_heading_depth">
                  <xsl:element name="h{$depth}">
                    <xsl:value-of select="@text" />
                  <ul id="firstlevel">
                      <xsl:with-param name="depth" select="$depth + 1" />
                  <xsl:element name="h{$depth}">
                    <xsl:value-of select="@text" />
                    <xsl:with-param name="depth" select="$depth + 1" />
            <xsl:template match="note">
                <xsl:value-of select="./text()" />
            <xsl:template match="sketch">
                <xsl:attribute name="src">
                  <xsl:value-of select="concat('img',count(preceding::sketch)+1,'.png')" />
            <xsl:template match="stroke">
            <xsl:template name="sketch">
              <xsl:param name="id" />
                <xsl:when test="$doing_images = 0">
          size 640,480
          type png
              <xsl:value-of select="concat('name ',$dir,'/img',$id,'.png')" />
          fill   1,1,255,255,255
          <xsl:for-each select="./stroke">
            <xsl:call-template name="stroke" />
            <xsl:template name="stroke">
              <xsl:if test="$doing_images = 1">
              <xsl:text>opoly </xsl:text><xsl:value-of select="substring(./text(),3)" /><xsl:text>
        • one2ssi.xslt (generates only content, no HTML headers or styles, can be used for SSI inclusion into existing homepage structure)
        • <?xml version="1.0" encoding="UTF-8"?>
            <xsl:output encoding="UTF-8" method="html"/>
            <xsl:param name="max_heading_depth" select="2" />
            <xsl:param name="doing_images" select="0" />
            <xsl:param name="dir"/>
            <!-- easier to output a newline using this var -->
            <xsl:variable name="newline">
            <xsl:template match="document">
                <xsl:when test="$doing_images = 0">
                      <xsl:apply-templates select="item|note|sketch|stroke"/>
                  <xsl:for-each select="//sketch">
                    <xsl:call-template name="sketch">
                      <xsl:with-param name="id" select="position()" />
            <xsl:template match="item">
              <xsl:param name="depth" select="1" />
              <!-- we need a choose element in case we have to output a ul tag -->
                <xsl:when test="$depth > $max_heading_depth">
                  <xsl:element name="li">
                    <xsl:value-of select="@text" />
                      <xsl:with-param name="depth" select="$depth + 1" />
                <xsl:when test="$depth = $max_heading_depth">
                  <xsl:element name="h{$depth}">
                    <xsl:value-of select="@text" />
                  <ul id="firstlevel">
                      <xsl:with-param name="depth" select="$depth + 1" />
                  <xsl:element name="h{$depth}">
                    <xsl:value-of select="@text" />
                    <xsl:with-param name="depth" select="$depth + 1" />
            <xsl:template match="note">
                <xsl:value-of select="./text()" />
            <xsl:template match="sketch">
                <xsl:attribute name="src">
                  <xsl:value-of select="concat('img',count(preceding::sketch)+1,'.png')" />
            <xsl:template match="stroke">
            <xsl:template name="sketch">
              <xsl:param name="id" />
                <xsl:when test="$doing_images = 0">
          size 640,480
          type png
              <xsl:value-of select="concat('name ',$dir,'/img',$id,'.png')" />
          fill   1,1,255,255,255
          <xsl:for-each select="./stroke">
            <xsl:call-template name="stroke" />
            <xsl:template name="stroke">
              <xsl:if test="$doing_images = 1">
              <xsl:text>opoly </xsl:text><xsl:value-of select="substring(./text(),3)" /><xsl:text>
        • You can create as many different XSLTs you need, just name them "one2XY.xslt"
          • X being the format string used when calling
          • Y being the style string used when calling
        • Usage:
          • $1 $2 $3 $4 $5
            • $1: Input .one file
            • $2: Output path for HTML and PNGs (is created if not existent)
            • $3: Output file name (e.g. index.html or content.ssi)
            • $4: XSLT stylesheet to use (without path, path is set in, assuming you collect all XSLTs in one place)
            • $5: optional: Max Heading Depth
              • Specified the outline depth into which headings should be used in HTML output (deeper items will be list items)
              • Default: 2
          • Of course, can also be called from a Send-To entry of Tree!Explorer QT plus. Set this as the command (example):
            • /path/to/bins/ "%1" "%1.Export" index.html one2htmlbeone.xslt
        • Even sketches are converted into inline images (using fly)
          • This web page has been created using one2html!
  • Alternative outliners:
    • IQNotes: feature-rich, PIM replacement, but not as convenient to use, IMHO
    • VYM (View Your Mind): I could not make it compile on the Zaurus yet
    • FreeNote: Only for sketches and little text not well structured


  • Opera 7.25 IPK package works very smoothly
    • ]ou may install also opera7-en-helper_0.0.2b_arm.ipk
      • Lets you set default font size in Opera etc.
        • (doesn't work here!)
      • Needs qshdlg_0.6.2-1_arm.ipk
  • Built-in Netfront browser is not so bad either
  • links-ssl_0.3_arm.ipk
    • ln -s /usr/lib/ /usr/lib/
    • ln -s /usr/lib/ /usr/lib/
    • ldconfig

Kismet for finding open WLANs

  • Derived from article
    • Installing libstdc++... is not necessary, as it is already there
    • installed libpcap0_0.7.2_arm.ipk
    • Installed kismet_3.0.1c-20031228_arm.ipk
    • Installed kismet-qt_2.0.0_arm.ipk
    • Icon of Kismet: Set root privileges and delete magnify screen flag
    • edit kismet.conf:
      • for SL-C3100: use hostap drivers:
        • source=prism2_hostap,wlan0,hostap
    • Create a network connection under Setting / Network:
      • SSID: any
      • Mode: Ad-Hoc
      • IP:
      • Subnet Mask:
      • Gateway:
      • DNS:
    • Connec to to this service
    • Start Kismet GUI
    • Choose "Sharp-Prism2" in config
  • Notes
    • kismet.conf is located here on SL-C3000: /hdd2/usr/local/etc/kismet.conf
      • on C31000 as denoted in above URL: /home/root/usr/local/etc/kismet.conf
    • Do not install newer (2005...) package of kismet.
  • Slapass with opie-sh for associating to found networks (not tested yet)
    • Install instructions for Sharp ROM on

Instant Messaging

  • qpe-gaim with all its libraries for ICQ, MSN, AOL etc.
    • don't install zlib and libpng
    • Install new zlib from source (1.2.3)
    • Install supplied and do the steps in libpngfix.txt
    • If the icons disappear...
      • 1. Check if the libpng fix works (from the GAIM Sourceforge page)
      • 2. if not, and if you have X/QT installed:
        • Move the file /opt/QtPalmtop/lib/ away. It may be needed by X/QT, so this is not the ultimate fix. but as long as I have no better idea this is my way of making Gaim work again
      • 3. If 1. and 2. are not successful, I have no clue, sorry.
  • centericq
    • download sources from
    • ./configure --without-msn
    • ln -s /mnt/card/devel/include/curses.h /mnt/card/devel/include/ncurses.h
      • (ncurses.h is needed, which is in most cases only a link to curses.h. We have a curses.h, so we create the link)
    • make


  • openssh-client_3.6.1p1_arm.ipk
  • openssh-addon_3.6.1p1_arm.ipk
  • and, if you need it: openssh-server_3.6.1p1_arm.ipk
  • Exchanging SSH keys so password is not required for logging onto another (Linux) PC:
    • generate private and public key on Zaurus
      • ssh-keygen -t dsa
        • simply press enter when asked for a passphrase, do not enter a passphrase!
      • result: file ~/.ssh/id_dsa and ~/.ssh/
    • put public key of Zaurus into list of authorized keys of PC
      • copy file to other PC
      • on other PC: cat >> ~/.ssh/authorized_keys2
        • and maybe, if required: ln -s ~/.ssh/authorized_keys2 ~/.ssh/authorized_keys
    • now it should be possible to log onto PC using ssh without a password
      • Try it on the Zaurus: ssh -l USER PC-IPaddress
        • replace USER with user in whose account you installed the public key
        • replace PC-IPaddress with the IP address of the PC

File Manager

  • Tree!Explorer QT plus (Full version, commercial)
    • Very convenient to use
    • With "Send-To" feature, configurable
      • can "send to" applications, scripts or directories
    • Calls applications by doubleclicking files via their MIME types or send-to menu
    • Comes with good image viewer and good text editor
  • Midnight Commander (mc-mp_4.1.40-pre8_arm.ipk)
    • console-based
    • F keys via Alt-number (Alt is right Japanese key if keyhelper is configured as descripbed above)
    • Problems with "graphic" characters on qKonsole

Text editor notes

  • Recommended editors:
    • Simpleedit 1.0.3: Very nice graphical editor!
      • Supports folding (valuable for programming!)
      • nice Interface, relatively fast
      • Download from
      • OESF topic 18509
      • Has some minor bugs
    • Tree!Text QT from Tree!Exporer QT Plus
      • part of commercial application Tree!Explorer QT Plus
      • Nice GUI, good for fast and simple file editing from TreeExplorer
      • supports no European non-UTF-8 charsets!
        • e.g. ISO-8859-1 not supported
    • Pico (pico_4.63-r0_arm.ipk)
      • console application
      • small, nice, simple
      • easy to use
      • good for simple tasks like email composing etc.
    • Nano (nano-1.2.5_arm.ipk)
      • Pico clone
      • Has some more important features than Pico!
      • IPK causes problems, mising shared libraries when loading a file.
        • So compiling on my own version 1.2.5, works well
  • Tried, but not my favorites:
    • vim (vim-base_6.1.392kaoriya-1_arm.ipk)
      • console based
      • very powerful
      • not for everyone!
      • some problems with keyboard mapping, how to solve them?
    • tkcEditor (tkceditor-c700_2.0-030722_arm.ipk)
      • GUI application
      • commercial application
      • with syntax highlighting
    • Emacs (emacs21-bin_21.2.1-20021126b_arm.ipk)
      • console application
      • very powerful (comparable to vim)
    • Joe (joe_2.9.8pre1_arm.ipk)

PDF viewing

  • qpdf2 (2.2.1), uncheck magnified screen!
  • if clicking on PDFs launches opera instead of qpdf:
    • Remove "application/pdf;" from the MimeType line in /opt/QtPalmtop/apps/Network/opera.desktop

JAVA packages (alternatives):

  • Jeode (evm): java_slc3000_arm.ipk
    • seems to be the most compatible and useful JAVA package.
  • j2me-zaurus_1.1.8_arm.ipk
    • from Meanie's site
    • Not entirely compatible with most downloadable JAVA programs for Zaurus
  • J2SE from Blackdown
    • see also
    • installing the IPK:
      • tar -xzvf ..ipk
      • tar -xzvf data.tar.gz
      • mv j2re1.3.1 /usr/local/
      • ln -s /usr/local/j2re1.3.1/bin/java /usr/bin/java
      • ln -s /usr/local/j2re1.3.1/bin/armv4l /usr/local/j2re1.3.1/bin/armv5tel
      • ln -s /usr/local/j2re1.3.1/lib/armv4l /usr/local/j2re1.3.1/lib/armv5tel
      • ln -s /usr/lib/ /usr/lib/
      • chmod a+x /usr/local/j2re1.3.1/bin/java

Text processing

  • TextMaker for Zaurus
    • Runs directly in QTopia and is very powerful
  • Abiword or OpenOffice under X/QT (pdaXQTrom by Meanie)
    • relatively slow, but Abiword is quite well usable


  • built-in Hancom sheet is very limited
  • opie-sheet_1.0.1_arm.ipk VERY SLOW!
  • Openoffice under X/QT (pdaXQTrom by Meanie)
    • slow
  • Gnumeric under X/QT (pdaXQTrom by Meanie)
    • quite well usable

Video playback

  • mplayer-bvdd-iwmmxt_1.1.5-1_arm.ipk installed
  • kino2_0.4.3_arm.ipk installed
  • bvdd drivers v0.4.0-1 installed
  • sudo 0.1 (already contained with Cacko ROM)
  • libffmpeg_0.4.6_20030304_arm.ipk
  • zaurus-vlc_0.5.3_arm.ipk
  • librt_2.1.3_arm.ipk
  • After installing all that, built-in Movie player works better than before (probably due to some installed codecs)
  • Video encoding on Linux PC with mencoder
    • Every mplayer-playable video can be encoded for good playback on Zaurus with this script:
    • encoder "$1" -oac mp3lame -lameopts cbr:br=128:mode=0 -vf pp=lb,scale=320 -ovc lavc \
      -lavcopts vcodec=mpeg4:vhq:v4mv:vbitrate=512:vpass=1 -ofps 30000/1001 -oac copy -sws 2 -o output.avi
      mencoder "$1" -oac mp3lame -lameopts cbr:br=128:mode=0 -vf pp=lb,scale=320 -ovc lavc \
      -lavcopts vcodec=mpeg4:vhq:v4mv:vbitrate=512:vpass=2 -ofps 30000/1001 -oac copy -sws 2 -o output.avi
      mv output.avi zaurus_"$1".avi

Backup solution for user data, programs and configuration

  • Goal: Easy maintenance while always having a full and easy to recover backup
    • goal not reached yet:
      • method too complicated and time consuming
      • but full backup is more important than convenience!
  • Method:
    • 0. Try to save all user data on an SD card, not on Microdrive!
      • my own Microdrive is ONLY used for data which is unimportant (MP3, large reference documents etc.)
      • I have ALL data I work on stored on an SD card!
    • 1. Make backup of program / configuration using built-in backup/restore
      • make backup to the SD card
      • this kind of backup is always recommended before and after installing new applications or modifying program configs
    • 2. Make full backup of the SD card
      • Alternative a: leaving SD in Zaurus, backing up to USB Hard drive using a shell script
        • That way you can also backup the internal HDD if necessary
        • Shell script example ""
        • #!/bin/bash
          # execute as root!
          if [ $UID -gt 0 ]; then
                  echo NEED ROOT PERMISSIONS!
                  exit 1
          # see above in this document about!
          sudo -u zaurus off  
          echo Deleting oldest backup...
          rm -rf /mnt/usbstorage/backup_zaurus_old
          echo Shifting backup dirs....
          mv /mnt/usbstorage/backup_zaurus /mnt/usbstorage/backup_zaurus_old
          mkdir /mnt/usbstorage/backup_zaurus 
          echo Backup....
          tar -cvf - /mnt/card/ | \
          gzip > /mnt/usbstorage/backup_zaurus/mnt_card.tgz \
          && \
          tar -cvf - /home/ | \
          gzip > /mnt/usbstorage/backup_zaurus/home.tgz \
          && \
          echo Copying hdd3 contents... please wait! && \
          cp -a /hdd3 /mnt/usbstorage/backup_zaurus/
          sudo -u zaurus on
      • Alternative b: Putting SD card into PC card reader and make backup of card there
        • No way to back up internal HDD
  • Considerations:
    • SD card backup should be done frequently, as there are the important and often modified files!
    • built-in backup backs up /home (and /hdd2 on C3000) directory
      • i.e. installed apps and configs
      • Not needed every day, only when applying changes to system configuration / installing apps
  • Restoring from factory default Zaurus in emergency
    • 1. Flash Cacko ROM
    • 2. Use built-in backup / restore to restore from SD card
      • If necessary, restore SD card before using PC or another Zaurus

Homepage maintenance / directory synchronization

  • local copy of website on Zaurus
  • Option 1: sitecopy (for FTP access of ISP webspace for example)
    • download sitecopy sources from (v0.16.1)
    • ./configure && make
    • Put sitecopy binary into bin directory and link it to /usr/bin/sitecopy
    • mkdir -m 700 /mnt/card/homepage/.sitecopy
      • this MUST be on an ext2/3 or another Linux file system, no FAT, due to the required access rights
    • ln -s /mnt/card/homepage/.sitecopy /home/zaurus
    • /home/zaurus/.sitecopyrc (adapt to your needs)
    • site example
              username joesmith
              password thisiasecret
              local /mnt/card/homepage
              remote /homepages/myhomepage
              exclude *.bak
    • chmod 600 ~/.sitecopyrc
      • because the file contains passwords in clear text
    • Synchronize the first time (server "example" and local copy)
      • if remote and local are already in synch:
        • sitecopy --catchup example
      • if no local copy exists yet:
        • sitecopy --fetch example
        • sitecopy --synch example
      • if no remote copy exists yet:
        • sitecopy --init example
        • sitecopy --update example
        • sitecopy --catchup example
    • Synchronize regularly after each modification of the local copy
      • sitecopy --update eample
    • Synchronize regularly after each modification if the remote copy
      • sitecopy --synchronize example
    • sitecopy --help gives more advice.
  • Option 2: rsync (works only in one direction, so I discontinued usage of rsync)
    • rsync 2.6.2
    • SSH key exchange so that password is not needed for homepage sync:
      On client (Zaurus): 
      ssh-keygen -dsa
      cd ~/.ssh
      scp root@SERVER:~/.ssh (replace SERVER by IP or hostname)
      On server login as root and:
      cd ~/.ssh
      cat >> authorized_keys
    • script for rsync
    • first, for initial sync from server to Z:
      mkdir /mnt/card/homepage/   
      rsync -rv  This email address is being protected from spambots. You need JavaScript enabled to view it.:/srv/www/htdocs/ /mnt/card/homepage/ 
      then, for syncing
      rsync -rv /mnt/card/homepage/ This email address is being protected from spambots. You need JavaScript enabled to view it.:/srv/www/htdocs/
      ATTENTION: /mnt/card must not be vfat, but ext2...
  • Option 3: Unison (works bidirectionally and very conveniently, but not over FTP. I dropped it because sitecopy is simpler and fits my needs)
    • installed package unison_2.9.1-1_arm.ipk)
    • SSH key of Z onto server as described above for rsync
    • unison must be installed on the server, too
    • modify /home/zaurus/.unison/default.prf
    • Put two "root" lines into the file, as these:
      root=ssh://This email address is being protected from spambots. You need JavaScript enabled to view it.//srv/www/htdocs   
      (self-explanatory: one points to a dir on the zaurus, one to a dir on the server, these two dirs will be synchronized).
    • run "unison" once on the zaurus to do the initial synchronizing, unison will ask you to decide about changes in one or the other directory
    • then add line "batch=true" to the default.prf file, this will prevent unison from asking questions in the future
    • Now, after any change in one of the dirs, call "unison" on the Zaurus and the dirs will be synchronized.


  • glider 0.0.2 (keep the "magnified screen" setting!)
  • nibbles (runs quite slow, needs jeode)
  • Minesweeper (minesw_1.1_arm.ipk)
  • (S)NES emulation (OESF topic 14102)
    • install packages:
      • libSDL-mixer_1.2.6-zports-0_arm.ipk
      • libmad_0.15.0b-zports-0_arm.ipk
      • libSDL_1.2.6_zports_5_arm.ipk
      • snes9x_SDL-2_arm.ipk
      • zemufe_0.1.1-3ex_arm.ipk
      • znester_7.1-1_arm.ipk
    • typematic rate change as recommended by Cresho in OESF topic 14102 disturbes Cacko setup and is not necessary on Cacko, so don't do it
    • Modify /home/QtPalmtop/bin/
    • #!/bin/bash
      cd "$1"
      snes9x -win "$2"
      exit 0
      or if you want to replace the ok/enter key pause with L instead.  L becomes
      the pause and start and ok/enter is null so your game wont be interupted,
      use the bottom code.
      export S9XKEYS=27,100,99,115,120,97,122,108,32,103,106,117,110,121,98,105,109
      cd "$1"
      snes9x -win "$2"
      exit 0
    • mkdir ~/.znester and put znester.rc into that new directory
    • Uncheck "Display with magnified screen" for the zEmu icon in games tab
    • Start zEmuFE and doubleclick on ROM files to start games
  • C64 emulator
    • After successful installation of (S)NES
    • frodo_0.2_arm.ipk
    • frodogui_0.1_arm.ipk
    • in Frodogui, change settings to something according to PNG screenshots in documentation of frodogui
    • in Frodogui, set drive 8 to a D64 file you want to load
    • in Frodo, type LOAD"*",8,1 and then RUN to run the program.
  • LTris: Great Tetris clone
  • CircusLinux
    • needs libSDL 1.2.5


  • Portabase 1.9: works nicely
    • Migration from HP 200LX GDB format via (z)gdbdump 1.02
      • original source of gdbdump compiled on Zaurus
      • gdbdump -s GDBFILE > out.csv
      • and then CSV through DOS-->Latin1 filter
      • In Portabase, create a database with the same structure as the GDB, but with no data
      • The result of filtered zgdbdump output can be imported into the empty Portabase file but Portabase has problems with escaped doublequotes (\" within fields)
      • Solution: modified gdbdump (zgdbdump) which converts doublequotes in GDB into single quotes in CSV
        • This modified version can be requested by me (source or binary)
      • Script (embedded as a filter into Tree!ExplorerQT's SendTo menu)
      • #!/bin/bash
        # This script converts GDB files created on HP 200LX palmtops 
        # to CSV charset UTF-8 which can be imported into Portabase.
        # file.gdb is converted to file.gdb.csv and an additional
        # file nwmed file.gdb.struc is generated showing the 
        # structure of the database, so that a matching database
        # can be prepared in Portabase for later import of the CSV.
        # Needs iconv, sed, tr and zgdbdump (special version of gdbdump)
        if [ ! -f "$1" ]; then
                echo "Input file does not exist ($1)"
                exit 1
        zgdbdump -s $1 > tempfile
        iconv -c -s -f CP850 -t UTF-8 tempfile | tr -d '\015' | sed  -e 's/\\r\\n/ /g'  > tempfile1
        cat tempfile1 | sed -e '1D' > $1.csv
        cat tempfile1 | sed -e '3,$D' > $1.struc
        rm tempfile
        rm tempfile1
    • This is the one I will use.
    • Todo: Total automation of GDB -> Portabase conversion, using Portabase's XML format
  • kgrok_1.3.0_arm.ipk powerful, but optimized for 5500. Bad screen layout
  • SQLite: SQL-based library with command line interface
    • Installed sqlite3_3.2.2_arm.ipk
    • But found that is is not usable without programming a lot, so discarded it again

X/QT: pdaXQTrom by Meanie

  • Download cramfs images and put them anywhere on the Z (HDD, SD or CF)
    • Instructions:
    • Download:
  • Execute the installer script as root
  • adjust to Cacko ROM per Meanie's tip in OESF topic 16209
    • su
    • ln -sf /opt/QtPalmtop/lib/gtk-2.0 /usr/lib/gtk-2.0
    • gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders
  • Make it faster
    • touch /etc/X11/monolingual
  • Install automounter-c3000_0.4.8_arm.ipk so cramfs images are remounted on reboot

VoIP Telephony

  • KP/PI from the KDEPIM/PI package
  • with service (should also work with other services)
  • Follow intructions in documentation
  • Important if used behind a DSL/cable router:
    • Forward VoIP ports (see FAQ of VoIP providers)
    • Set Preferences / SIP Preferences / Socket / STUN Server / Media Min/Max Port to nonzero values, e.g. 1050 and 2000 and make sure that range is forwarded by the router as well
  • Headset: Use an ear phone, cut off left one and connect a headset microphone to the left line.

Bochs (DOS emulator)

  • downloaded bochs.tar.gz package by chyang (OESF topic 14684)
  • download bochs...tar.gz from and extract the "bios" directory
  • download a DOS boot disk image
  • here, all image and bios files go to /hdd3/Documents/emulation/bochs and /hdd3/Documents/emulation/bochs/bios
  • gtar -xzvf bochs.tar.gz onto an ext2 fs (links!)
  • ~/.bochsrc example
  • ###############################################################
    # bochsrc.txt file for DLX Linux disk image.
    # how much memory the emulated machine will have
    megs: 32
    # filename of ROM images
    romimage: file=/hdd3/Documents/emulation/bochs/bios/BIOS-bochs-latest,  address=0xf0000
    vgaromimage: file=/hdd3/Documents/emulation/bochs/bios/VGABIOS-lgpl-latest
    # what disk images will be used 
    floppya: 1_44=/hdd3/Documents/emulation/bochs/dos7.img,  status=inserted
    #floppyb: 1_44=floppyb.img, status=inserted
    # hard disk
    ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
    ata0-master: type=disk, path="/hdd3/Documents/emulation/bochs/hd10meg.img", cylinders=306, heads=4, spt=17
    #ata0-slave: type=cdrom, path="f:\win98.iso", status=inserted
    # choose the boot disk.
    boot: floppy
    # default config interface is textconfig.
    #config_interface: textconfig
    #config_interface: wx
    #display_library: x
    # other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga
    # where do we send log messages?
    log: bochsout.txt
    # disable the mouse, since DLX is text only
    mouse: enabled=0
    # enable key mapping, using US layout as default.
    # NOTE: In Bochs 1.4, keyboard mapping is only 100% implemented on X windows.
    # However, the key mapping tables are used in the paste function, so 
    # in the DLX Linux example I'm enabling keyboard_mapping so that paste 
    # will work.  Cut&Paste is currently implemented on win32 and X windows only.
    #keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/
    #keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/
    #keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/
    #keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/
  • cp opt/Qtopia/sharp/lib/ /usr/lib/
  • cd /usr/lib
  • mv
  • mv
  • ln -s
  • ln -s
  • mv /home/QtPalmtop/lib/ /home/QtPalmtop/lib/
  • ln -s /usr/lib/ /home/QtPalmtop/lib/
  • if I run ldconfig here, the new link is overwritten with another link to again! SOLUTION??
    • bochs will report undefined symbols then!
  • dd if=/dev/zero of=/hdd3/Documents/emulation/bochs/hd10meg.img bs=1024 count=10000
  • run bochs -q -f ~/.bochsrc

Dosbox (DOS emulator)

  • dosbox_0.6.3-2_arm.ipk installed
  • ln -s /home/QtPalmtop/lib/ /home/QtPalmtop/lib/
  • ldconfig
  • works, but INSTABLE, uninstalled!
  • Usage
    • On startup, press Cancel a few times to avoid flickering
    • Shift-Ctrl-Cancel to exit (don't enter "exit" - it may lock the Zaurus!)
    • in /usr/local/dosbox/dosbox.conf after [autoexec]
    • mount c /mnt/card/Documents/Dosbox_mount
      cd tetris
    • Problem: ":" not available via keyboard, so how to change drive??

Screensaver / Suspend

  • Replace the built-in boring clock screensaver by something more appealing
    • LUSScreenSaver_1.4.5-1_arm.ipk installed
      • attention: QTopia may restart automatically after installation of this package
    • LUSScreenSaverUtil_1.3.4-1_arm.ipk installed
    • LUSSSFish_1.0.0-1_arm.ipk installed
    • LUSSSUniverse_1.0.0-1_arm.ipk installed
    • New Screensaver Util icon in Settings tab
  • Screensaver can be disabled entirely by editing ~/Settings/qpe.conf:
    • [Screensaver] / Interval_AC_ScreenSaver = 0
    • value is reset each time the "light and energy" program is used, so 0 has to be re-set manually after using ight and energy program!
  • Screensaver and suspend can be disabled temporarily with qcop
    • qcop QPE/System "setScreenSaverIntervals(int,int,int)" 0 0 0

Mobile phone connection for SMS using zsms

  • zsms_1_0_arm.ipk (contains older versions of zsmstools, I use modified ones, see below. I have not installed this IPK, my scripts will not work with this version!)
  • mkdir /mnt/card/Documents/Mail/sms
    • here sent and received SMSs will be stored
    • It's inside mutt's mail directlry because the SMS files will have mbox format so they can be browsed using mutt
  • mkdir /mnt/card/Documents/Mail/sms/log
    • This is for zsms log files
  • smstools compilation
    • mv /usr/lib/ /usr/lib/
    • create ld script /usr/lib/ with the line:
      • GROUP ( /lib/ /mnt/card/devel/lib/libc_nonshared.a )
    • ldconfig
    • modify Makefile:
      • GCC=gcc
      • LD=ld
    • now smstools sources are compilable
    • done modifications to getsms sources
      • let getsms..c really delete downloaded SMSs (function deletesms())
      • let getsms create an mbox-compliant file for mutt
    • sources / binaries can be requested by email from me
  • script smssend
    • #!/bin/bash
      #$1: dest. number, e.g. 491771234567
      #$2: 'text of SMS'
      echo From smssend Thu Nov 11 11:11:11 2005 >> "$WORKDIR"/sent 
      echo Date: `date`  >> "$WORKDIR"/sent 
      echo To: "$1"  >> "$WORKDIR"/sent 
      echo Subject: To: "$1" -- "$2" >> "$WORKDIR"/sent
      echo  >> "$WORKDIR"/sent 
      echo $2 >> "$WORKDIR"/sent
      echo  >> "$WORKDIR"/sent 
      irattach /dev/ttyS1 -s
      putsms -d/dev/ircomm -b115200 -mnew -s"$SMSC" -l"$WORKDIR"/log/putsmslog -H "$1" "$2" 
      echo Returncode of putsms: $? 
      killall irattach
    • Works with Nokia 6310, maybe adapt PDU mode and baud rate
    • Adapt SMSC and WORKDIR to your needs
  • script smsget
    • #!/bin/bash
      irattach /dev/ttyS1 -s
      echo Retrieving from SM...
      getsms -c  -d/dev/ircomm -b115200 -mnew -rSM -l"$WORKDIR"/log/getsmslog_sm -H  > "$WORKDIR"/received_sm
      echo Returncode of getsms: $? 
      echo Retrieving from ME...
      getsms -c  -d/dev/ircomm -b115200 -mnew -rME -l"$WORKDIR"/log/getsmslog_me -H  > "$WORKDIR"/received_me
      echo Returncode of getsms: $? 
      cat "$WORKDIR"/received_me >> "$WORKDIR"/received
      cat "$WORKDIR"/received_sm >> "$WORKDIR"/received
      mv "$WORKDIR"/received_* "$WORKDIR"/log/
      killall irattach
    • Works with Nokia 6310, maybe adapt PDU mode and baud rate
    • Adapt WORKDIR to your needs
  • usage:
    • smssend <number> <text>
      • <number> without the plus, e.g. 491721234567
      • text in single quotes, as 'This is an SMS!'
      • with double quotes, the exclamation mark cannot be used inside the text!

Mobile phone connections in general using kammu

  • using kammu, SMS, phonebook etc. can be used from Zaurus
  • Install the kmobilephoneaccess package from KDEPIM/PI, which contains kammu
  • .gammurc
    • For Siemens SK65 (and S65 etc.)
    • [gammu]
      connection = at19200
      port = /dev/ircomm
    • For Nokia 6310
    • [gammu]
      connection = irda
      port = /dev/ircomm
  • Call "irattach /dev/ttyS1" before you do anything over IrDA
  • Send SMS
    • echo "SMS text goes here... can be longer than 160chars, because kammu splits automatically." | kammu --sendsms TEXT "+4912345567" -autolen 1000
  • Send phonebook
    • simply use the "Export to moblie phone" feature of KA/PI
    • works only for the Nokia phone...

Shoutcast Player / Recorder

  • There is now an IPK package available for ShoutCAST Player and Recorder:
    • "hmc-shoutcast" on
  • see OESF.ORG forum topic 16114 for basics
  • mplayer must be installed (s.a.)
  • install ruby_1.8.0-1_arm.ipk
  • install ruby-qte_0.5.2_arm.ipk
  • install hmc-shoutcast_h1.0en_arm.ipk
    • from


  • via a2ps, lprng
  • e.g. for mutt, maybe others?

VNC Server for remote operation

  • Download from
  • Install the IPK
  • In Settings, find the VNC settings program, adjust settings
    • On OK, a windows reports that fbvnc server is started, but it does not work yet
  • On console start the server with the command: fbvncserver
  • On PC, in tightvnc enter address 192.168.x.y::5900
  • Readonly-access seems to work, but every attempt to input things fail, up to crashes of QTopia or at least QConsole.

LaTeX, PDFTeX (experimental, unfinished)

  • Ressources:
    • forum topic 3854
      • download files from here
      • including MiniIDE (follow link)
  • Installation
    • Installing basic system
      • Install on an ext2 file system! I installed on SD card:
      • mkdir /mnt/card/tex && cd /mnt/card/tex
      • tar xzvf bin.tar.gz
      • tar xzvf lib.tar.gz
      • tar xzvf texmf.tar.gz
      • tar xzvf texmf_cnf.tar.gz
      • chmod a+x bin/*
      • ln -s /mnt/card/tex/bin/tex /mnt/card/tex/bin/latex
      • su
      • ln -s /mnt/card/tex/lib/ /usr/lib/
      • ln -s /mnt/card/tex/lib/ /usr/lib/
      • Check if libpng is installed (ldconfig -p | grep libpng). If no:
        • ln -s /mnt/card/tex/lib/ /usr/lib/
      • ldconfig
      • in ~/.bash_profile add the line: export PATH=$PATH:/mnt/card/tex/bin
      • in texmf.cnf set TEXMFMAIN = /mnt/card/tex/texmf
    • Installing additional fonts
      • important for installing the german style (below)
      • from a PC tex system, do a tar czvf fonts.tgz fonts (after changing into the directory which holds the tex fonts subdirectory)
      • on Zaurus:
        • mv texmf/fonts texmf/fonts.ORIG
        • cd texmf
        • tar xzvf fonts.tgz
    • Installation of "german" style
      • download files from
      • copy files into /mnt/card/tex/texmf/tex/latex/german/
      • cd /mnt/card/tex/texmf/tex/latex/german/
      • mv texmf/tex/latex/german/hyphxmpl.cfg texmf/tex/latex/german/hyphen.cfg
      • download files from and ...deyhphn.tex and copy them into the german directory
      • in hyphen.cfg change "\input hyphen" to "\input ushyph1"
      • latex -ini latex.ltx
    • Installation of psnfss package (times fonts, math symbols etc.)
      • download unzip it somewhere (e.g. /path/to/psnfsspackage)
      • cd /mnt/card/tex/texmf
      • unzip /path/to/psnfsspackage/
      • unzip /path/to/psnfsspackage/
      • cd /path/to/psnfsspackage
      • latex psfonts.ins
      • cp *.sty /mnt/card/tex/texmf/tex/latex/psnfss/
      • cp /hdd3/Documents/Install_Files/Productivity/latex/psnfss/psnfss/8r.enc /mnt/card/tex/texmf/tex/latex/psnfss/
    • Installation of "dinbrief" class
      • download
      • unzip it
      • extract files as described in readme
      • copy dinbrief.cls and dinbrief.sty (or all files) to /mnt/card/tex/texmf/tex/latex/dinbrief
    • /mnt/card/tex/bin/makepdf script
    • #!/bin/bash
      latex "$1".tex && dvipdfm "$1".dvi
    • --------- new approach --------
    • delete /mnt/card/tex/texmf
    • copy entire /usr/share/texmf tree minus docs and obviously unneeded stuff to /mnt/card/tex/texmf
    • reconfigure /mnt/card/tex/texmf/web2c/texmf.cnf
      • TEXMFMAIN = /mnt/card/tex/texmf
      • TEXMFLOCAL = /mnt/card/tex/texmf
    • latex -ini latex.ltx
    • mv latex.fmt /mnt/card/tex/texmf/web2c/
    • Works, but ghostscript is still missing!
  • Usage


  • File system checks
    • From time to time, check all file systems. Especially after system crashes.
    • A good way to make fsckecks convenient is to create a script on the SD card (/mnt/card/
    • fsck.ext3 -c -f -v /dev/hda1
      fsck.ext3 -c -f -v /dev/hda2
      fsck.vfat -f -r -t -v -w /dev/hda3
      fsck.minix -r -v -f /dev/ram1
    • Reboot into emergency Linux
    • Remove battery
      Hold D and B key while inserting battery, closing cover and switching battery switch to ON position
      --> Zaurus boots into emergency linux.
      Log in as root / no password
    • login as root (no password)
      • the SD card will be mounted as /mnt/card
    • start the script /mnt/card/
    • unmount SD card (umount /dev/mmcda1)
    • fsck.ext2 -c -f -v /dev/mmcda1 (use fsck.vfat -f -r -t -v -w if your card has VFAT FS!)
    • to check FSs in flash (JFFS)?

Still looking for / Todo

  • Mindmapping program

Emergency tips

  • See
    to understand what is happening
  • Never do a NAND ERASE from the service menu! NAND contains the emergency bootloader!
    • Only possible with NAND restore using the D+M boot procedure
  • Never use the built-in fdisk (in emergency linux or in stock Sharo ROMs)
  • Possible Boot modes in emergency cases:
    • Service Menu (D+M boot):
      • Battery switch to "unlocked", wait some seconds, connect AC adapter, Hold keys D and M, switch battery swtich to "locked".
      • Servcie Menu (in English) is shown and allows:
        • NAND backup / restore
        • HDD backup / resotre (requires 4GB+ flash card, no compression!)
      • To reboot normally, press reset
    • Console (D+B boot):
      • Battery switch to "unlocked", take out battery, wait some seconds, Hold D and B keys, reinsert battery, battery switch to "locked", if necessary switch on using power button, then release D and B keys
      • Sharp logo, then login prompt. Log in as root.
      • Good for maintenace, file system repairs and /etc config file repairs which prevent clean booting.
      • /etc is found on /dev/mtdblock3
    • Maintenance (Flash) menu (OK +on):
      • Remove battery, wait, reinsert battery, battery switch to "Locked", connect AC adapter, Hold OK, press OnOff button.
      • Japanese menu appears (menu structure follows as a tree structure:)
        • "Please select the item you wish to run. Move the focus with the cursor key and confirm selection with the OK key.
          You can also select the number keys.
          If you do not wish to run anything, please select the 1. Cancel key.
        • 1. Cancel
        • 2. perform Fsck (file system check) / Meanies interpretation: "data check"
          • 1.
          • 2. run fsck
        • 3. Reset/Erase all (restore factory defaults)
          • 1. Normal
          • 2. Enhanced (checks hard disk, needs 1.5 hours!)
          • 3. back
        • 4. Flash/update
          • "System update will be performed.
            Depending on the contents of the pdate the internal data may be erased.
            Please back up your data in advance.
            Execute Update?
            [YES]     [No]"
          • 1. CF
          • 2. SD
          • 3. Back
  • If normal booting is not possible aymore, e.g. due to modifying something in /etc
    • Use D+B boot
    • The normal /etc directory is fond on /dev/mtdblock3 in the emergency linux
  • /hdd3 screwed up
    • Enter the Flash menu
      • Selection 2 in the second menu overwrites hdd3 with /dev/zero (LONG process)
    • or reinstall Cacko and choose "reformat user area" (restores the entire hard drive, not just /hdd3)
  • Zeroing an SL-C3000
    • see

Internet Ressources

  • Hardware-Modification
      • SL-C1000 with built-in wireless via USB
  • Older ressources
  • VGA etc.:
    Simple manual English:
    Software general etc.:
    http:/ (obsolete)
    Feeds: (Perl...) (nur X11)
    Cacko SL-C3000 ROM:
    Howto: Recover from crash / Setup
    General info / misc:
    Images of internals: (+some software) (C3000 dismantled)
    Opera Download:
    Game console emulators
    Java programming:
    Kismet etc:
    Picsel Browser:
    Bochs Setup:
    HNB etc.
    Doom etc.
    GAIM (ICQ...):
    Software by Silvio Iaccarino, Development package C/C++:
    Hardware hacking / microphone:
    GDB conversion:
    Bochs usw.
    C64 ROM Files fpr Frodo:
    200LX-keyboard for Zaurus driver (ek)
    Photo Storage homepage:
    Englslish version (unofficial):
    Navigation (Japanese):
    Music creation (Puredata):
    Big kernel with all modules
    Screenshots of various apps:
    Debian on C3000: (hints, problems)
    Feed KDE: (mirror of the previous?)
    Programming projects for QT
    MIDI / Zaurus:
    IPKGfind package search
    MPlayer for zaurus:
    Development qqutil, C++, QT:
    Main feed:
    additional packages, IDE:
    Email Postfix/Mutt-Konfiguration (German):
    Libopie und opie-*
    Holidays / Feiertage ICS-Download for KO/PI (German) (3 Euro, j?hrlich) (ohne Zeitangabe) (bis 2010)
    Kismet instructions
    Keyhelper instructions
    QPDF PDF viewing:
    (Follow sourceforge link)
    SDK DSL QEMU (Softwaredevelopment for Zaurus anywhere)
    X/QT jumbo package by Meanie
    Files at
    Hardware accessories and spare parts:
    Printing (LPR, a2ps, file):
    EXT2 driver for Windows
    OpieReader latest version

Do you like to support me?

Dear fellow Palmtopper!

If you like, you may reward me for the work I put into this website with a donation.


For a donation in US$:

For a donation in €:

Your donation, even if it's just a single USD, will help me to:

  • finance the server that hosts the site
  • justify time I spend with maintaining the site and do not spend with earning money otherwise (wife is watching! ;D)
  • just continue to be motivated :)

Since my company "hermocom" does not exist for many years anymore, I am now spending my spare time and private money for all of this. Thank you very much! 🙂

Yours truly,
Daniel Hertrich