Off-spinner Ravichandran Ashwin claimed six for 46 as India skittled out Sri Lanka for 183 in two sessions on the opening day to take upper hand in the first Test at Galle.
In reply, the visitors lost two early wickets but recovered to reach 128-2 at stumps, trailing Sri Lanka by 55 runs.
Opener Shikhar Dhawan (53) and captain Virat Kohli (45) were unbeaten at the crease, having added 100 runs for the third wicket.
Lokesh Rahul (seven) and Rohit Sharma (nine) were both out leg-before as India were reduced to 28-2 but Dhawan, dropped on 28 by captain Angelo Mathews off Tharindu Kaushal, and Kohli steadied the innings to keep the tourists on course for a big first innings lead.
Earlier, Mathews (64) was the top-scorer for Sri Lanka while wicketkeeper Dinesh Chandimal contributed 59 after the hosts' decision to bat in the first match of the three-Test series backfired.
Off-spinner Ashwin finished with his 11th five-wicket haul in Tests, while leg-spinner Amit Mishra picked up two wickets in successive balls in his return to Test cricket after four years.
Retiring batting stalwart Kumar Sangakkara did not last long in his penultimate Test and fell to Ashwin's third delivery of the morning.
The lanky off-spinner extracted enough turn and bounce from the surface to fox Sangakkara and Lokesh Rahul pouched a sharp catch at silly point.
Kohli, leading the side for the first time in a full series, went in with five bowlers, including three spinner while the hosts also included an extra spinner in Rangana Herath.
Sri Lanka 183 all out (Mathews 64, Ashwin 6-46)
India 128-2 (Dhawan 53*, Mathews 1-12)