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:

  1. Download synchronize-bluetooth.sh.
  2. chmod u+x synchronize-bluetooth.sh
  3. sudo apt-get install gnokii
  4. Setup Gnokii (replace the phone name): echo -e "[global]\nmodel = 6510\nport = $(hcitool scan | grep 'phone name' | cut --fields=2)\nconnection = bluetooth" > ~/.gnokiirc
  5. Turn Bluetooth on on the computer and the phone.
  6. 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 <http://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.