The win left Wales on 15 points, with Scotland finishing third, France fourth, England fifth and Italy with the wooden spoon.
A game that started with such promise quickly petered out into a war of midfield attrition, two adequately solid defensive lines effectively nullifying the mediocre attacking qualities of either side.
Both fly-halves Dan Biggar and Francois Trinh-Duc failed to show little in the way of game management and the close, bruising encounter predicted by both coaches became a sore reality.
“We were just trying to limit the errors and keep hold of the ball. We wanted to finish this campaign like we started it, with a win, and we’ve done that,” Wales captain Alun Wyn Jones told BBC.
“Runners-up isn’t something we want. The way our games went we could’ve been going for a lot more but this last game we’ve displayed the character we need going forward.”
France coach Jacques Brunel expressed his disappointment at the result, bemoaning the fact it was “another match we could have won”.
“We weren’t the most efficient, but came up against a very strong Welsh defence,” he said.
Trinh-Duc got the scoreboard ticking with a snap drop-goal, but the fly-half gifted Liam Williams a try just a minute later.
The restart wasn’t gathered by the French forwards, the ball came back quickly on the Welsh side and a clever dink in behind the defence saw Trinh-Duc hopelessly beaten by the bounce of the ball and Williams on hand to pounce.
Halfpenny missed the conversion, but was on target with two penalties to extend the home side’s lead.
France hit back with a fantastic score through Gael Fickou, the winger finishing off a move started by fleet-footed hooker Adrien Pelissie, who was playing second division rugby with Aurillac just six months ago.
Pelissie span out of a Josh Navidi tackle, offloaded to Wenceslas Lauret who in turn found Fickou in space in midfield, the winger motoring in from 30 metres.
– Short-lived helter-skelter –
But the entertaining helter-skelter start couldn’t last forever as both sides tightened up their defences and frustratingly became more conservative in attack.
Pelissie went high on Tomas Francis, Halfpenny knocking over his third penalty, Machenaud failing with a three-pointer just before the break after Williams, who was yellow carded against Italy last week, needlessly took out a player off the ball.
A short-lived frenetic start to the second period saw Taulupe Faletau sprint clear down the left flank, Gareth Davies failing to gather his pass back infield with the line abegging.
Machenaud kicked a penalty to bring France within a point, but inexplicably spurned a chance to boot his team into the lead, Trinh-Duc instead going for the corner only to see his kick go dead.
The momentum had swung to the French side, even though a listless-looking Wales managed to limit them largely to between the two 10-metre lines.
Kiwi-born centre Hadleigh Parkes was a rock in the Welsh defence, dealing with barnstorming rival Mathieu Bastareaud, captaining France in the absence through injury of Guilhem Guirado, with aplomb.
Another mistake by Trinh-Duc, this time a forward pass under no pressure whatsoever, handed Wales a perfect attacking position, but their scrum creaked again and Marco Tauleigne charged back up the field.
Wales were penalised for coming in at the side of the resulting ruck, but Trinh-Duc — with Machenaud having been substituted — missed a sitter of a penalty to sum up his less than average afternoon on the paddock.
The final 10 minutes were predictably a tight affair, Halfpenny cutting down Remy Grosso with the tryline beckoning and France continuing to dominate possession.
A rare Welsh foray into the French 22m area was ended by Bastareaud winning a penalty at the breakdown, but the home side hung on for their 16th home victory in the Six Nations in 19 matches.
Download our app and read this and other great stories on the move. Available for Android and iOS.