Kusal Mendis scored an unbeaten half-century to steady the Sri Lankan innings after Bangladesh struck early blows on the opening day of the first Test in Galle on Tuesday.
Mendis was batting on 80 as the hosts reached 155-3 by tea after fast bowler Mustafizur Rahman removed Dinesh Chandimal in the post-lunch session.
Chandimal managed to score just five runs despite facing 54 balls before edging a catch to Mehedi Hasan at gully.
It left Sri Lanka reeling at 92-3 but Mendis revived the innings with an unbroken 63-run partnership with Asela Gunaratne for the fourth wicket. Mendis has so far faced 139 balls and struck 11 fours.
In-form batsman Gunaratne, who replaced injured regular skipper Angelo Mathews in the starting lineup, was unbeaten on 26 at the break.
Stand-in skipper Rangana Herath won the toss and opted to bat but the visitors struck in the sixth over when Roy beat Tharanga with a perfect inswinger to uproot his middle stump.
Roy thought he had removed Mendis off the next ball when wicketkeeper Liton Das dived to his right to take a catch from an inside edge.
Replays however showed the bowler had overstepped, prompting the umpires to declare it a no ball.
Mendis and Karunaratne put on 45 runs for the second wicket before Bangladesh's 19-year old spinner Mehedi struck, bowling Karunaratne through the gates.
Bangladesh omitted left-arm spinner Taijul Islam from their side after the selectors opted for a three-man pace attack, including the injury-plagued Mustafizur, who is playing his first Test since August 2015.
Liton was keeping wickets for the tourists after captain Mushfiqur Rahim handed him the gloves in order to concentrate on his batting.
The hosts went in with three spinners, meaning the all-rounder Dhananjaya de Silva missed out after playing the last Test during Sri Lanka's recent tour of South Africa.
The second Test, which will be Bangladesh's 100th, will be held in Colombo from March 15-19.