Vintage Palmtops Tips & Tricks


Psion, Linux PC and a cable


I remember that I promised to write something about connecting Psion palmtop (either Series 3 or Series 5) to a Linux-based PC without using CF card. Just a PC-Link cable.

The great news is that many Linux distributions... already have everything we need. Yes. If you own Ubuntu or other debianoid, simply install plptools (sudo apt-get install plptools). The same for RedHat; I don't know about other distros.

Now the bad part. Since Ubuntu 11.04 (?) the "core" feature of plptools, called plpfuse, has been disabled. I read that it was because there had been some problems with it. Generally, it was a daemon mounting Psion's filesystems as a normal drive. I tried it in Ubuntu 10.04, but it really didn't work well, so no. We'll do it the other way.

There are two programs included in plptools (not only, but we'll focus on these): ncpd and plpftp. The former is a daemon that establishes connection between Psion and the PC, and the latter... as the name says :)

That's how I do it:

1. I connect the Psion with the PC using PC-Link cable.

2. From Psion's main menu I choose Special > Communications and set it to "Link cable" at 57600 baud. (Or whatever the maximum is; for Siena it would be 19200.)

3. I open a terminal window and type:

sudo ncpd -s/dev/ttyUSB0 -b57600 -d

for I have the cable plugged in to the USB port using an adaptor. In case the above code doesn't work, execute dmesg | tail and try to find out what the name of the device should be. Also remember to check the baud rate entered (the -b parameter).
If everything went alright, the daemon should start running without any message.

4. I open a second terminal window, change the directory to where my files for exchange are and launch plpftp:


Plpftp complains about an error from OwnerInfo, but that doesn't matter. Commands are similar to those in every command line-driven ftp client:

cd DIR - changes the directory on Psion's drive
dir - lists the contents of the current directory (Psion)
lcd DIR - changes the directory on the PC
mkdir DIR - creates a directory on Psion's drive, in the current location
put FILE - sends a file to Psion
get FILE - you guess it
mput, mget - allow to use wildcards (*) in file names

Notice: file names on Psion's drives are case-insensitive. On the PC they are not.

And that's basically all you need to send and receive files between Psion and a PC. For more commands type help while in plpftp.

5. After a successful session I quit plpftp (bye) and shut down ncpd using Ctrl-C.


Happy vintage computing in the new year! :)

[Edit 2013/02/06]:

mii3 sent a useful shell script to synchronize the Psion. I guess it's taken from this forum post, where you can also find the required usbpsion script.


# Requires:
# plptools_0.18-1_i386.deb
# for i386

if [ "$( dpkg -l | grep plptools )" = "" ] ; then
echo “Requires plptools”

if [ "$1" = "--help" ] ; then
echo “If you would like to sync from/to psion”
echo “irdabelkin to get the irattach”
echo “then you do ircp-tray with x11″
echo “If you wanna with cable /dev/ttyUSB0 you shall do use this program with –sync”
echo “Place your file in the right directory, check –init”

if [ "$1" = "--rox" ] ; then
rox ~/Documents/mydevices/psion/pc2psion/

if [ "$1" = "--init" ] ; then
echo “Creating dirs”
mkdir -p ~/Documents/mydevices/psion/pc2psion/

if [ "$1" = "--sync" ] || [ "$1" = "" ] ; then

# check if usb serial is present
CHECKIFUSB0=` ls -1 /dev/ttyUSB0 `
if [ "$CHECKIFUSB0" = "" ] ; then
echo “** Warning: no USB cable for the psion detected. **”

CHECKSUDOUS=` sudo -l | grep usbpsion `
if [ "$CHECKSUDOUS" != "" ] ; then
# prepare
WOHOME=` whoami `
echo “** mount”
sudo usbpsion –mount $WOHOME

# Check mount
FILELISTC=` ls -1 /media/psion | grep “C” `
if [ "$FILELISTC" = "" ] ; then
echo “** Not Mounted **”
echo “** Mounted **”

echo “** LIST **”
ls /media/psion

# check few dirs
[ ! -d ~/Documents/mydevices/psion/pc2psion/ ] && mkdir -p ~/Documents/mydevices/psion/pc2psion
ls ~/Documents/mydevices/psion

# operation of sync if possible
CHECKIFMOUNT=`ls ‘/media/psion/C:’ | grep System`
if [ "$CHECKIFMOUNT" != "" ] ; then
echo ” > Status: mounted”
echo “** Sync”

# ******* PC => PSION
printf “33[32m%10s\n33[0m" "PC => Psion"
cd ~/Documents/mydevices/psion/
cp -av pc2psion/ '/media/psion/C:'
rm ~/Documents/mydevices/psion/pc2psion/*

# ******* PSION => PC
printf "33[32m%10s\n33[0m" "Psion => PC"
[ ! -d '/media/psion/C:/psion2pc/emails/' ] && mkdir -p ‘/media/psion/C:/psion2pc/emails/’
ls ‘/media/psion/C:/psion2pc/’
cp -r -v ‘/media/psion/C:/psion2pc/’ ~/Documents/mydevices/psion/

# ******* BACKUP
printf “33[32m%10s\n33[0m" "Backup: Psion => Psion (D:)"
[ ! -d '/media/psion/D:/backup/psion2pc/' ] && mkdir -p ‘/media/psion/D:/backup/psion2pc/’
ls ‘/media/psion/C:/psion2pc/’
cp -r -v ‘/media/psion/C:/psion2pc/’ ‘/media/psion/D:/backup/psion2pc/’

echo “** Umount”
sudo usbpsion –umount