Though you wrote Synchronization must be over USB cable or BlueTooth, not over the cloud. – I've taken this as strong wish for privacy, not explicitly excluding WiFi, so I hope the following is OK for you:
For this I use ownCloud on my Ubuntu machine, and DAVDroid on my Android devices (for alternatives, see below).
ownCloud requires a web server with PHP (5.4+; the latest versions want 5.5+, but still work with 5.4) and a database (minimal: SQLite, I use it with MySQL), which are available from the standard repositories. As a side effect, I not only can manage my calendars and contacts via a web interface, but – depending on my needs – also have additional features available, such as "cloud storage" (enabled by default) and even document management (including an basic editor), plus tons of ownCloud apps to chose from.
I chose DAVDroid as it's "one app to rule them both" (calendars and contacts), and it's available for free via F-Droid. There's still much room for improvements (e.g. when adding a new calendar/address book, one has to re-create the account on the Android device – but as I rarely do that, it doesn't affect me too hard). Apart from that, it works flawlessly for me, so I can recommend this combination.
New contacts/calendar items added via the Android device immediately get sync'd to ownCloud. The other way around might take a little, depending on how the sync on the Android device is set up; when in a hurry, you can trigger a sync manually, though. With the ownCloud standard calendar, you cannot manage reminders via the web interface (when done via the Android app, reminders get synced fine to other Android devices, though); if that's a show-stopper to you, take a look at the "plus suite" with alternative calendar, contacts, and task apps.
On the Ubuntu side, not only Thunderbird works with those, I primarily use them with Evolution. For more details, please be welcome to also read my article on Android without Google 2: ownCloud.