The Royals snapped a two-game skid and raised their record to 17-4-1. The White Sox are 10-8-1.
Right-hander Luis Mendoza, resuming his pursuit of the Royals' No. 5 rotation spot, worked five shutout innings and gave up four singles. He struck out four and walked one.
White Sox right fielder Jordan Danks went 2-for-2 off Mendoza and later drew a walk, raising his average to .333 (10-for-30). Paul Konerko and Blake Tekotte had the other hits off Mendoza.
Mendoza was making his first start since his work with Mexico in the World Baseball Classic. Mendoza lowered his ERA to 0.82 in three games. His primary competitor is left-hander Bruce Chen, who has a 7.90 ERA in four Cactus League outings.
"It feels pretty good. Even if I didn't pitch in eight days, my arm rested and that helped me to keep in shape," Mendoza said. "I think I'm 100 percent ready and I'm just trying to keep the same rhythm and keep working hard."
In the first inning, the Royals batted around against right-hander Zach Stewart and scored four runs on a walk and five hits, all singles. Eric Hosmer, Billy Butler and Jeff Francoeur each drove in one run.
Butler added an RBI single off Stewart in the second inning and Alex Gordon drilled a two-run single off reliever David Purcey in the third. All seven runs in the first three innings were charged to Stewart, who surrendered eight hits and three walks and saw his ERA jumped from 1.13 to 6.75.
Up next: The White Sox will take their final day off in Arizona on Monday before playing the Reds in Goodyear on Tuesday at 3:05 p.m. CT, broadcast live on Gameday Audio. Jake Peavy and Nate Jones will pitch in a simulated game against Los Angeles Dodgers Minor leaguers Monday at 12:00 p.m. CT in Glendale, while John Danks will get the start Tuesday. Chicago catcher Tyler Flowers was scratched from the lineup Sunday but could return to game action against Cincinnati.