James Anderson took six wickets to help bowl Sri Lanka out for 381, but England's openers failed again as the tourists closed the second day of the second and final Test on 98 for two in reply at Galle International Stadium on Saturday.
Joe Root scored a breezy, unbeaten 67 and will resume on the third morning with Jonny Bairstow, who has 24.
The pair have put on 93 for the third wicket at a rate of more than four runs per over to dig the tourists out of some early strife.
Sri Lanka left-arm spinner Lasith Embuldeniya (2-33) quickly bagged the wickets of England openers Dom Sibley (0) and Zak Crawley (5), maintaining his dominance over the pair having also dismissed them in both innings in the first Test.
Sibley was trapped leg before wicket and Crawley edged to first slip. The two have managed just 28 runs in six innings between them this series, a worry for the tourists as they head to India for four Tests on completion of this match.
Bairstow and Root employed the sweep to excellent effect as a counter-attack measure, the latter having also punished Sri Lanka with the stroke in his 228 in the first Test.
It took England 139.3 overs to finally dismiss the home side after they elected to bat, with Anderson the chief wicket-taker with 6-40 in 29 overs.
Sri Lanka had frustrated the tourists with their tail, the final four wickets adding 138.
Anderson removed centurion Angelo Mathews (110) early in the day after a review by Root for a caught behind that nobody else seemed particularly interested in.
But any thoughts that it would precipitate a Sri Lanka collapse were ended by strong innings from Niroshan Dickwella (92) and Dilruwan Perera (67).
Left-hander Dickwella was denied a first Test century when he tried to launch a wider Anderson delivery over mid-off but was caught in that position by a diving Jack Leach.
Fast bowler Mark Wood (3-84) was also among the wickets as he ensured a Test debut duck for Ramesh Mendis and induced an edge from Lasith Embuldeniya to Root at first slip.
Perera was the last man out, caught in the deep by Leach off Sam Curran. It was the first time that all 10 wickets in an innings have fallen to seamers in Galle.
England won the first Test at the same venue by seven wickets.