Bangladesh captain Najmul Hossain Shanto won the toss and elected to bat first at the Singhalese Sports Club on Wednesday, but the visitors endured a nervous start, losing their first wicket with the total on five.
Opening batter Anamul Haque failed to capitalise on a reprieve when Sri Lankan wicketkeeper Kusal Mendis dropped him off fast bowler Asitha Fernando, but he was soon dismissed by the same bowler without scoring.
Mominul Haque and Shadman Islam shared a promising partnership of 38 but Sri Lankan captain Dhananjaya de Silva removed Mominul (21), caught by substitute fielder Pawan Rathnayak, to leave the visitors 2-71 at lunch.
Sri Lanka took two quick wickets after lunch as Fernando had Shanto, who scored centuries in each innings in the first Test in Galle, caught behind by Mendis for eight.
Off-spinner Tharindu Rathnayake then had Shadman caught by de Silva for 46, the highest score of the innings, leaving Bangladesh 4-76.
Sri Lanka missed out on another wicket when Lahiru Udara dropped Mushfiqur Rahim in the deep on eight.
Rahim and Litton Das then shared 67 for the fifth wicket to steady Bangladesh's innings.
Das (34) edged a catch to Mendis and Vishwa Fernando didn't miss out on a second chance given by Rahim (35) in the deep. Dinusha ended with 2-22.
Allrounder Dinusha, who made his Test debut for Sri Lanka after the retirement of senior allrounder Angelo Mathews after the first Test, has scored 2478 runs in 48 first-class matches and averages more than 40. He's also taken 99 first-class wickets.
Fast bowler Milan Rathnayake was left out of the line-up because of injury and left-arm paceman Vishwa Fernando has taken his place. Bangladesh allrounder Mehidy Hasan Miraz, who missed the first Test with injury, returned in the place of Jaker Ali.
A long rain stoppage meant only 71 overs were bowled on the opening day and on day two the match will start 15 minutes early.
The first Test, played in Galle, ended in a draw.