Thousands of people had been expected at the protest on Wednesday organised by a group of opposition parties. But riot police prevented opposition leaders and others from joining the rally, which the authorities had banned, witnesses said.
Dozens of people holding banners ran through the streets to escape police wielding batons and shields. Police sped in trucks through central Khartoum, dispersing any crowd attempting to demonstrate.
Mariam al-Mahdi, spokesperson of the opposition Umma party, said: "We asked for permission from the authorities to hold this demonstration, but they refused to give it to us.
"This is the excuse they used today for the actions to prevent us from demonstrating."
Aljazeera staffer attacked
A Reuters witness saw riot police snatch a TV camera from an Aljazeera journalist filming the crowd. The police chased him, beating him with sticks. A Reuters' vehicle was hit by one of many tear gas canisters fired by police.
"The oil we have goes straight into the government's pockets and not to the people. People need democracy - this is just the beginning"
Sarah Lugdallah, a protester
At least seven lorries filled with soldiers drove around the capital in a show of force.
The government has recently announced that it will reduce petrol and sugar subsidies to fill a hole in this year's budget.
Shouting "no to the rise in prices", one group of protesters managed to march to within a few hundred metres of the capital's Republican Palace before riot police stopped them and arrested the men, witnesses said.
One protester, Sarah Lugdallah, said: "We are here to demonstrate peacefully. The oil we have goes straight into the government's pockets and not to the people. People need democracy - this is just the beginning."
Sudan produces about 330,000 barrels of crude a day.
Mahdi said that four of the demonstration's organisers were arrested by security forces early in the morning.
The march coincided with a government-organised protest against the deployment of UN forces in its war-torn Darfur region. That demonstration of about 1,000 people was allowed to take place nearby.