bionic (1) syncevolution.1.gz

Provided by: syncevolution_1.5.3-1ubuntu2_amd64 bug

NAME

       SyncEvolution - synchronize personal information management data

SYNOPSIS

       List and manipulate databases:
              syncevolution   --print-databases|--create-database|--remove-database   [<properties>]   [<config>
              <store>]

       Show information about configuration(s):
              syncevolution --print-servers|--print-configs|--print-peers

       Show information about a specific configuration:
              syncevolution --print-config [--quiet] [--] <config> [main|<store> ...]

       List sessions:
              syncevolution --print-sessions [--quiet] [--] <config>

       Show information about SyncEvolution:
              syncevolution --help|-h|--version

       Run a synchronization as configured:
              syncevolution <config> [<store> ...]

       Run a synchronization with properties changed just for this run:
              syncevolution --run <options for run> [--] <config> [<store> ...]

       Restore data from the automatic backups:
              syncevolution --restore <session directory> --before|--after [--dry-run] [--] <config> <store> ...

       Create, update or remove a configuration:
              syncevolution --configure <options> [--] <config> [<store> ...]

              syncevolution --remove|--migrate <options> [--] <config>

       List items:
              syncevolution --print-items [--] [<config> [<store>]]

       Export item(s):

              syncevolution [--delimiter <string>]  --export  <dir>|<file>|-  [--]  [<config>  [<store>  [<luid>
              ...]]]
                     --luids <luid> ...

       Add item(s):

              syncevolution [--delimiter <string>|none] --import <dir>|<file>|- [--] [<config> [<store>]]
                     --luids <luid> ...

       Update item(s):
              syncevolution --update <dir> [--] <config> <store>

              syncevolution [--delimiter <string>|none] --update <file>|- [--] <config> <store> <luid> ...
                     --luids <luid> ...

       Remove item(s):
              syncevolution --delete-items [--] <config> <store> (<luid> ... | '*')

DESCRIPTION

       This text explains the usage of the SyncEvolution command line.

       SyncEvolution  synchronizes  personal  information  management (PIM) data such as contacts, appointments,
       tasks and memos using the Synthesis sync engine, which provides support for  the  SyncML  synchronization
       protocol.

       SyncEvolution  synchronizes  with  SyncML  servers  over HTTP and with SyncML capable phones locally over
       Bluetooth (new in 1.0). Plugins provide access to the data which is  to  be  synchronized.  Binaries  are
       available  for  Linux  desktops  (synchronizing  data  in  GNOME Evolution, with KDE supported indirectly
       already and Akonadi support in development), for MeeGo (formerly Moblin) and for Maemo 5/Nokia N900.  The
       source code can be compiled for Unix-like systems and provides a framework to build custom SyncML clients
       or servers.

TERMINOLOGY

       peer   A peer is the entity that data is synchronized with. This can be another device (like a phone),  a
              server (like Google) or even the host itself (useful for synchronizing two different databases).

       host   The device or computer that SyncEvolution runs on.

       item   The  smallest  unit  of  synchronization. Examples of items include calendar events and individual
              contacts, memos, or tasks.

       database
              Each peer has one or more databases that get  synchronized  (Google  Calendar,  Google  Contacts).
              Conceptually a database is a set of items where each item is independent of the others.

       backend
              Access  to  databases is provided by SyncEvolution backends. It does not matter where that data is
              stored. Some backends provide access to data outside of  the  host  itself  (CalDAV  and  CardDAV,
              ActiveSync).

       datastore (or just store )
              Used  for  the  combination  of SyncEvolution backend and database settings.  A datastore provides
              read/write access to a database, which is a prerequisite for syncing the database.  The  datastore
              is independent of the peers that the database might be synchronized with.

              This  used  to  be  called  "data  source"  or just "source", which is a term still found in older
              documentation, some file paths and the source code of SyncEvolution.

       local/remote
              Synchronization always happens between a pair of databases and thus has two sides. One database or
              side  of  a sync is remote (the one of the peer), the other is local (SyncEvolution). For the sake
              of consistency (and lack of better terms), these terms are  used  even  if  the  peer  is  another
              instance of SyncEvolution and/or all data resides on the same storage.

       sync config
              A  sync  configuration  defines  how to talk with a peer: the protocol which is to be used, how to
              find the peer, credentials, etc.

              Sync configs can be used to initiate a sync (like contacting a SyncML  server)  or  to  handle  an
              incoming sync request (when acting as SyncML server which is contacted by the peer).

              If  the  peer  supports  SyncML  as  sync  protocol,  a  sync  only  uses  one  sync config on the
              SyncEvolution side. If the peer supports data access via some other protocols, then  SyncEvolution
              can  make  that  data available via SyncML and run a sync where SyncML is used internally.  Such a
              sync involves two sync configs, see originating config and target config.

              A sync config can use all datastores defined in the same context (see below). Some  properties  of
              the  datastore can be set differently for each peer and thus sync config (per-peer). One of these,
              the sync property, defines if and how a datastore is used during a sync.

       context
              Sync and datastore configs are defined inside one or more configuration contexts. There is  always
              a @default context that gets used if nothing else is specified.

              Typically  each  context represents a certain set of related datastores. For example, normally the
              @default context is used for local databases. Datastores related to a certain peer can be  defined
              in a context @peer-name named after that peer.

       configuration properties
              SyncEvolution  uses  key/value  pairs to store configuration options.  A configuration is a set of
              unique keys and their values that together describe a certain object.

              These sets of properties are addressed via the main config  name  (a  sync  config  name  with  or
              without  an  explicit context, or just the context name) and optionally the datastore name (if the
              properties are for a specific datastore).

              Sync properties are set for sync configs, independently of a particular datastore. Properties that
              cannot  be set without specifying they datastore that they apply to are datastore properties. This
              includes properties that belong both to a datastore and a sync config.

              The property names were chosen so that they are unique, i.e., no sync property has the  same  name
              as  a  datastore  property.  For  historic reasons, internally these properties are treated as two
              different sets and there are two different command line options to query the list  of  sync  resp.
              datastore properties.

              Some  configuration  properties  are  shared between configurations automatically. This sharing is
              hard-coded and cannot be configured.  It has the advantage that certain settings only need  to  be
              set once and/or can be changed for several different configs at once.

              A  property  can  be  unshared (has separate values for each peer, therefore sometimes also called
              per-peer; for example the sync property), shared (same  value  for  all  peers;  for  example  the
              database property for selecting the local database) or global (exactly one value).

              Together  with  the  distinction  between sync and datastore properties, this currently results in
              five different groups of properties:

              • Sync properties (by definition, this also includes properties independent of a  particular  sync
                config  because  they  are  set  for  all  sync configs at once, independently of any particular
                datastore):

                • global (=  ~/.config/syncevolution/config.ini):  independent  of  a  particular  context,  for
                  example keyring

                • shared  (=  ~/.config/syncevolution/<context name>/config.ini): set once for each context, for
                  example logdir

                • unshared  (=   ~/.config/syncevolution/<context   name>/peers/<peer   name>/config.ini):   set
                  separately for each sync config, for example syncURL

              • Datastore properties:

                • shared   (=   ~/.config/syncevolution/<context   name>/sources/<store  name>/config.ini):  the
                  properties required for access to the data, primarily backend and database

                • unshared   (=    ~/.config/syncevolution/<context    name>/peers/<peer    name>/sources/<store
                  name>/config.ini):  the  already  mentioned  sync and uri properties, but also a per-peer sync
                  format properties

              Many properties have reasonable defaults, either defined in the configuration layer or  chosen  at
              runtime  by  the  SyncEvolution  engine reading the configuration, and therefore do not have to be
              set.

              The configuration layer in SyncEvolution has a very limited understanding of the semantic of  each
              property.  It  just  knows  about  some  generic types (strings, boolean, integers, ...) and where
              properties are supposed to be stored. It is the layer above that, the one which actually tries  to
              use the configuration, that determines whether the property values make sense as specified. Beware
              that it is possible to  set  properties  to  values  that  conflict  with  other  property  values
              (triggering errors when using the configuration) or to set properties that are not used (typically
              they get ignored silently, unless an explicit error check was implemented).

       configuration template
              Templates define the settings for specific  peers.  Some  templates  are  packaged  together  with
              SyncEvolution,  others may be added by packagers or users. Settings from templates are copied once
              into the sync config when creating it. There is  no  permanent  link  back  to  the  template,  so
              updating a template has no effect on configs created from it earlier.

              A  template  only  contains  unshared  properties.  Therefore  it  is possible to first set shared
              properties (for example, choosing which databases to synchronize in the default context), then add
              sync configs for different peers to that context without reseting the existing settings.

              In  SyncEvolution's  predefined  configuration  templates,  the following names for datastores are
              used. Different names can be chosen for datastores that are defined manually.

              • addressbook: a list of contacts

              • calendar: calendar events

              • memo: plain text notes

              • todo: task list

              • calendar+todo: a virtual datastore combining one  local  "calendar"  and  one  "todo"  datastore
                (required for synchronizing with some phones)

       local sync
              Traditionally,  a  sync  config  specifies  SyncML as the synchronization protocol via the syncURL
              property. The peer must support SyncML for this to work.

              In a so called local sync, SyncEvolution acts as SyncML  server  and  client  at  the  same  time,
              connecting  the  two  sides  via  internal  message  passing.  Both  sides  have  their own set of
              datastores, which may use CalDAV, CardDAV or ActiveSync to access the data.

              See Synchronization beyond SyncML.

       originating config
              In a local sync, the sync config used to start the sync is called the originating sync config,  or
              just originating config.

       target config
              In  addition  to  the  originating  config,  a  local  sync  also  uses  a  target  config. At the
              configuration level, this target config is just another sync config. It becomes  a  target  config
              when referenced by a sync config for local syncing.

COMMAND LINE CONVENTIONS

       The  <config>  and  the  <store>  strings  in  the  command line synopsis are used to find the sync resp.
       datastore configs. Depending on which other parameters are given, different operations are executed.

       The <config> string has the format [<peer>][@<context>]. When the context is  not  specified  explicitly,
       SyncEvolution first searches for an existing sync configuration with the given <peer> name. If not found,
       the configuration can only be created, but not read. It will  be  created  in  the  @default  context  as
       fallback. The empty <config> string is an alias for @default.

       The  <peer>  part identifies a specific sync or target config inside the context. It is optional and does
       not have to be specified when not needed, for example when configuring the shared settings of  datastores
       (--configure @default addressbook) or accessing items inside a datastore (--print-items @work calendar).

       Listing datastores on the command line limits the operation to those datastores (called active datastores
       below). If not given, all datastores enabled for the config are active. Some operations require the  name
       of exactly one datastore.

       Properties  are  set with key/value assignments and/or the --sync/store-property keywords. Those keywords
       are only needed for the hypothetical situation that a sync and datastore property  share  the  same  name
       (which  was  intentionally  avoided).  Without them, SyncEvolution automatically identifies which kind of
       property is meant based on the name.

       A <property> assignment has the following format:

          [<store>/]<name>[@<context>|@<peer>@<context>]=<value>

       The optional <context> or <peer>@<context> suffix limits the  scope  of  the  value  to  that  particular
       configuration.  This  is  useful  when  running  a  local  sync,  which  involves  a  sync  and  a target
       configuration. For example, the log level can be specified separately for both sides:

          --run loglevel@default=1 loglevel@google-calendar=4 google-calendar@default

       A string without a second @ sign inside is always interpreted as a context name, so in  contrast  to  the
       <config>  string,  foo  cannot  be  used  to  reference  the foo@default configuration. Use the full name
       including the context for that.

       When no config or context is specified explicitly, a value is changed in all  active  configs,  typically
       the  one  given  with  <config>.   The  priority  of multiple values for the same config is more specific
       definition wins, so <peer>@<context> overrides @<context>, which overrides no suffix  given.   Specifying
       some suffix which does not apply to the current operation does not trigger an error, so beware of typos.

       Datastore  properties  can  be  specified  with  a <store>/ prefix. This allows limiting the value to the
       selected datastore. For example:

          --configure "addressbook/database=My Addressbook" \
                      "calendar/database=My Calendar" \
                      @default addressbook calendar

       Another way to achieve the same effect is to run the --configure operation twice,  once  for  addressbook
       and once for calendar:

          --configure "database=My Addressbook" @default addressbook
          --configure "database=My Calendar" @default calendar

       If  the  same  property is set both with and without a <store>/ prefix, then the more specific value with
       that prefix is used for that datastore, regardless of the  order  on  the  command  line.  The  following
       command enables all datastores except for the addressbook:

          --configure addressbook/sync=none \
                      sync=two-way \
                      <sync config>

USAGE

          syncevolution --print-databases [<properties>] [<config> <store>]

       If  no  additional  arguments  are  given,  then  SyncEvolution  will list all available backends and the
       databases that can be accessed through each backend. This works without existing configurations. However,
       some  backends, like for example the CalDAV backend, need additional information (like credentials or URL
       of a remote server). This additional information can be  provided  on  the  command  line  with  property
       assignments (username=...) or in an existing configuration.

       When  listing  all  databases  of  all active datastores, the output starts with a heading that lists the
       values for the backend property which select the backend, followed by the databases.  Each database has a
       name  and  a unique ID (in brackets). Typically both can be used as value of the 'database' property. One
       database might be marked as default. It will be used when database is not set explicitly.

       When selecting an existing datastore configuration or specifying the  backend  property  on  the  command
       line,  only  the  databases  for  that backend are listed and the initial line shows how that backend was
       selected (<config>/<store> resp. backend value).

       Some backends do not support listing of databases. For example, the file backend synchronizes directories
       with  one  file  per  item  and  always needs an explicit database property because it cannot guess which
       directory it is meant to use.

          syncevolution --create-database [<properties>] [<config> <store>]

       Creates a new database for the selected backend, using the information given in the database property. As
       with  --print-databases,  it  is possible to give the properties directly without configuring a datastore
       first.

       The interpretation of the database property depends  on  the  backend.  Not  all  backends  support  this
       operation.

       The  EDS  backend  uses  the  value  of the database as name of the new database and assigns a unique URI
       automatically.

          syncevolution --remove-database [<properties>] [<config> <store>]

       Looks up the database based on the database property (depending on the backend, both name and a  URI  are
       valid), then deletes the data.  Note that datastore configurations using the database are not removed.

          syncevolution <config>

       Without the optional list of datastores, all datastores which are enabled in their configuration file are
       synchronized.

          syncevolution <config> <store> ...

       Otherwise only the ones mentioned on the command line are active. It is possible to configure  datastores
       without  activating their synchronization: if the synchronization mode of a datastore is set to disabled,
       the datastore will be ignored. Explicitly listing such a datastore will synchronize it  in  two-way  mode
       once.

       Progress  and  error messages are written into a log file that is preserved for each synchronization run.
       Details about that is found in the Automatic Backups and Logging section below. All errors  and  warnings
       are  printed  directly  to  the  console  in  addition to writing them into the log file. Before quitting
       SyncEvolution will print a summary of how the local data was modified.  This is done with the synccompare
       utility script described in the Exchanging Data section.

       When  the  logdir  property is enabled (since v0.9 done by default for new configurations), then the same
       comparison is also done before the synchronization starts.

       In case of a severe error the synchronization run is aborted prematurely and SyncEvolution will return  a
       non-zero value. Recovery from failed synchronization is done by forcing a full synchronization during the
       next run, i.e. by sending all items and letting the SyncML server compare against  the  ones  it  already
       knows. This is avoided whenever possible because matching items during a slow synchronization can lead to
       duplicate entries.

       After a successful synchronization the server's configuration file is updated so that the next run can be
       done incrementally.  If the configuration file has to be recreated e.g. because it was lost, the next run
       recovers from that by doing a full synchronization. The risk associated with  this  is  that  the  server
       might  not  recognize items that it already has stored previously which then would lead to duplication of
       items.

          syncevolution --configure <options for configuration> <config> [<store> ...]

       Options in the configuration can be modified via the command line. The <config> and the optional  <store>
       parameters  define what gets created or modified. The remaining parameters define which values get set or
       modified.

       To change settings of specific datastores, either invoke syncevolution multiple times  with  exactly  one
       <store> parameter or use the [<store>/] prefix described above for property assignments.

          syncevolution --remove <config>

       Deletes  the  configuration. If the <config> refers to a specific peer, only that peer's configuration is
       removed. If it refers to a context, that context and all peers  and  datastores  defined  inside  it  are
       removed.

       Note  that  there is no confirmation question. Neither local data referenced by the configuration nor the
       content of log dirs are deleted.

          syncevolution --run <options for run> <config> [<store> ...]

       Options can also be overridden for just the current run, without changing the configuration. In order  to
       prevent  accidentally running a sync session when a configuration change was intended, either --configure
       or --run must be given explicitly if options are specified on the command line.

          syncevolution --status <config> [<store> ...]

       Prints what changes were made locally since the last synchronization.   Depends  on  access  to  database
       dumps from the last run, so enabling the logdir property is recommended.

          syncevolution --print-servers|--print-configs|--print-peers
          syncevolution --print-config [--quiet] <config> [main|<store> ...]
          syncevolution --print-sessions [--quiet] <config>

       These  commands  print  information  about existing configurations. When printing a configuration a short
       version without  comments  can  be  selected  with  --quiet.  When  datastores  are  listed,  only  their
       configuration  is  shown.  Main  instead  or  in  combination  with  datastores  lists only the main peer
       configuration.

          syncevolution --restore <session directory> --before|--after
                        [--dry-run] <config> <store> ...

       This restores local  data  from  the  backups  made  before  or  after  a  synchronization  session.  The
       --print-sessions  command  can  be  used  to  find  these  backups.  The  datastore(s)  have to be listed
       explicitly. There is intentionally no  default,  because  as  with  --remove  there  is  no  confirmation
       question. With --dry-run, the restore is only simulated.

       The  session directory has to be specified explicitly with its path name (absolute or relative to current
       directory). It does not have to be one of the currently active log directories, as long  as  it  contains
       the right database dumps for the selected datastores.

       A  restore tries to minimize the number of item changes (see section Item Changes and Data Changes). This
       means that items that are identical before and after the change will not be transmitted anew to the  peer
       during  the  next synchronization. If the peer somehow needs to get a clean copy of all local items, then
       use --sync refresh-from-local in the next run.

          syncevolution --print-items <config> <store>
          syncevolution [--delimiter <string>] --export <dir>|<file>|- [<config> [<store> [<luid> ...]]]
          syncevolution [--delimiter <string>|none] --import <dir>|<file>|- [<config> <store>]
          syncevolution --update <dir> <config> <store>
          syncevolution [--delimiter <string>|none] --update <file>|- <config> <store> <luid> ...
          syncevolution --delete-items <config> <store> (<luid> ... | *)

       Restore depends on the specific format of the  automatic  backups  created  by  SyncEvolution.  Arbitrary
       access  to  item  data  is  provided  with additional options. <luid> here is the unique local identifier
       assigned to each item in the datastore, transformed so that it  contains  only  alphanumeric  characters,
       dash  and  underscore.  A  star * in --delete-items selects all items for deletion. There are two ways of
       specifying luids: either as additional parameters after the config and datastore parameters (which may be
       empty in this case, but must be given) or after the --luids keyword.

       <config>  and  <store>  may  be  given  to  define  the database which is to be used. If not given or not
       refering to an existing configuration (which is not an error,  due  to  historic  reasons),  the  desired
       backend must be given via the backend property, like this:

          syncevolution --print-items backend=evolution-contacts
          syncevolution --export - backend=evolution-contacts \
                        --luids pas-id-4E33F24300000006 pas-id-4E36DD7B00000007

       The desired backend database can be chosen via database=<identifier>.  See --print-databases.

OPTIONS

       Here  is  a  full  description  of all <options> that can be put in front of the server name. Whenever an
       option accepts multiple values, a question mark can be used to get the corresponding help text  and/or  a
       list of valid values.

       --sync|-s <mode>|?
              Temporarily  synchronize  the  active  datastores in that mode. Useful for a refresh-from-local or
              refresh-from-remote sync which clears all data at one end and copies all items from the other.

              Warning: local is the data accessed via the sync config directly and remote is  the  data  on  the
              peer, regardless where the data is actually stored physically.

       --print-servers|--print-configs|--print-peers
              Prints  the names of all configured peers to stdout. There is no difference between these options,
              the are just aliases.

       --print-servers|--print-configs|--print-peers|-p
              Prints the complete configuration for  the  selected  <config>  to  stdout,  including  up-to-date
              comments for all properties. The format is the normal .ini format with datastore configurations in
              different sections introduced with [<store>] lines.  Can  be  combined  with  --sync-property  and
              --datastore-property  to  modify  the  configuration  on-the-fly.  When one or more datastores are
              listed after the <config> name on the command line, then only the configs of those datastores  are
              printed.  main  selects  the main configuration instead of datastore configurations. Using --quiet
              suppresses the comments for  each  property.   When  setting  a  --template,  then  the  reference
              configuration for that peer is printed instead of an existing configuration.

       --print-sessions
              Prints  information  about  previous synchronization sessions for the selected peer or context are
              printed. This depends on the logdir property.  The information includes  the  log  directory  name
              (useful for --restore) and the synchronization report. In combination with --quiet, only the paths
              are listed.

       --configure|-c
              Modify the configuration files for the selected peer and/or datastores.

              If no  such  configuration  exists,  then  a  new  one  is  created  using  one  of  the  template
              configurations  (see  --template option). Choosing a template sets most of the relevant properties
              for the peer and the default set of datastores (see above for a list of those). Anything  specific
              to the user (like username/password) still has to be set manually.

              When  creating  a  new  configuration  and listing datastores explicitly on the command line, only
              those datastores will be set to active in the new configuration,  i.e.  syncevolution  -c  memotoo
              addressbook  followed  by  syncevolution memotoo will only synchronize the address book. The other
              datastores are created in  a  disabled  state.   When  modifying  an  existing  configuration  and
              datastores are specified, then the datastore properties of only those datastores are modified.

              By  default, creating a config requires a template. Datastore names on the command line must match
              those in the template. This allows catching typos in the peer and datastore  names.  But  it  also
              prevents some advanced use cases. Therefore it is possible to disable these checks in two ways:

                 - use `--template none` or
                 - specify all required sync and datastore properties that are normally
                   in the templates on the command line (syncURL, backend, ...)

       --run|-r
              To  prevent  accidental  sync  runs  when a configuration change was intended, but the --configure
              option was not used, --run must be specified explicitly when  sync  or  datastore  properties  are
              selected  on the command line and they are meant to be used during a sync session triggered by the
              invocation.

       --migrate
              In older SyncEvolution releases  a  different  layout  of  configuration  files  was  used.  Using
              --migrate  will  automatically migrate to the new layout and rename the <config> into <config>.old
              to prevent accidental use of the old configuration. WARNING: old SyncEvolution releases cannot use
              the new configuration!

              The  switch  can  also  be used to migrate a configuration in the current configuration directory:
              this preserves all property values, discards obsolete properties and sets all comments exactly  as
              if  the configuration had been created from scratch. WARNING: custom comments in the configuration
              are not preserved.

              --migrate implies --configure and can be combined with modifying properties.

       --print-items
              Shows all existing items using one line per item using the format "<luid>[: <short description>]".
              Whether the description is available depends on the backend and the kind of data that it stores.

       --export
              Writes  all  items  in  the  datastore  or all items whose <luid> is given into a directory if the
              --export parameter exists and is a directory. The <luid> of  each  item  is  used  as  file  name.
              Otherwise  it  creates  a  new file under that name and writes the selected items separated by the
              chosen delimiter string. stdout can be selected with a dash.

              The default delimiter (two line breaks) matches a blank line. As a special case, it also matches a
              blank  line  with  DOS line ending (line break, carriage return, line break). This works for vCard
              3.0 and iCalendar 2.0, which never contain blank lines.

              When exporting, the default delimiter will always insert two line breaks  regardless  whether  the
              items  contain  DOS line ends. As a special case, the initial newline of a delimiter is skipped if
              the item already ends in a newline.

       --import
              Adds all items found in the directory or input  file  to  the  datastore.   When  reading  from  a
              directory, each file is treated as one item. Otherwise the input is split at the chosen delimiter.
              "none" as delimiter disables splitting of the input.

       --update
              Overwrites the content of existing items. When updating from a directory, the name of each file is
              taken as its luid. When updating from file or stdin, the number of luids given on the command line
              must match with the number of items in the input.

       --delete-items
              Removes the specified items from the datastore. Most  backends  print  some  progress  information
              about  this,  but besides that, no further output is produced. Trying to remove an item which does
              not exist typically leads to an ERROR message, but is not reflected in a non-zero  result  of  the
              command  line  invocation  itself  because  the  situation is not reported as an error by backends
              (removal of non-existent items is not an error in SyncML). Use a star * instead or in addition  to
              listing individual luids to delete all items.

       --sync-property|-y <property>=<value>|<property>=?|?
              Overrides  a  datastore-independent  configuration property for the current synchronization run or
              permanently when --configure is used to update the configuration.  Can  be  used  multiple  times.
              Specifying an unused property will trigger an error message.

       --datastore-property|--source-property|-z <property>=<value>|<property>=?|?
              Same  as --sync-property, but applies to the configuration of all active datastores. --sync <mode>
              is a shortcut for --datastore-property sync=<mode>.

       --template|-l <peer name>|default|?<device>
              Can be used to select from one of the built-in default  configurations  for  known  SyncML  peers.
              Defaults  to  the  <config>  name,  so  --template only has to be specified when creating multiple
              different configurations for the same peer, or when using a template  that  is  named  differently
              than  the  peer. default is an alias for memotoo and can be used as the starting point for servers
              which do not have a built-in template.

              A pseudo-random device ID is generated automatically. Therefore setting the deviceId sync property
              is  only  necessary  when  manually  recreating a configuration or when a more descriptive name is
              desired.

              The available templates for different known SyncML servers are listed when using a single question
              mark instead of template name. When using the ?<device> format, a fuzzy search for a template that
              might be suitable for talking to such a device  is  done.  The  matching  works  best  when  using
              <device>  =  <Manufacturer>  <Model>.  If you don't know the manufacturer, you can just keep it as
              empty. The output in this mode gives the template name followed  by  a  short  description  and  a
              rating how well the template matches the device (100% is best).

       --status|-t
              The  changes  made  to  local data since the last synchronization are shown without starting a new
              one. This can be used to see in advance whether the local data needs to be synchronized  with  the
              server.

       --quiet|-q
              Suppresses most of the normal output during a synchronization. The log file still contains all the
              information.

       --keyring[=<value>]|-k
              A legacy option, now the same as setting the global keyring sync property.  When not specifying  a
              value  explicitly, "true" for "use some kind of keyring" is implied. See "--sync-property keyring"
              for details.

       --daemon[=yes/no]
              By default, the SyncEvolution command line is executed  inside  the  syncevo-dbus-server  process.
              This  ensures  that  synchronization  sessions  started  by  the command line do not conflict with
              sessions started via some other means (GUI, automatically). For debugging purposes or very special
              use  cases (running a local sync against a server which executes inside the daemon) it is possible
              to execute the operation without the daemon (--daemon=no).

       --help|-h
              Prints usage information.

       --version
              Prints the SyncEvolution version.

CONFIGURATION PROPERTIES

       This section lists predefined properties. Backends can add their own properties at runtime if none of the
       predefined  properties  are  suitable  for  a certain setting. Those additional properties are not listed
       here. Use --sync/datastore-property ? to get an up-to-date list.

       The predefined properties may also be interpreted slightly differently by each backend and sync protocol.
       Sometimes  this  is  documented  in  the comment for each property, sometimes in the documentation of the
       backend or sync protocol.

       Properties are listed together with all recognized aliases (in those cases where a property  was  renamed
       at  some  point),  its  default  value,  sharing  state (unshared/shared/global). Some properties must be
       defined, which is marked with the word required.

   Sync properties
       syncURL (no default, unshared, required)
              Identifies how to contact the peer, best explained with some examples.

              HTTP(S) SyncML servers:

                 http://example.com/sync

              OBEX over Bluetooth uses the MAC address, with the channel chosen automatically:

                 obex-bt://00:0A:94:03:F3:7E

              If the automatism fails, the channel can also be specified:

                 obex-bt://00:0A:94:03:F3:7E+16

              For peers contacting us via Bluetooth, the MAC address is used to  identify  it  before  the  sync
              starts. Multiple urls can be specified in one syncURL property:

                 obex-bt://00:0A:94:03:F3:7E obex-bt://00:01:02:03:04:05

              In  the  future  this  might be used to contact the peer via one of several transports; right now,
              only the first one is tried.

       username (no default, unshared)
              user name used for authorization with the SyncML server

       password (no default, unshared)
              password used for authorization with the peer; in addition to  specifying  it  directly  as  plain
              text, it can also be read from the standard input or from an environment variable of your choice:

                 plain text  : password = <insert your password here>
                 ask         : password = -
                 env variable: password = ${<name of environment variable>}

       logdir (no default, shared)
              full  path  to  directory where automatic backups and logs are stored for all synchronizations; if
              unset,    then    "${XDG_CACHE_HOME}/syncevolution/<server>"    (which    usually    expands    to
              ${HOME}/.cache/...)  will  be  used;  if "none", then no backups of the databases are made and any
              output is printed directly to the screen

       loglevel (0, unshared)
              level of detail for log messages: - 0 (or unset) = INFO messages without log file, DEBUG with  log
              file - 1 = only ERROR messages - 2 = also INFO messages - 3 = also DEBUG messages > 3 = increasing
              amounts of debug messages for developers

       notifyLevel (3, unshared)
              Level of detail for desktop notifications. Currently such notifications  are  generated  only  for
              automatically started sync sessions.

              0  - suppress all notifications 1 - show only errors 2 - show information about changes and errors
              (in practice currently the same as level 3) 3 - show all notifications, including starting a sync

       printChanges (TRUE, unshared)
              enables or disables the detailed (and sometimes slow) comparison of database  content  before  and
              after a sync session

       dumpData (TRUE, unshared)
              enables  or  disables  the  automatic  backup  of database content before and after a sync session
              (always enabled if printChanges is enabled)

       maxlogdirs (10, shared)
              Controls how many session directories are kept at  most  in  the  logdir.   Unless  set  to  zero,
              SyncEvolution  will  remove  old  directories  and  all their content to prevent the number of log
              directories from growing beyond the given limit. It  tries  to  be  intelligent  and  will  remove
              sessions  in  which  nothing interesting happened (no errors, no data changes) in favor of keeping
              sessions where something happened, even if those sessions are older.

       autoSync (0, unshared)
              Controls automatic synchronization. Currently, automatic synchronization  is  done  by  running  a
              synchronization  at  regular  intervals.  This  may  drain  the  battery, in particular when using
              Bluetooth!  Because a peer might be reachable via different transports at some point, this  option
              provides detailed control over which transports may be used for automatic synchronization:

              0      don't do auto sync

              1

                     do automatic sync, using whatever transport
                            is available

              http   only via HTTP transport

              obex-bt
                     only via Bluetooth transport

              http,obex-bt
                     pick one of these

       autoSyncInterval (30M, unshared)
              This is the minimum number of seconds since the start of the last synchronization that has to pass
              before starting an automatic synchronization. Can be specified using a 1h30m5s format.

              Before reducing this interval, consider that it will increase resource consumption  on  the  local
              and  remote  side.  Some  SyncML server operators only allow a certain number of sessions per day.
              The value 0 has the effect of only running automatic synchronization  when  changes  are  detected
              (not implemented yet, therefore it basically disables automatic synchronization).

       autoSyncDelay (5M, unshared)
              An  automatic  sync  will  not  be  started  unless the peer has been available for this duration,
              specified in seconds or 1h30m5s format.

              This prevents running a sync when network connectivity is unreliable or was  recently  established
              for  some  other purpose. It is also a heuristic that attempts to predict how long connectivity be
              available in the future, because it should  better  be  available  long  enough  to  complete  the
              synchronization.

       preventSlowSync (TRUE, unshared)
              During  a  slow  sync, the SyncML server must match all items of the client with its own items and
              detect which ones it already has based on properties of the items. This is slow (client must  send
              all  its  data)  and  can  lead  to  duplicates (when the server fails to match correctly).  It is
              therefore sometimes desirable to wipe out data on one side with a refresh-from-client/server  sync
              instead  of  doing a slow sync.  When this option is enabled, slow syncs that could cause problems
              are not allowed to proceed. Instead, the affected datastores are skipped,  allowing  the  user  to
              choose  a  suitable  sync mode in the next run (slow sync selected explicitly, refresh sync).  The
              following situations are handled:

              • running as client with no  local  data  =>  unproblematic,  slow  sync  is  allowed  to  proceed
                automatically

              • running  as client with local data => client has no information about server, so slow sync might
                be problematic and is prevented

              • client has data, server asks for slow sync because all its data was deleted (done by Memotoo and
                Mobical,  because  they  treat  this  as  'user  wants to start from scratch') => the sync would
                recreate all the client's data, even if the user really wanted to  have  it  deleted,  therefore
                slow sync is prevented

       useProxy (FALSE, unshared)
              set  to  T  to  choose  an  HTTP  proxy  explicitly;  otherwise  the default proxy settings of the
              underlying HTTP transport mechanism are used; only relevant when contacting the peer via HTTP

       proxyHost (no default, unshared)
              proxy URL (http://<host>:<port>)

       proxyUsername (no default, unshared)
              authentication for proxy: username

       proxyPassword (no default, unshared)
              proxy password, can be specified in different ways, see SyncML server password for details

       clientAuthType (md5, unshared)

              • empty or "md5" for secure method (recommended)

              • "basic" for insecure method

              This setting is only for debugging purpose and only has an effect during the  initial  sync  of  a
              client.  Later it remembers the method that was supported by the server and uses that. When acting
              as server, clients contacting us can use both basic and md5 authentication.

       RetryDuration (5M, unshared)
              The total amount of time in seconds in which the SyncML client tries to get a  response  from  the
              server.  During this time, the client will resend messages in regular intervals (RetryInterval) if
              no response is received or the message could not be delivered due to transport problems. When this
              time  is  exceeded without a response, the synchronization aborts without sending further messages
              to the server.

              When acting as server, this setting controls how long a client is allowed to not  send  a  message
              before the synchronization is aborted.

       RetryInterval (2M, unshared)
              The  number  of  seconds  between  the  start  of  SyncML  message  sending  and  the start of the
              retransmission. If the interval has already passed when a message send  returns,  the  message  is
              resent  immediately.  Resending  without  any  delay will never succeed and therefore specifying 0
              disables retries.

              Servers cannot resend messages, so this setting has no effect in that case.

              The WebDAV backend also resends messages after a temporary  network  error.  It  uses  exponential
              backoff  to  determine when the server is available again. This setting is divided by 24 to obtain
              the initial delay (default: 2m => 5s), which is then doubled for each retry.

       remoteIdentifier (no default, unshared)
              the identifier sent to the remote peer for a server initiated sync.  if not set, deviceId will  be
              used instead

       PeerIsClient (FALSE, unshared)
              Indicates whether this configuration is about a client peer or server peer.

       SyncMLVersion (no default, unshared)
              On a client, the latest commonly supported SyncML version is used when contacting a server. One of
              '1.0/1.1/1.2' can be used to pick a specific version explicitly.

              On a server, this option controls what kind of Server Alerted Notification is sent to  the  client
              to  start  a  synchronization.   By  default,  first the format from 1.2 is tried, then in case of
              failure, the older one from 1.1. 1.2/1.1 can be set explicitly, which disables the automatism.

              Instead or in adddition to the version, several keywords can be set in this property (separated by
              spaces or commas):

              • NOCTCAP - avoid sending CtCap meta information

              • NORESTART  -  disable  the  sync  mode  extension  that  SyncEvolution  client and server use to
                negotiate whether both sides support running multiple sync iterations in the same session

              • REQUESTMAXTIME=<time> - override the rate at which the SyncML server sends  preliminary  replies
                while  preparing  local  storages  in the background. This helps to avoid timeouts in the SyncML
                client. Depends on multithreading.  This SyncEvolution  binary  is  thread-safe  and  thus  this
                feature  is  enabled  by  default  for HTTP servers, with a delay of 2 minutes between messages.
                Other servers (Bluetooth, local sync) should not need preliminary replies  and  the  feature  is
                disabled,  although  it  can be enabled by setting the time explicitly.  <time> can be specified
                like other durations in the config, for example as REQUESTMAXTIME=2m.

              Setting these flags should only be necessary as workaround for broken peers.

       PeerName (no default, unshared)
              An arbitrary name for the peer referenced by this config.  Might be used by  a  GUI.  The  command
              line tool always uses the the configuration name.

       deviceId (no default, shared)
              The  SyncML server gets this string and will use it to keep track of changes that still need to be
              synchronized with  this  particular  client;  it  must  be  set  to  something  unique  (like  the
              pseudo-random string created automatically for new configurations) among all clients accessing the

              same server.  myFUNAMBOL also requires that the string starts with sc-pim-
       remoteDeviceId (no default, unshared)
              SyncML ID of our peer, empty if unknown; must be set  only  when  the  peer  is  a  SyncML  client
              contacting  us  via  HTTP.   Clients contacting us via OBEX/Bluetooth can be identified either via
              this remoteDeviceId property or by their MAC address, if that was set in the syncURL property.

              If this property is empty and the peer synchronizes with this configuration chosen by  some  other
              means,  then its ID is recorded here automatically and later used to verify that the configuration
              is not accidentally used by a different peer.

       enableWBXML (TRUE, unshared)
              use the more compact binary XML (WBXML) for messages between client  and  server;  not  applicable
              when the peer is a SyncML client, because then the client chooses the encoding

       enableRefreshSync (FALSE, unshared)
              Use  the  more  advanced  refresh-from-server  sync  mode  to  implement  the  refresh-from-remote
              operation. Some SyncML servers do not support this. Therefore the default is to delete local  data
              before  doing  a slow sync, which has the same effect. However, some servers work better when they
              are told explicitly that the sync is a refresh sync. For  example,  Funambol's  One  Media  server
              rejects too many slow syncs in a row with a 417 'retry later' error.

       maxMsgSize (150000, unshared), maxObjSize (4000000, unshared)
              The  maximum  size  of each message can be set (maxMsgSize) and the peer can be told to never sent
              items larger than a certain threshold (maxObjSize). Presumably the peer has to  truncate  or  skip
              larger items. Sizes are specified as number of bytes.

       SSLServerCertificates
       (/etc/ssl/certs/ca-certificates.crt:/etc/pki/tls/certs/ca-bundle.crt:/usr/share/ssl/certs/ca-bundle.crt,
       unshared)
              A  string specifying the location of the certificates used to authenticate the server. When empty,
              the system's default location will be searched.

              SSL support when acting as HTTP server is implemented by the HTTP server frontend, not with  these
              properties.

       SSLVerifyServer (TRUE, unshared)
              The  client  refuses  to  establish the connection unless the server presents a valid certificate.
              Disabling this option considerably reduces the security of SSL (man-in-the-middle  attacks  become
              possible) and is not recommended.

       SSLVerifyHost (TRUE, unshared)
              The  client  refuses  to establish the connection unless the server's certificate matches its host
              name. In cases where the certificate still seems to be valid it might make sense to  disable  this
              option and allow such connections.

       WebURL (no default, unshared)
              The URL of a web page with further information about the server.  Used only by the GUI.

       IconURI (no default, unshared)
              The  URI  of  an  icon  representing  the  server  graphically.  Should be a 48x48 pixmap or a SVG
              (preferred).  Used only by the GUI.

       ConsumerReady (FALSE, unshared)
              Set to true in a configuration template to indicate that the  server  works  well  enough  and  is
              available  for  normal  users.  Used  by  the GUI to limit the choice of configurations offered to
              users.  Has no effect in a user's server configuration.

       peerType (no default, unshared)
              Defines what a configuration is meant to be used for.  Used in templates and the resulting configs
              to  tell  a  GUI  that  special  handling may be necessary. GUIs should ignore unknown types.  The
              traditional SyncML configs use an empty value.  "WebDAV" is used for the WebDAV side  in  a  local
              synchronization.

       defaultPeer (no default, global)
              the peer which is used by default in some frontends, like the sync-UI

       keyring (yes, global)
              Explicitly  selects  a certain safe password storage.  Depending on how SyncEvolution was compiled
              and installed the following values are possible:

              GNOME  GNOME Keyring

              KDE    KWallet

              yes/true/1
                     pick one automatically

              no/false/0
                     store passwords in SyncEvolution config files

              If unset, the default is to pick one automatically if support for any kind of password storage was
              enabled  and  use  the config files otherwise. When choosing automatically, GNOME keyring is tried
              first because distinguishing between KDE and GNOME sessions automatically is tricky.

              Note that using this option applies to all passwords in a configuration  and  that  the  --keyring
              command  line  option  is  merely  an  alias  for setting the global property, so setting a single
              password as follows sets both keyring and proxyPasswords, and also moves the other passwords  into
              the keyring, even if they were not stored there already:
                 --keyring --configure proxyPassword=foo

              When  passwords  were stored in a safe storage, their value is set to a single hyphen ("-") in the
              configuration. This means that when running a  synchronization  without  using  the  storage,  the
              password  has  to  be entered interactively. The --print-config output always shows "-" instead of
              retrieving the password from the keyring.

   Datastore properties
       sync (disabled, unshared, required)
              Requests a certain synchronization mode when initiating a sync:

                 two-way
                        only send/receive changes since last sync

                 slow   exchange all items

                 refresh-from-remote
                        discard all local items and replace with the items on the peer

                 refresh-from-local
                        discard all items on the peer and replace with the local items

                 one-way-from-remote
                        transmit changes from peer

                 one-way-from-local
                        transmit local changes

                 local-cache-slow (server only)
                        mirror remote data locally, transferring all data

                 local-cache-incremental (server only)
                        mirror remote data locally, transferring only changes; falls  back  to  local-cache-slow
                        automatically if necessary

                 disabled (or none)
                        synchronization disabled

              refresh/one-way-from-server/client  are  also  supported.  Their  use  is  discouraged because the
              direction of the data transfer depends on the role of the local side (can be  server  or  client),
              which is not always obvious.

              When  accepting  a  sync  session  in  a SyncML server (HTTP server), only datastores with sync !=
              disabled are made available to the client, which chooses the final sync  mode  based  on  its  own
              configuration.   When  accepting  a  sync  session  in a SyncML client (local sync with the server
              contacting SyncEvolution on a device),  the  sync  mode  specified  in  the  client  is  typically
              overriden by the server.

       uri (no default, unshared)
              this  is  appended  to the server's URL to identify the server's database; if unset, the datastore
              name is used as fallback

       backend (select backend, shared)
              Specifies the SyncEvolution backend and thus the data which is  synchronized  by  this  datastore.
              Each  backend  may  support multiple databases (see 'database' property), different formats inside
              that database (see 'databaseFormat'), and different formats when talking to  the  sync  peer  (see
              'syncFormat' and 'forceSyncFormat').

              A  special  'virtual'  backend  combines  several other datastores and presents them as one set of
              items to the peer. For example, Nokia phones typically exchange tasks and events as  part  of  one
              set of calendar items.

              Right  now  such  a virtual backend is limited to combining one calendar datastore with events and
              one task datastore. They have to be specified in  the  database  property,  typically  like  this:
              calendar,todo

              Different  datastores  combined  in one virtual datastore must have a common format. As with other
              backends, the preferred format can be influenced via the 'syncFormat' attribute.

              Here's the full list of potentially supported backends, valid 'backend' values for each  of  them,
              and  possible  formats. Note that SyncEvolution installations usually support only a subset of the
              backends; that's why e.g.  "addressbook" is unambiguous although there are multiple  address  book
              backends.

       syncFormat (no default, unshared)
              When  there  are  alternative  formats  for  the same data, each side of a sync offers all that it
              supports and marks one as preferred. If  set,  this  property  overrides  the  format  that  would
              normally be marked as preferred by a backend.

              Valid values depend on the backend. Here are some examples:

                     contacts - text/vcard = vCard 3.0 format
                            text/x-vcard = legacy vCard 2.1 format

                     calendar - text/calendar = iCalendar 2.0 format
                            text/x-vcalendar = legacy vCalendar 1.0 format

              Errors  while  starting to sync and parsing and/or storing items on either client or server can be
              caused by a mismatch between the sync format and uri at the peer.

       forceSyncFormat (FALSE, unshared)
              Some peers get confused when offered multiple choices for the sync format or pick the less optimal
              one.   In  such  a  case,  setting this property enforces that the preferred format specified with
              'syncFormat' is really used.

       database = evolutionsource (no default, shared)
              Picks one of the backend's databases: depending on the backend, one can  set  the  name  and/or  a
              unique identifier.

              Most backends have a default database, like for example the system address book.  Not setting this
              property selects that default database.

              If the backend is a virtual data datastore, this field must contain comma seperated  list  of  sub
              datasources  actually  used  to  store  data.  If your sub datastore has a comma in name, you must
              prevent taht comma from being mistaken as the separator by preceding it  with  a  backslash,  like
              this: database=Source1PartA\,PartB,Source2\\Backslash

              To  get  a  full  list  of  available  databases, run syncevolution --print-databases. The name is
              printed in front of the colon, followed by an identifier in brackets. Usually the name  is  unique
              and  can  be  used  to  reference  the  data  datastore. The default data datastore is marked with
              <default> at the end of the line, if there is a default.

       databaseFormat (no default, shared)
              Defines the data format to be used by the backend for its own  storage.  Typically  backends  only
              support  one  format  and  ignore this property, but for example the file backend uses it. See the
              'backend' property for more information.

       databaseUser = evolutionuser (no default, shared),  databasePassword  =  evolutionpassword  (no  default,
       shared)
              authentication  for backend data datastore; password can be specified in multiple ways, see SyncML
              server password for details

              Warning: setting database user/password in cases where it is not needed, as for example with local
              Evolution calendars and addressbooks, can cause the Evolution backend to hang.

EXAMPLES

       List the known configuration templates:

          syncevolution --template ?

       Create a new configuration, using the existing Memotoo template:

          syncevolution --configure \
                        username=123456 \
                        "password=!@#ABcd1234" \
                        memotoo

       Note  that putting passwords into the command line, even for short-lived processes as the one above, is a
       security risk in shared environments, because the password is visible to  everyone  on  the  machine.  To
       avoid  this,  remove  the  password from the command above, then add the password to the right config.ini
       file with a text editor.  This command shows the directory containing the file:

          syncevolution --print-configs

       Review configuration:

          syncevolution --print-config memotoo

       Synchronize all datastores:

          syncevolution memotoo

       Deactivate all datastores:

          syncevolution --configure \
                        sync=none \
                        memotoo

       Activate address book synchronization again, using the --sync shortcut:

          syncevolution --configure \
                        --sync two-way \
                        memotoo addressbook

       Change the password for a configuration:

          syncevolution --configure \
                        password=foo \
                        memotoo

       Set up another configuration for under a different account, using the same default databases as above:

          syncevolution --configure \
                        username=joe \
                        password=foo \
                        --template memotoo \
                        memotoo_joe

       Set up another configuration using the same account, but  different  local  databases  (can  be  used  to
       simulate synchronizing between two clients, see Exchanging Data:

          syncevolution --configure \
                        username=123456 \
                        password=!@#ABcd1234" \
                        sync=none \
                        memotoo@other

          syncevolution --configure \
                        database=<name of other address book> \
                        @other addressbook

          syncevolution --configure \
                        sync=two-way \
                        memotoo@other addressbook

          syncevolution memotoo
          syncevolution memotoo@other

       Migrate  a  configuration  from  the <= 0.7 format to the current one and/or updates the configuration so
       that it looks like configurations created anew with the current syncevolution:

          syncevolution --migrate memotoo

SYNCHRONIZATION BEYOND SYNCML

       In the simple examples above, SyncEvolution exchanges data with servers via the SyncML protocol. Starting
       with release 1.2, SyncEvolution also supports other protocols like CalDAV and CardDAV.

       These  protocols  are  implemented  in  backends  which  behave like local datastores. SyncEvolution then
       synchronizes data between a pair of backends. Because the entire sync logic (matching of items,  merging)
       is done locally by SyncEvolution, this mode of operation is called local sync.

       Some examples of things that can be done with local sync:

       • synchronize events with a CalDAV server and contacts with a CardDAV server

       • mirror  a  local  database  as items in a directory, with format conversion and one-way or two-way data
         transfer (export vs. true syncing)

       Because local sync involves two sides, two sync configurations are  needed.  One  is  called  the  target
       config.   Traditionally,   this   really   was   a   configuration   called  target-config,  for  example
       target-config@google. Using this particular name is no longer required.

       The target config can hold properties which apply to all datastores inside its context, like  user  name,
       password  and  URL for the server (more on that below) and sync settings (like logging and data backups).
       Once configured, the target config can be used to list/import/export/update items via  the  SyncEvolution
       command  line.  It  cannot  be  used  for  synchronization because it does not defined what the items are
       supposed to be synchronized with.

       For synchronization, a second originating config is  needed.  This  config  has  the  same  role  as  the
       traditional  SyncML  sync configs and is typically defined in the same implicit @default context as those
       configs. All configs in that context use the same local data, thus turning that local data into  the  hub
       through with data flows to all peers that the host is configured to sync with.

       A  sync  config  becomes  an originating config in a local sync by setting the syncURL to the special URL
       local://[<target config name>][@<some context name>]. This selects the target config to sync with. If the
       target  config  name  is  left  out,  the actual string target-config is used as name. The context can be
       omitted if the target config name is unique. Originating and target config can be in  the  same  context.
       Care must be taken to not use a datastore more than once in a local sync.

       In  addition,  peerIsClient=1  must be set in the originating config, because SyncEvolution only supports
       running the SyncML client on the target side. It makes sense to use the local  databases  on  originating
       side, because that side requires more frequent access to the data.

       The  originating  config defines the database pairs, either implicitly (by using the same datastore names
       on both sides, which is possible when different contexts are used) or explicitly (via the uri  properties
       set  for  the  datastores on the originating side). The originating config also defines the sync mode for
       each pair. uri and sync values on the target side are ignored and do not have to be specified.

       As a special case, datastores used in combination with the target config may access the  credentials  and
       syncURL stored there as fallback when nothing was specified for the datastores directly. This makes sense
       for the WebDAV and ActiveSync backends where the credentials are typically the same and (depending on the
       web server) the same start URL can be used to find calendar and contact databases.
          Warning:  when  setting  password  for  the  target  config and using a keyring, a syncURL or a unique
          remoteDeviceID string must be set, because they are needed to identify the host in the keyring.

       If this feature is not used, the syncURL could be left empty because local sync itself does not  use  it.
       However, the command line expects it to be set to none explicitly to detect typos.
          Warning:  because  the  client in the local sync starts the sync, preventSlowSync=0 must be set in the
          target config to have an effect.

CALDAV AND CARDDAV

       This section explains how to use local syncing for CalDAV and CardDAV. Both protocols are based on WebDAV
       and  are  provided  by the same backend. They share username/password/syncURL properties defined in their
       target config.

       The credentials must be provided if the server is password protected. The  syncURL  is  optional  if  the
       username is an email address and the server supports auto-discovery of its CalDAV and/or CardDAV services
       (using DNS SRV entries, .well-known URIs, properties of the current principal, ...).

       Alternatively, credentials can also be set in the databaseUser and  databasePassword  properties  of  the
       datastore.  The downside is that these values have to be set for each datastore and cannot be shared. The
       advantage is that, in combination with setting database, such datastores can be used as part of a  normal
       SyncML  server  or  client sync config. SyncEvolution then reads and writes data directly from the server
       and exchanges it via SyncML with the peer that is defined in the sync config.

       The database property of each datastore can be set to the URL of a specific  collection  (=  database  in
       WebDAV  terminology).  If  not set, then the WebDAV backend first locates the server based on username or
       syncURL and then scans it for the default event resp. contact  collection.  This  is  done  once  in  the
       initial  synchronization.  At  the  end  of  a  successful  synchroniation,  the automatic choice is made
       permanent by setting the database property.
          Warning: the protocols do not uniquely identify this default collection. The backend tries to make  an
          educated  guess,  but it might pick the wrong one if the server provides more than one address book or
          calendar. It is safer to scan for collections manually with --print-databases and then use the URL  of
          the desired collection as value of database.

       To scan for collections, use:

          syncevolution --print-databases \
                        backend=<caldav or carddav> \
                        username=<email address or user name> \
                        "password=!@#ABcd1234" \
                        syncURL=<base URL of server, if server auto-discovery is not supported>

       Configuration  templates for Google Calendar/Contacts, Yahoo Calendar and a generic CalDAV/CardDAV server
       are included in SyncEvolution. The Yahoo template also contains an entry for contact synchronization, but
       using it is not recommended due to known server-side issues.

       The  following commands set up synchronization with a generic WebDAV server that supports CalDAV, CardDAV
       and scanning starting at the root of the server.

          # configure target config
          syncevolution --configure \
                       --template webdav \
                       syncURL=http://example.com \
                       username=123456 \
                       "password=!@#ABcd1234" \
                       target-config@webdav

          # configure sync config
          syncevolution --configure \
                        --template SyncEvolution_Client \
                        syncURL=local://@webdav \
                        username= \
                        password= \
                        webdav \
                        calendar addressbook

          # initial slow sync
          syncevolution --sync slow webdav

          # incremental sync
          syncevolution webdav

       Here are some alternative ways of configuring the target config:

          # A) Server supports DNS auto-discovery via domain name in the username.
          syncevolution --configure \
                       --template webdav \
                       username=123456@example.com \
                       "password=!@#ABcd1234" \
                       target-config@webdav

          # B) Explicitly specify collections (from server documentation or --print-databases).
          #    The 'calendar' and 'addressbook' names are the ones expected by the sync config
          #    above, additional datastores can also be configured and/or the names can be changed.
          syncevolution --configure \
                       username=123456 \
                       "password=!@#ABcd1234" \
                       --template none \
                       syncURL=http://example.com \
                       addressbook/backend=carddav \
                       addressbook/database=http://example.com/addressbooks/123456/ \
                       calendar/backend=caldav \
                       calendar/database=http://example.com/calendar/123456/ \
                       target-config@webdav \
                       calendar addressbook

       When creating these target configs, the command line tool tries to verify that the datastores really work
       and  (in  the  case  of  --template  webdav) will enable only datastores which really work. This involves
       contacting the WebDAV server.

       Finally, here is how the @webdav context needs to be configured so that SyncML clients or servers can  be
       added to it:

          # configure datastores
          syncevolution --configure \
                       databaseUser=123456 \
                       "databasePassword=!@#ABcd1234" \
                       addressbook/backend=carddav \
                       addressbook/database=http://example.com/addressbooks/123456/ \
                       calendar/backend=caldav \
                       calendar/database=http://example.com/calendar/123456/ \
                       @webdav \
                       calendar addressbook

          # configure one peer (Memotoo in this example):
          syncevolution --configure \
                        username=654321 \
                        password=^749@2524 \
                        memotoo@webdav

          # sync
          syncevolution --sync slow memotoo@webdav

   Google + OAuth
       For Google there is no common start URL for CalDAV and CardDAV, therefore the "Google" template lists all
       that may be relevant and the setup is very similar to the generic webdav case, except  that  the  syncURL
       does not have to be specified:

          # configure target config
          syncevolution --configure \
                       --template google \
                       username=john.doe@gmail.com \
                       "password=!@#ABcd1234" \
                       target-config@google

          # configure sync config
          syncevolution --configure \
                        --template SyncEvolution_Client \
                        syncURL=local://@google \
                        username= \
                        password= \
                        google \
                        calendar addressbook

          # initial slow sync
          syncevolution --sync slow google

          # incremental sync
          syncevolution google

       If  your  Google  account  is  configured to use two-factor login, then you need to create an application
       specific password for SyncEvolution. See https://support.google.com/mail/answer/1173270

       Google already announced that they will turn off support for logging into their  CalDAV/CardDAV  services
       with  plain  username/password  credentials.  SyncEvolution  supports the new login method, OAuth, but it
       depends on additional components to implement OAuth: GNOME Online Accounts, Ubuntu  Online  Accounts,  or
       gSSO.

       Support  for  GNOME  Online  Accounts  (GOA)  is  compiled  into syncevolution.org binaries and therefore
       documented here. For  instructions  regarding  binaries  shipped  by  distributions  please  consult  the
       documentation provided by the distribution or search the web.

       For  Google  Calendar, GOA >= 3.8 is required. For Google Contacts, GOA 3.8 may work if it was patched by
       the distribution (as done in Debian Jessie), otherwise a version >= 3.10 is required.

       Use the GNOME Control Center to create an account for Google. It is not necessary to enable  any  of  the
       data  categories.  That  would  turn  on  access  in  other  GNOME apps (for example, Evolution), whereas
       SyncEvolution's use of the account is configured separately via the SyncEvolution command line.

       When configuring SyncEvolution for Google, follow the instructions above with username=goa:<Google  email
       address>  and  empty  password.   If  the  email  address does not uniquely identify the GOA account, the
       SyncEvolution command line will provide a list of accounts to choose from.

NOTES

   Exchanging Data
       SyncEvolution transmits address book entries as vCard 2.1 or 3.0 depending on the sync format  chosen  in
       the  configuration.  Evolution  uses 3.0 internally, so SyncEvolution converts between the two formats as
       needed. Calendar items and tasks can be sent and received in iCalendar 2.0 as well as vCalendar 1.0,  but
       vCalendar 1.0 should be avoided if possible because it cannot represent all data that Evolution stores.

       NOTE:
          The Evolution backends are mentioned as examples; the same applies to other datastores.

       How  the  server stores the items depends on its implementation and configuration. To check which data is
       preserved, one can use this procedure (described for contacts, but works the same way for  calendars  and
       tasks):

       1. synchronize the address book with the server

       2. create  a new address book in Evolution and view it in Evolution once (the second step is necessary in
          at least Evolution 2.0.4 to make the new address book usable in SyncEvolution)

       3. add a configuration for that second address book and the same URI on the SyncML server,  see  EXAMPLES
          above

       4. synchronize again, this time using the other datastore

       Now  one  can  either compare the address books in Evolution or do that automatically, described here for
       contacts:

       • save the complete address books: mark all entries, save as vCard

       • invoke synccompare  with  two  file  names  as  arguments  and  it  will  normalize  and  compare  them
         automatically

       Normalizing  is  necessary  because  the  order  of  cards  and  their  properties as well as other minor
       formatting aspects may be different. The output comes from a side-by-side comparison, but is augmented by
       the  script  so  that  the context of each change is always the complete item that was modified. Lines or
       items following a ">" on the right side were added, those on  the  left  side  followed  by  a  "<"  were
       removed, and those with a "|" between text on the left and right side were modified.

       The  automatic unit testing (see HACKING) contains a testItems test which verifies the copying of special
       entries using the same method.

       Modifying one of the address books or even both at the same time and then synchronizing  back  and  forth
       can  be  used  to  verify  that SyncEvolution works as expected. If you do not trust SyncEvolution or the
       server, then it is prudent to run these checks with a copy of the original address book. Make a backup of
       the .evolution/addressbook directory.

   Item Changes and Data Changes
       SyncML  clients and servers consider each entry in a database as one item. Items can be added, removed or
       updated. This is the item change information that client and server exchange during a normal, incremental
       synchronization.

       If  an  item  is  saved, removed locally, and reimported, then this is usually reported to a peer as "one
       item removed, one added" because  the  information  available  to  SyncEvolution  is  not  sufficient  to
       determine  that  this is in fact the same item. One exception are iCalendar 2.0 items with their globally
       unique ID: the modification above will be reported to the server as "one item updated".

       That is better, but still not quite correct because the content of the item has  not  changed,  only  the
       meta  information  about  it  which  is  used  to detect changes. This cannot be avoided without creating
       additional overhead for normal synchronizations.

       SyncEvolution reports item changes (the number of added, removed and  updated  items)  as  well  as  data
       changes.  These  data  changes  are  calculated  by  comparing database dumps using the synccompare tool.
       Because this data comparison ignores information about which data belongs to which item, it  is  able  to
       detect  that re-adding an item that was removed earlier does not change the data, in contrast to the item
       changes. On the other hand, removing one item and adding a different one may look like updating just  one
       item.

   Automatic Backups and Logging
       To  support  recovery from a synchronization which damaged the local data or modified it in an unexpected
       way, SyncEvolution can create the following files during a synchronization:

       • a dump of the data in a format which can be restored by SyncEvolution, usually a single file  per  item
         containing in a standard text format (VCARD/VCALENDAR)

       • a full log file with debug information

       • another  dump  of the data after the synchronization for automatic comparison of the before/after state
         with synccompare

       If the sync configuration property logdir is  set,  then  a  new  directory  will  be  created  for  each
       synchronization  in  that  directory, using the format <peer>-<yyyy>-<mm>-<dd>-<hh>-<mm>[-<seq>] with the
       various fields filled in with the time when the synchronization started. The sequence suffix will only be
       used when necessary to make the name unique. By default, SyncEvolution will never delete any data in that
       log directory unless explicitly asked to keep only a limited number of previous log directories.

       This is done by setting the maxlogdirs limit to something different than the empty string  and  0.  If  a
       limit  is  set,  then SyncEvolution will only keep that many log directories and start removing the "less
       interesting" ones when it reaches the limit. Less interesting are those where  no  data  changed  and  no
       error occurred.

       To  avoid  writing  any additional log file or database dumps during a synchronization, the logdir can be
       set to none. To reduce the verbosity of the log, set loglevel. If not set or 0, then the verbosity is set
       to  3  =  DEBUG  when  writing  to a log file and 2 = INFO when writing to the console directly. To debug
       issues involving data conversion, level 4 also dumps the content of items into the log.

ENVIRONMENT

       The following environment variables control where SyncEvolution finds files  and  other  aspects  of  its
       operations.

       http_proxy
              Overrides  the  proxy settings temporarily. Setting it to an empty value disables the normal proxy
              settings.

       HOME/XDG_CACHE_HOME/XDG_CONFIG_HOME
              SyncEvolution   follows   the   XDG   desktop   standard    for    its    files.    By    default,
              $HOME/.config/syncevolution  is  the location for configuration files.  $HOME/.cache/syncevolution
              holds session directories with log files and database dumps.

       SYNCEVOLUTION_DEBUG
              Setting this to any value disables the filtering of stdout and stderr that  SyncEvolution  employs
              to keep noise from system libraries out of the command line output.

       SYNCEVOLUTION_GNUTLS_DEBUG
              Enables additional debugging output when using the libsoup HTTP transport library.

       SYNCEVOLUTION_DATA_DIR
              Overrides the default path to the bluetooth device lookup table, normally /usr/lib/syncevolution/.

       SYNCEVOLUTION_BACKEND_DIR
              Overrides the default path to plugins, normally /usr/lib/syncevolution/backends.

       SYNCEVOLUTION_LIBEXEC_DIR
              Overrides the path where additional helper executables are found, normally /usr/libexec.

       SYNCEVOLUTION_LOCALE_DIR
              Overrides the path to directories with the different translations, normally /usr/share/locale.

       SYNCEVOLUTION_TEMPLATE_DIR
              Overrides the default path to template files, normally /usr/share/syncevolution/templates.

       SYNCEVOLUTION_XML_CONFIG_DIR
              Overrides    the   default   path   to   the   Synthesis   XML   configuration   files,   normally
              /usr/share/syncevolution/xml. These  files  are  merged  into  one  configuration  each  time  the
              Synthesis SyncML engine is started as part of a sync session.

              Note  that  in  addition  to  this directory, SyncEvolution also always searches for configuration
              files inside $HOME/.config/syncevolution-xml.  Files with the same relative path and  name  as  in
              /usr/share/syncevolution/xml override those files, others extend the final configuration.

BUGS

       See known issues and the support web page for more information.

SEE ALSO

       http://syncevolution.org

AUTHORS

       Main developer
              Patrick Ohly <patrick.ohly@intel.com>, http://www.estamos.de

       Contributors
              http://syncevolution.org/about/contributors

       To contact the project publicly (preferred)
              syncevolution@syncevolution.org

       Intel-internal team mailing list (confidential)
              syncevolution@lists.intel.com