After last week's 32-3 humiliation in Nice, the Scots made 14 changes, with only fullback Stuart Hogg retained in what looked a much stronger starting XV.
A week ago they conceded a try after 25 seconds and they were 7-0 down again after two minutes on Saturday as winger Damian Penaud snatched an interception from Peter Horne and ran 50 metres to score under the posts.
France were also gifted their second try after 27 minutes after Scotland flyhalf Finn Russell failed to gather a high kick. Gael Fickou cut loose before feeding Penaud to score his second -- Thomas Ramos slotting his second conversion.
Scotland had barely threatened but finally struck at the end of the first half with a turnover score finished off by Sean Maitland to make it 14-10 at halftime.
The game was then something of a mess until the hour mark when Scotland finally built up some pressure at the line and centre Chris Harris timed his run on to a Greig Laidlaw pass perfectly to blast through.
France will be hugely disappointed with how they failed to get a foothold in the game in the second half, struggling to deliver cohesion through forwards or backs.
Scotland showed more ambition, though their execution was often sloppy, and they ended up looking the more dangerous team as the game became more open.
Despite the scruffy nature of the game, the sun-drenched home fans were happy to acclaim the win, though Scotland's celebrations were tempered by what looked a potentially serious leg injury to lock Sam Skinner, who was helped off after 65 minutes.
Scotland now have two matches against Georgia on Aug. 31 and Sept. 6 to fine-tune their preparations before they face a formidable first game of the World Cup against Ireland in Yokohama on Sept. 22.
France, still looking miles away from a settled unit capable of going deep into the World Cup, complete their warm-up campaign against Italy at home next weekend as they build towards their own crunch opener against Argentina in Pool C, which also contains England.