HOWTO: Synchronizing vCard address books with Nokia 6300 via Bluetooth on Ubuntu Linux
Edit: After learning a bit of sed
magic, this is now a single
script.
This Works For Me™, and I hope it works with other phones and on other distributions as well, but no guarantees.
Here's how:
- Download synchronize-bluetooth.sh.
chmod u+x synchronize-bluetooth.sh
sudo apt-get install gnokii
-
Setup Gnokii (replace the phone name;
update: sorry, the link is dead):
echo -e "[global]\nmodel = 6510\nport = $(hcitool scan | grep 'phone name' | cut --fields=2)\nconnection = bluetooth" > ~/.gnokiirc
- Turn Bluetooth on on the computer and the phone.
- Pair the computer and phone. On Ubuntu, simply click the Bluetooth icon and follow the "Set up new device..." wizard.
-
If you want to copy your existing contacts to disk, you can run
./synchronize-bluetooth.sh -r > phone.vcf
-
To copy vCards to the phone,
overwriting the existing contacts, run
cat *.vcf | ./synchronize-bluetooth.sh -f
Note that synchronize-bluetooth.sh
works only with the
internal phone memory. Address book entries stored in the
SIM card, phone log or
elsewhere will not be read or written.
Some features of the script:
-
Works with plain
/bin/sh
, so it should work on any Linux / BSD distribution. - Has separate parameters to read, write and flush contacts.
synchronize-bluetooth.sh
#!/bin/sh
#
# NAME
# synchronize-bluetooth.sh - Synchronize contacts with Bluetooth device.
#
# SYNOPSIS
# synchronize-bluetooth.sh [options]
#
# OPTIONS
# -f,--flush Flush entries on the phone before synchronization
# -r,--read Read phonebook entries (no synchronization)
#
# EXAMPLES
# ./synchronize-bluetooth.sh -r
# Read phone address book entries.
#
# cat *.vcf | ./synchronize-bluetooth.sh -fv
# Remove all phone address book entries and write new ones.
#
# DESCRIPTION
# Warning: Overwrites the existing entries on the phone if you give it any
# input.
#
# Some limitations:
# - Gnokii (or the phone) doesn't understand N, NICKNAME, ORG and URL
# parameters.
# - Conflicts have to be resolved manually.
# - Getting a "Data format is not valid" error for unknown reasons.
# - Needs conv.pl so long as Gnokii / phone doesn't understand the full vCard
# spec.
#
# Tested on Nokia 6300 under Ubuntu (7.10-9.10). Instructions:
# <https://paperless.blog/howto-copying-vcard-address-books-to-nokia-6300-via-bluetooth-on-ubuntu-linux>
#
# BUGS
# 1: Not yet tested on other phones or operating systems.
# 2: No automated comparison of computer and phone entries.
# 3: Should use safe temporary directory creation - See web pages.
# 4: Flushing doesn't always get rid of all address book entries.
#
# Email bugs to victor dot engmark at gmail dot com. Please include the
# output of running this script.
#
# COPYRIGHT AND LICENSE
# Copyright (C) 2008-2010 Victor Engmark
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
################################################################################
# Init
PATH='/usr/bin:/bin'
ifs_original="$IFS" # Reset when done
cmdname=$(basename $0)
directory=$(dirname $0)
# Exit codes from /usr/include/sysexits.h, as recommended by
# http://www.faqs.org/docs/abs/HTML/exitcodes.html
EX_USAGE=64
# Output error message with optional error code
error()
{
test -t 1 && {
tput setf 4
echo "$1" >&2
tput setf 7
} || echo "$1" >&2
if [ -z "$2" ]
then
exit $EX_UNKNOWN
else
exit $2
fi
}
usage()
{
# Print documentation until the first empty line
while read line
do
if [ ! "$line" ]
then
exit $EX_USAGE
fi
echo "$line"
done < $0
}
# Process parameters
params=$(getopt -o fr -l flush,read --name $cmdname -- "$@")
if [ $? -ne 0 ]
then
usage
fi
eval set -- "$params"
while true
do
case $1 in
-f|--flush)
flush=1
shift
;;
-r|--read)
read=1
shift
;;
--) shift
break
;;
*)
usage
;;
esac
done
if [ $read ]
then
gnokii --getphonebook ME 1 end --vcard \
|| error 'Failed to get phonebook.'
exit
fi
if [ $flush ]
then
gnokii --deletephonebook ME 1 end \
|| error 'Could not flush phone entries.'
fi
sleep 1
# Is there anything on stdin?
if [ -t 0 ]
then
exit
fi
sed -n '1h;1!H;${;g;s/\r\n //g;p}' <&0 | \
sed -E s/^ADR\;.*?\(home\|work\).*?:/ADR\;TYPE=\\1:/i\;s/^EMAIL\;.*?\(INTERNET\).*?:/EMAIL\;TYPE=\\1:/i\;s/^TEL\;.*?\(CELL\|FAX\|HOME\|WORK\).*?:/TEL\;TYPE=\\1:/i | \
gnokii --writephonebook --overwrite --memory-type ME --vcard
err_code=$?
if [ $err_code -eq 20 ]
then
echo 'Data format error, eh? Dunno what to do about that for now.'
elif [ $err_code -ne 0 ]
then
error 'Could not write to phone.' $err_code
fi
If you have problems sending the vCards to your phone, you may want to validate them first.
No webmentions were found.