Spinner Ramesh Mendis took three wickets to put Sri Lanka in command of the second Test on Monday despite a fighting 62 by Pakistan batsman Agha Salman.
Tourists Pakistan, who lead the two-match series 1-0, ended day two on 191-7, still trailing Sri Lanka by 187 runs in their first innings in Galle.
Salman resisted the bowling attack with his maiden Test fifty but fell to Prabath Jayasuriya's left-arm spin in the final moments of play before stumps was called.
Jayasuriya got Salman caught at slip with a drifter coming into the right-handed batsman.
Salman, who made his debut in the previous match, put on 46 runs with Yasir Shah, batting on 13, to lift Pakistan from 145-6. He expects the lower-order to fire come day three.
"The way the partnership was going, we wanted to see off the day and come back tomorrow to start afresh, but it's cricket and it happens," said Salman.
"Disappointed, but still we have enough batters who can utilise the situation and add to the total," he added.
"They were bowling well, to be very honest, and they were not giving runs, that's why they took the wickets. They were playing patient games and we lacked that."
Pakistan suffered from a lack of partnerships after losing first-match hero Abdullah Shafique for a duck and skipper Babar Azam for 16 on either side of the lunch break.
Jayasuriya, who took 21 wickets in his first two Tests, bowled Azam on a turning delivery that got the edge of the dangerman's bat to crash onto the stumps.
Imam-ul-Haq attempted to rebuild the innings with Mohammad Rizwan but Dhananjaya de Silva broke through with his off-spin to send back Imam on 32.
De Silva is standing in as captain in place of Dimuth Karunaratne, who did not take the field in the Pakistan innings because of back pain.
Rizwan hit a few boundaries to counterattack but Ramesh trapped him lbw for 24 and a review failed to save the wicketkeeper-batsman.
Ramesh also claimed Fawad Alam (24) and Mohammad Nawaz (12) for figures of 3-42.
- Dickwella blitz -
Pakistan had lost opener Shafique, who hit a match-winning 260 in the first Test, when he inside-edged a delivery from Asitha Fernando onto his stumps.
Wickets kept tumbling but all-rounder Salman, who went wicketless in his six overs during Sri Lanka's innings, played the spinners on the front foot until his departure.
Sri Lanka had resumed the day on 315-6 in former captain Angelo Mathews' landmark 100th Test, with overnight batsman Niroshan Dickwella making 51 and a useful cameo of 35 by Ramesh at number nine.
Dickwella, who started the day on 42, hit six fours and one six in his 54-ball knock and believes the pitch will improve for batters in time for their second innings.
"Our bowlers bowled really well and that's why we were able to get to seven wickets today," he told reporters. "Tomorrow it will be a good wicket to bat."
Fast bowler Naseem Shah and leg-spinner Yasir claimed three wickets each to end Sri Lanka's innings in the first session.