Two late wickets boosted England after a Mahela Jayawardene century for Sri Lanka had put the visitors in trouble in the second Test.
James Anderson took three wickets from his first five overs, although Jayawardene and Thilan Samaraweer went on to lead the Sri Lankan resistance, hitting 124 between them before Jaywardene was removed by Graeme Swann.
This is a must-win match for England if they are to maintain their position at the top of the Test world rankings and, despite Jayawardene's resistance, they are in a decent position at the end of day one.
Anderson was in particularly fine form for England and removed Tillakaratne Dilshan, who had tormented the tourists with some great attacking play, when the batsmen edged the ball into the hands of Matt Prior.
He then took Kumar Sangakkara with his first ball, with Andrew Strauss juggling the catch but holding on for a morale-boosting wicket, and next to fall was Lahiru Thirimanne, who was caught lbw.
By this stage of the match the home side were slipping out of the contest, but Jayawardene smashed their way back into it, surviving a scare on 79 when he edged toward Strauss.
England's resolve held firm as Jayawardene passed a hundred, however, and Swann's removal of the centurion, followed by the wicket of Prasanna Jayawardene leaves England in a position they can feel contented with at the end of day one.