Garmin forerunner and Ubuntu 14.04


This post is more than 5 years old. While math doesn't age, code and operating systems do. Please use the code/ideas with caution and expect some issues due to the age of the content. I am keeping these posts up for archival purposes because I still find them useful for reference, even when they are out of date!

This post is about getting running data off of a Garmin Forerunner 305 and uploaded to the Garmin Connect website. This post follows my previous post on the Garmin forerunner and Ubuntu 12.04 . Basically I will repeat these previous instructions, making sure that everything can still be done on Ubuntu 14.04-- the good news is that everything works on 14.04, so read on if you are interested.

  • First, we install some dependencies:
    $ sudo apt-get install garmin-forerunner-tools libxml2-utils
  • Second, we grab code from a git repository (do this in a directory where you want the code to reside-- I'll do this in ~/gitlocal/):
    $ cd ~/gitlocal/
    $ git clone

    Note: Edit: 2015, Aug 27

    The above git clone command uses ssh and will only work if you have a github account setup and have an ssh key on file. If you don't and would rather not bother setting that up you can

    1. Dowload a zip of the repository from the github page and unzip on your local computer-- look for the Download ZIP button on the right side of the page.
    2. Or, use git with https instead of ssh. This changes the git clone command to
      $ git clone

  • Finally we are ready to get data. I will give one approach -- start by making a directory where the data will be saved. For example,
    $ mkdir ~/GarminData
    $ cd ~/GarminData

Next, we connect the watch to the computer using the usb cable and obtain the data from the watch:

$ garmin_save_runs

If there is data on the watch, this command should produce *.gmn files that use the directory structure: Year/Month/*.gmn.

Finally, the *.gmn files need to be converted to *.tcx for upload to Garmin Connect. It is probably good to choose a consistent place to do this. For example, create a directory called tcxfiles:

$ mkdir ~/GarminData/tcxfiles
$ cd ~/GarminData/tcxfiles/

A command to do the conversions has to provide full paths for gmn2tcx and the input *.gmn file. So, try something like this if you've used the directory structure discussed above:

$ ~/gitlocal/garmin-dev/gmn2tcx ~/GarminData/DataFromWatch/Year/Month/file.gmn > run-name.tcx

Be sure to change ~/GarminData/DataFromWatch/Year/Month/file.gmn to something that makes sense. If all went well, the file run-name.tcx (change this filename to something sensible as well) will be in your local directory and ready to upload. Of course, in the short run you'll want to write a script to automate this process and avoid the typing.