Synchronise system changes on two computers?

I have two computers with Ubuntu 10.10 on them, a desktop and a laptop. I have two options for handling them:

  • try and keep them the same
  • accept that they have different 'personalities' and branch off their on way

However, I've chosen the first option because I like to keep my files and settings the same on both computers.

I an in the process of extracting a tar archive I made of my entire desktop's hard drive (9.7GiB) onto my laptop, so after this is done they will be exactly the same.

However, upon turning the laptop on with my freshly-copied system, things will become different.

If I take the laptop to school, for example, and do stuff there, then come back home, and do stuff on my desktop, how can I sync these computers (both ways!) with the new changes at the end of the day/week/whatever?


This is a complex issue, and there isn't a one-size-fits-all answer. In fact, there are two questions here: what to synchronize, and how to synchronize it. There are many factors at play: convenience (having it all happen automatically), expressivity (how finely can you tune which files get synchronized), robustness (if you accidentally create two versions of a synchronized file, will you notice), resilience (if you have two versions of a synchronized file, how do you merge them back), availability (what happens when the Internet isn't working optimally), ...

What to synchronize

  • System configuration: Just don't bother. The things you're most likely to change at the system level are likely to be specific to one computer (e.g. tuning your laptop's battery life/performance compromise). Installing a package is easy enough that automatic synchronization of installed packages wouldn't buy you much. (But if you install a program manually as opposed to through the packaging system, it falls under “user configuration”.)

  • User configuration: This is a thornier issue. There is definitely a gain in synchronizing your customizations. However many programs store their data in such a way that you can't simply keep the same configuration file on both machines, even when the program version is the same. For example, most browser preferences should be synchronized, but there's little point in synchronizing the browser cache.

    Some programs have configuration files that support conditional settings, for example to select different window sizes or different keyboard shortcuts on the laptop and on the desktop. Then you just write a slightly more elaborate configuration file and synchronize it.

    Some programs have a built-in synchronization mechanism, and it will be a lot simpler to set up than whatever generic mechanism you otherwise use. Firefox in particular has extensions to synchronize the relevant bits of a profile.

  • Personal documents: They should be synchronized. This one is a no-brainer.

  • Large data: Ideally, you'd be able to access all your data from anywhere. But the size of a typical music or movie collection often means you have to keep a small, usually changing selection on your laptop.

How to synchronize

  • Dropbox: Dropbox is an online synchronization service. It's the preferred synchronization method on Ubuntu. It's online (all data goes via Dropbox's servers), you can't just plug your laptop into your desktop if you don't have an Internet connection.

    Dropbox has a number of advantages that often make it the best solution: it's got a friendly GUI, it's very easy to set up, it doesn't require that the two machines be online simultaneously, synchronizing more than two machines is seamless. The downsides are minor for many people but can be a show-stopper: you need Internet connectivity, you need to trust Dropbox not to go bust, there is a limit on data size (currently 2GB for free).

  • Unison: Unison lets you synchronize directories on two machines. It requires connectivity between the two machines, so you can synchronize your laptop with your desktop at home even if your ISP is down. If you have intermittent Internet connectivity, you can use both Unison and Dropbox on the same files.

  • Distributed version control: If you have some files under version control, there is no point in synchronizing them. Synchronizing the repositories with a general-purpose mechanism is possible but a recipe for trouble. The right tool is a distributed version control system (bazaar, darcs, git, mercurial, ...).


it's not the system part that needs syncing in your case (it also makes no sense since they are in fact two different pieces of hardware... it would just break your system sooner or later)

what you want to sync is probably only your /home folder (which keeps your application configuration files) or some parts of it (i.e. desktop folder or you could make "mysyncfolder" (to keep the files you want to sync) or something like that)... check dropbox, it's probably the best solution for your needs