Skipper Angelo Mathews and opener Kaushal Silva hit half-centuries to help Sri Lanka take a 166-run first innings lead against Pakistan and push for a series-levelling victory on day two of the second Test on Friday.
Pakistan leg-spinner Yasir Shah (5-95) claimed his second successive five-wicket haul but the visitors sorely missed the service of pace spearhead Wahab Riaz who will miss the series with a fractured hand.
Rangana Herath was batting on 10, while Dushmantha Chameera was yet to open his account when rain forced stumps with the hosts on 304 for nine.
Shah, 29, became the fasTest from his country to the 50-wicket club in Test cricket, achieving the feat in only his ninth match.
Shot out for 138 in their first innings, Pakistan received a jolt when Riaz, nursing a hand injury sustained while batting, was ruled out of the rest of the series, taking much of the sting off his team's pace attack.
Resuming on 70 for one, Sri Lanka lost Kumar Sangakkara (34) before reaching the 100-run mark after the southpaw played a lofted shot off left-arm spinner Zulfiqar Babar and Asad Shafiq ran backwards to take a good catch at long on.
Pakistan's improved catching also sent back Lahiru Thirimanne who offered a bat-pad catch off Shah and an alert Azhar Ali pouched it at short leg in his second attempt.
Shah dismissed Dinesh Chandimal and Kithuruwan Vithanage cheaply after lunch, having also been involved in Kaushal Silva's (80) run out that pegged back Sri Lanka.
Mathews and Silva added 72 runs to steady the innings before a miscommunication led to the opener being run out after a patient 218-ball knock that included 10 boundaries.
Mathews then added 73 runs with Dhammika Prasad (35), who fell to part-time off-spinner Mohammad Hafeez, to consolidate his team's position.
Former captain Hafeez, who has been reported twice since November for a suspect action, faces a 12-month ban if a new assessment finds his action illegal.
Shah, who took seven second innings wickets at Galle to set up Pakistan's comprehensive victory in the first Test, trapped Mathews leg before and dismissed Tharindu Kaushal to claim his third five-wicket haul.