Match ends, Northern Ireland 1, Luxembourg 0.
Northern Ireland beat Luxembourg 1-0 thanks to first-half own goal
A calamitous own goal by Luxembourg defender Kevin Malget gave Northern Ireland a 1-0 win in a drab friendly.
Malget headed into his own net in the first half of a match that was livened up slightly after the break by the introduction of in-form Linfield striker Shayne Lavery.
Cardiff City defender Ciaron Brown, drafted in from the U21 squad, made his debut in an experimental NI line-up.
NI play Germany in a crucial Euro 2020 qualifier at Windsor Park on Monday.
The 1-0 victory stretches Northern Ireland's winning run to five matches after they won all of their four opening Euro 2020 qualifiers.
- O'Neill pleased with 'a lot of aspects' of NI performance
- All the action as it happened from NI's friendly win over Luxembourg
The home fans did their best to add some life to a friendly that started slowly and always had the look of a match that was being played by a home team that was selected by O'Neill with Monday's Euro 2020 qualifier in mind.
Alfie McCalmont and Ethan Galbraith, also promoted from Ian Baraclough's Under-21 squad, both came on in the second half for their senior international debuts, while captain Steven Davis also came on to equal Aaron Hughes' appearance record for outfield players.
Northern Ireland's goal came from the head of visiting defender Malget in the 37th minute from a Jordan Thompson corner.
George Saville headed it across goal from the back post and, when home keeper Anthony Moris punched clear under pressure from Tom Flanagan, Malget somehow contrived to find the top corner of his own net when trying to head clear.
Whyte and Lavery liven up pedestrian performance
The goal came towards the end of a flat first half in which Northern Ireland's only real shining light was the industry and pace of Gavin Whyte down the right wing.
The Cardiff City wide man, who got a move to the Championship club in the summer after an impressive debut season with Oxford United, dropped deep at times to pick up the ball and run at his marker, although his runs failed to create any clear-cut chances.
Linfield striker Lavery got a warm welcome when he came off the bench to replace Kyle Lafferty in the 59th minute.
His barnstorming runs have lit up Windsor Park during Linfield's Europa League run and he was soon producing them in a green shirt, hitting the side netting with a shot from the first one before cleverly cutting the ball back to Thompson who blazed over the bar from a good position.
Brown busy on surprise debut
On a night when O'Neill was always expected to name an experimental side, nobody could have predicted young Cardiff City defender Ciaron Brown to start at centre-half.
The London-born defender was drafted into the senior squad from the Under-21 panel and lined up in the centre of the home defence alongside Tom Flanagan, who himself was winning only his second cap.
Brown delivered a fine long pass through to Josh Magennis early on, and won a flick-on in the opposition box that almost fell to the Hull City striker in front of goal, but he was also caught in possession a few times when he tried to take too much time on the ball.
Maurice Deville took it off him down the Luxembourg right and almost broke into the box, while the 21-year-old was also a bit over-ambitious when looking to spray long balls from the back.
Flanagan was alongside him in what must have been one of NI's most inexperienced centre-half pairings ever, with Jonny Evans and Craig Cathcart left out of the squad with the Germany match on Monday in mind.
Youngsters get chance as O'Neill uses squad
O'Neill made no secret ahead of kick-off of the fact that he was going to use this match to give as many of his squad players as much international experience as possible.
Donnelly and Lavery joined Flanagan in winning their second cap, while Jordan Thompson delivered a steady performance in the centre of the park on what was his third Northern Ireland appearance.
Midfielders George Saville and Corry Evans - who captained the side at home for the first time - played and will both be hoping for a starting place against Germany, while Conor McLaughlin filled in at right back for the injured Michael Smith.
It is five wins from five for O'Neill's men, whose preparations will now intensify as they prepare to welcome the Germans to Belfast on Monday when the starting line-up will have a very different look.
- 1Peacock-FarrellSubstituted forMcGovernat 67'minutes
- 4FlanaganBooked at 90mins
- 13EvansSubstituted forDonnellyat 68'minutes
- 16ThompsonSubstituted forDavisat 88'minutes
- 6SavilleSubstituted forMcCalmontat 60'minutes
- 18WhyteSubstituted forGalbraithat 88'minutes
- 21MagennisBooked at 82mins
- 10LaffertySubstituted forLaveryat 60'minutes
- 1MorisSubstituted forSchonat 45'minutes
- 4MalgetSubstituted forHallat 45'minutesBooked at 84mins
- 14SinaniSubstituted forAlves Da Motaat 74'minutesBooked at 81mins
- 15ThillSubstituted forBohnertat 85'minutes
- 16Barreiro MartinsSubstituted forPhilippsat 73'minutes
- 17RodriguesSubstituted forat 90+4'minutes
- 21DevilleSubstituted forTurpelat 60'minutes
- 9Alves Da Mota
- Shots on Target
Second Half ends, Northern Ireland 1, Luxembourg 0.
Corner, Northern Ireland. Conceded by Lars Gerson.
Attempt blocked. Shayne Lavery (Northern Ireland) right footed shot from the left side of the box is blocked. Assisted by Ethan Galbraith.
Gerson Rodrigues went off injured after Luxembourg had used all subs.
Laurent Jans (Luxembourg) wins a free kick on the right wing.
Foul by Josh Magennis (Northern Ireland).
Tom Flanagan (Northern Ireland) is shown the yellow card for a bad foul.
Gerson Rodrigues (Luxembourg) wins a free kick in the attacking half.
Foul by Tom Flanagan (Northern Ireland).
Foul by Chris Philipps (Luxembourg).
Liam Donnelly (Northern Ireland) wins a free kick in the defensive half.
Substitution, Northern Ireland. Ethan Galbraith replaces Gavin Whyte.
Substitution, Northern Ireland. Steven Davis replaces Jordan Thompson.
Substitution, Luxembourg. Florian Bohnert replaces Olivier Thill.
Attempt missed. Vincent Thill (Luxembourg) left footed shot from outside the box misses to the left. Assisted by Gerson Rodrigues following a fast break.
Tim Hall (Luxembourg) is shown the yellow card for a bad foul.
Foul by Tim Hall (Luxembourg).
Shayne Lavery (Northern Ireland) wins a free kick in the attacking half.
Attempt missed. Dirk Carlson (Luxembourg) left footed shot from outside the box misses to the right.
Attempt blocked. Vincent Thill (Luxembourg) left footed shot from outside the box is blocked.
Josh Magennis (Northern Ireland) is shown the yellow card for a bad foul.
Laurent Jans (Luxembourg) wins a free kick in the defensive half.
Foul by Josh Magennis (Northern Ireland).
Daniel Alves Da Mota (Luxembourg) is shown the yellow card for a bad foul.
Foul by Daniel Alves Da Mota (Luxembourg).
Shayne Lavery (Northern Ireland) wins a free kick in the defensive half.
Attempt blocked. Daniel Alves Da Mota (Luxembourg) left footed shot from outside the box is blocked. Assisted by Laurent Jans.
Foul by Chris Philipps (Luxembourg).
Jordan Thompson (Northern Ireland) wins a free kick in the attacking half.
Attempt saved. Liam Donnelly (Northern Ireland) right footed shot from the centre of the box is saved in the centre of the goal.
Foul by Dirk Carlson (Luxembourg).
Liam Donnelly (Northern Ireland) wins a free kick on the right wing.
Foul by Vincent Thill (Luxembourg).
Shane Ferguson (Northern Ireland) wins a free kick on the left wing.
Attempt missed. Jordan Thompson (Northern Ireland) left footed shot from the centre of the box is high and wide to the right. Assisted by Shayne Lavery.
Substitution, Luxembourg. Daniel Alves Da Mota replaces Danel Sinani.
Substitution, Luxembourg. Chris Philipps replaces Leandro Barreiro.
Attempt missed. Gerson Rodrigues (Luxembourg) right footed shot from the right side of the box misses to the left. Assisted by Leandro Barreiro.
Attempt missed. Liam Donnelly (Northern Ireland) right footed shot from outside the box is high and wide to the right following a set piece situation.