That's why I've started quite some time ago to write a small C wrapper around libdvdread to first copy the DVD files onto the disk and then read them from there. It was also an easy solution to copy files to a driveless netbook to watch the DVD there. With time, this project evolved into a neat C++ command-line utility that's able to keep track of badly read sectors and come back to them later.
~ ./configure ~ make ~ make install
Using it is as simple as running:
~ dvdcopy /dev/dvd MyMovieDirectory
If everything went fine, you're set, and you can open the directory created with
~ xine dvd://`pwd`/MyMovieDirectory
xine needs the full path, I haven't checked with VLC, but from what I remember, you can open DVD directories directly from a menu).
If you're not that lucky and
dvdcopy found some bad sectors, try reading again using
~ dvdcopy --second-pass /dev/dvd MyMovieDirectory
I found that in many cases, one or two second passes get all the sectors back. While that wasn't really the intended purpose, the fact that most copy protection schemes (in addition to CSS) are implemented using bad sectors make
dvdcopy quite resistant to them.
I have no plan of making a Debian package for it at the time being, but if there is demand for that, I may reconsider. Enjoy !