How to play DVDs on virtually any GNU/Linux distro
by Terrell Prude', Jr.
A few years ago, my folks bought and sent me two DVDs as a gift, but
the only DVD player I have is in my Linux-based computer. Using the
free software application MPlayer, I was able to watch my DVDs. I'll walk you through the easy steps required.
When I first wrote this HOWTO in mid-2004, I originally used Slackware
GNU/Linux v10.0 on an AMD Athlon, but the techniques apply to any
distro on x86 hardware and even to BSD-based operating systems.
Further, everything except for the extra codecs package also applies to
GNU/Linux on non-x86 platforms, such as PowerPC. I've since done this
procedure on Slackware GNU/Linux versions 10.2 through 12.2, Yellow Dog Linux 4.0 through 6.0,
CentOS 4.2 and 5.0, lots of Fedora releases, Ubuntu 6.06 through 8.04, Debian
GNU/Linux 4.0 and 5.0, and (with slight tweaks) OpenBSD 4.0.
Why would we do it this way when we have repositories like RPMForge and
Debian/Ubuntu Universe or Multiverse? Simple. Not everyone is running those
distros. And what happens if the RPM/DEB package maintainers get tired of
doing the packaging? What will you do then? Yes, this kind of thing has
happened in the past. Finally, I've discovered that sometimes options are
left out that (for my hardware) should be there...or options that should
not be there (e. g. OSS on a distro that supports ALSA)...got
compiled in. The only real way to fix that is to compile your own.
I'll assume here that you are a user of GNU/Linux, that you're running
the X Window System with some window manager (it doesn't matter which),
that you know how to get to a command prompt and do basic directory
navigation and file manipulation, and that you know what a symbolic
First, you'll need a sound card -- any sound card that works
with your operating system -- and a decent video board -- anything from
an ATI 3D Rage Pro onward. You really don't need more than 4MB video
RAM unless you use screen resolutions of 1152x864x32 bits or more. I
currently use a Matrox Marvel G400TV, but MPlayer worked great with an
ATI Xpert98 as well. Yes, I know, these are now viewed as "old", but
they still work well. So yes, you can do this with an "older" video card.
You'll need a decent CPU, but unless you're watching the really hi-def
stuff, it doesn't need to be the latest quad- or hex-core super-powerhouse.
Far from it. On my 2GHz Athlon (the 2400+ model),
shows about 17% CPU usage with anything of standard DVD resolution.
Given this, you ought to be fine with, say,
a 1GHz Intel Celeron, especially if it's the Tualatin variety, and a
1GHz AMD Duron should be even better. That means that yes, that
multi-core, uber-supercharged CPU that you likely just bought will
certainly be quite enough!
Have at least 256MB of DRAM if you're running either GNOME 2.x
(I originally wrote this using GNOME 2.6) or KDE 3.x (I currently use
KDE 3.5), so you don't swap to disk and slow down your box during video
playback. As always, if you can afford it, go for more; my box back in
2004 originally had 512MB DRAM. Today, that same box has 1.5GB DRAM.
Just about all modern boxes these days come with at least 1GB, and very
often with 2GB, so for all
practical purposes, this is no longer a concern.
Finally, you will, of course, need at least a DVD-ROM drive.
Mine is, like most built today, a combination DVD/CD-RW drive with an
ATAPI interface. It is plugged into the secondary IDE channel as the
master. I also have a SCSI CD-RW drive in this box which, while
obviously not used for DVDs, did have a small device-naming effect,
which I'll explain later.
I've used these hardware components myself with success,
including the 1GHz Celeron Tualatin. You can probably go lower, but I
wouldn't recommend it. Not that that's likely, anymore, given today's
hardware, but I keep this admonishment here for completeness, in case
someone is doing it on what is now considered an "older" box.
For software, to begin with, you'll need some general-purpose
GNU/Linux distribution. For the BSD folks out there, I know that
MPlayer works nicely on FreeBSD and OpenBSD, because I've tried it via
the ports system. While I haven't yet watched DVD's on FreeBSD, I have
done so on OpenBSD. With all versions of Slackware GNU/Linux, I
did a "full" install, to ensure I had all the header and other "dev"
files necessary for compilation.
You will need the software to actually play multimedia.
Slackware comes with Xine, but the included Xine segment-faults when I try
to play my legally purchased DVDs, so, unfortunately, the stock Xine
will not work for this purpose. This is true of most distros sold in
countries influenced by the Motion Picture Association of America's
SCO- and Microsoft-like behaviour when it comes to DVDs on free
software. Thus, I chose something that has that ability built-in:
MPlayer, from the great nation of Hungary.
the latest version of the MPlayer source code and, if you're on an x86
machine, the "essential" pack of codecs, which will allow you to play
Windows Media and certain other proprietary formats. These codecs are
not necessary to play DVDs, but they do make MPlayer a much more
generally useful tool. To play DVDs, you should download a fonts
package (I use Arial-Western-ISO-8859-1, since I'm an English speaker),
at least one "skin," which is an absolute necessity to run the GUI
version of MPlayer.
The recommended way to get MPlayer is to pull from the Subversion repository, like so:
$ svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/
I do this in a subdirectory (I used /home/microman/Downloads) to keep things organized.
For those of you who've been using MPlayer for a while, you might
remember when we had to download something called FFMPEG and install it
manually via some not-exactly-intuitive UNIX magic. Thankfully, that is
no longer the case, as FFMPEG is now integrated with MPlayer. All you
need to do, therefore, is download the MPlayer source, and you get both
MPlayer and FFMPEG.
If you're familiar with Mozilla or XMMS skins, then MPlayer skins are
the same idea. Note that there is no "default" skin, so you have
to download a skin if you want to use the GUI version of MPlayer. I
recommend this for playing DVDs, though you can use the command line
version as well.
Put all of these in your "scratch" directory (again, I used /home/microman/Downloads) and untar them all, like so:
$ tar -xvjf codecs-essential-20061006.tar.bz2
$ tar -xvjf font-arial-iso-8859-1.tar.bz2
$ tar -xvjf skin-phony-1.1.tar.bz2
|What about the MPAA and RIAA?|
|You may wonder about the legality of all this,
and it's a valid question. I am not advocating that anybody break the
laws of their countries or localities. As "DVD Jon" Johansen
discovered, the MPAA and RIAA like to whine, complain, and threaten
criminal legal action against people in certain countries simply for
playing DVDs using free software, claiming that merely by watching our
legally purchased DVDs, we are "criminals" and "stealing" their "intellectual property."
First, let's dispel this notion that copyright infringement is theft in
the United States, despite the repeated bleatings of the MPAA and RIAA.
The Supreme Court ruled in 1985 that copyright infringement is in fact
not theft, in the case of Dowling vs. the United States. Yep, it's
true; look it up. That said, the vast majority of us are honest and pay
for our stuff, fair and square. This article is about watching your
legally purchased DVD's, not about how to infringe copyright. My Dad is a professional musician,
and I know plenty of other great jazz musicians, so I certainly don't
condone copyright infringement. If you want to "pirate" music or
movies, may I suggest you get a job?
After I watched "The Matrix Reloaded," I enjoyed the movie enough to go
out and buy the sequel, "The Matrix Revolutions." Yes, I actually went
out and bought another DVD with cold, hard cash, when otherwise I
wouldn't have done so. Makes sense; if I can't watch a DVD in the first
place, why in Galileo's name would I go out and buy one?
Thus, the ability to play DVDs on free software actually
resulted in more profit for Warner Bros. It's a win-win situation,
because the studios make money, and I get to watch cool movies, all on
the up-and-up. The MPAA and RIAA should stop this silliness over region
specificity and copy protection and just get on with producing more
great content for us to buy.
Putting it together
Now that you have all the software, you need to make it ready
for use. MPlayer requires that the other three things that we
downloaded and untarred be set up before you deal with MPlayer itself.
We'll do that, starting with the codecs. Just run the following
commands, as root. We assume you're in your "scratch" directory here:
# cp essential-20061006/ /usr/local/lib/codecs/You
need to make sure that your permissions are 644 or 664, with owner as
root:root. Slackware appears to apply, by default, permissions of 640
to files when you're root; this is actually good security practice.
# chmod 644 /usr/local/lib/codecs/*
# chown root:root /usr/local/lib/codecs/*
mv instead of
cp also works.
Now for the skin, still as root. Note that the MPlayer directions used
to say to simply copy the contents of the skin directory into
/usr/local/share/mplayer/Skin/default. That has now changed. They now
go into /usr/local/share/mplayer/skins/default. This matters if you
want to run MPlayer in graphical mode. If the skin files aren't in this
location, then MPlayer won't find the skin, and the GUIfied MPlayer
will not start, though the command-line version will still work fine.
Since we want the GUIfied MPlayer too, we do the following:
# mkdir /usr/local/share/mplayer/skins/
# cp phony/* /usr/local/share/mplayer/skins/default/
# chmod 644 /usr/local/share/mplayer/skins/default/*
# chown root:root /usr/local/share/mplayer/skins/default/*
phony/ subdirectory name is not a typo; the skin that I chose is actually called "Phony," and it looks rather cool.
Now for the fonts (actually typefaces, for those of you who
know better). MPlayer looks for them, by default, in
/usr/local/share/mplayer/font. There's a trick here as well, because
when you untarred the fonts tarball, you actually got four
subdirectories along with the README. Each of these directories
represents the Arial typeface at a different font size. At my
resolution of 1152x864, I chose the 18-point size. The best thing to do
is to move the entire fonts subtree and do a symlink to the font size
that you want. Here's how I did it:
# mv font-arial-iso-8859-1/ /usr/local/share/mplayer/
Make sure your ownership and permissions are what they need to be:
# cd /usr/local/share/mplayer
# ls -l font-arial-iso-8859-1
-rw-r--r-- 1 root root 218 2003-07-13 20:02 README-arial-iso-8859-1
drwxr-xr-x 2 root root 4096 2003-07-13 19:42 font-arial-14-iso-8859-1
drwxr-xr-x 2 root root 4096 2003-07-13 19:42 font-arial-18-iso-8859-1
drwxr-xr-x 2 root root 4096 2003-07-13 19:42 font-arial-24-iso-8859-1
drwxr-xr-x 2 root root 4096 2003-07-13 19:42 font-arial-28-iso-8859-1
# ln -s font-arial-iso-8859-1/font-arial-18-iso-8859-1 font
# chmod -R 755 font-arial-iso-8859-1/
Your directory listing should now look like this:
# chown -R root:root font-arial-iso-8859-1
# ls -l
Preparing and installing MPlayer
drwxr-xr-x 3 root root 4096 2004-08-21 20:23 skins
lrwxrwxrwx 1 root root 47 2004-08-21 20:41 font -> font-arial-iso-8859-1/font-arial-18-iso-8859-1/
drwxrwxr-x 6 root root 4096 2003-07-13 20:02 font-arial-iso-8859-1
At this point, you're ready to tackle
MPlayer itself. Exit out of root mode, because, for security reasons,
you don't ever want to compile apps as root:
|Want to install a video accelerator driver for
added performance or to lower CPU usage? It is not strictly necessary,
unless you're on an older box -- a 400MHz Pentium II, for instance --
and you want to avoid skipping. If things are working for you, you
probably don't need to worry about it.
I decided to try adding a video accelerator driver with
Slackware 10.0. The process is, by necessity, specific to each system's
video card. I use a Matrox Marvel G400TV, which is just a Millenium
G400 with a TV tuner. MPlayer comes with the source code for mga_vid,
which is the driver for Matrox cards. I changed to the drivers
subdirectory of the MPlayer source code directory, and ran
make install. That builds the driver, and now we actually activate it with this command, as root:
# insmod mga_vid mga_ram_size=16
If you're running a 2.6 kernel, this may work better for you:
# modprobe mga_vid mga_ram_size=16
This inserts the driver into your kernel, telling the driver that your
video card has 16MB of video RAM. Note that you should put this in your
system startup scripts if you want the driver to automatically get
loaded on your next reboot. On most GNU/Linux systems, it would go in
your /etc/rc.d/rc.local file.
Once you do this, you also, I discovered, need to change the
permissions on the /dev/mga_vid device node from 660 to 666 to make it
world-writeable. I believe that this is because MPlayer needs to be
able to write directly to that device node itself, since I'm using the
special Matrox accelerator driver.
For ATI cards, head over to http://gatos.sourceforge.net/
and follow the directions. They've got a set of binaries for X11,
depending on your version. I had trouble with XFree86 4.2.0, but 4.1.0
and 4.3.0 worked nicely for me. I haven't personally tried the ATI
drivers with either X.org or a newer XFree86, as I switched to the
Matrox card a while back. You do not need to set any special
permissions on any device nodes with the ATI cards as you do with the
For other video cards, I don't know; I just haven't tried it.
Read the MPlayer documentation. It's in the man pages and on their Web
site and actually is fairly decent.
MPlayer is installed. It will look for DVDs in /dev/dvd, which, on my
system, is a symlink to /dev/sr0. Make sure that this symlink is
pointing to the right device! In my case, I have both a SCSI card with
a SCSI CD-RW on it and an ATAPI DVD/CD-RW drive. It turned out that, on
my system, the SCSI CD-RW was seen first by the SCSI subsystem code in
the Linux kernel. If you're running a Linux 2.4 kernel, then ATAPI
CD-RW drives, including those with DVD playing functionality, require
that you throw the
$ cd mplayer/
$ ./configure --enable-gui
$ su root
# make install
parameter in your /etc/lilo.conf (or, for GRUB users,
/boot/grub/menu.lst) file during the operating system install. They are
then treated as SCSI devices, which is required if you want to burn
CD-Rs. This is not true if you're running a 2.6 kernel; IDE devices
are treated differently under Linux 2.6, and the device name is
something like /dev/hdc or /dev/hdd.
Here's how the device mapping ended up in my machine, running the 2.4 kernel:
/dev/sr0 = the SCSI CDRW drive.
/dev/sr1 = the ATAPI DVD/CDRW drive.
However, Slackware made both the /dev/dvd and /dev/cdrom symlinks point
to /dev/sr0 instead of /dev/sr1. I simply moved the /dev/dvd symlink to
point to /dev/sr1.
I also had to tweak the permissions on /dev/sr1 (again, this
may be, say, /dev/hdd on Linux 2.6). In every GNU/Linux distribution
I've used, the device nodes for DVD drives are set to permissions of
660, with owner root. This is fine if you're running Linux 2.6.
However, if you're running Linux 2.4, that permissions setting won't
allow you to play DVDs -- you've also got to set world-readable
permissions on your DVD device node (in my case, /dev/sr1):
# chmod 664 /dev/sr1
On a 2.6 kernel, you don't need to do this.
You're now ready to run MPlayer and play a DVD. Since we compiled the GUI version of MPlayer, you simply type
to start the program. Pop your DVD in, click the DVD button in MPlayer,
and have fun. And remember, The Matrix is watching you...Mr. Anderson....
Possible Display Bug Alert!
I have recently experienced a bug, relating to some versions of X.org, which can cause problems with using the "Xv" video output driver. Others have encountered it as well. Apparently, over certain horizontal resolutions (576 pixels, I think), MPlayer will produce a solid blue video output and repeatedly output an error message claiming "not enough resources". This is confirmed to be an X.org bug, not an MPlayer bug, as the problem affects all video players, e. g. Xine or GXine.
If you are experiencing this issue, then try using a different video output driver from within MPlayer, just as a test. I used "-vo gl2" to specify the newer OpenGL driver. It uses more CPU, but it did fix the problem. The VESA driver ("-vo vesa"), while very slow, should also work with all video cards. In my case, I have a Matrox Marvel G400TV video board (basically a Millenium G400 with a TV tuner), so I am able to use the "mga" video output driver, which also solves the problem and uses virtually no CPU.
Another possible remedy is to compile either an slightly older version of X.org (http://www.x.org), or perhaps XFree86 (http://www.xfree86.org). This is a somewhat more involved step, but I've compiled XFree86/X.org before, and it actually is not difficult. Just remember to back up your /usr/X11R6 directory first, and yes, that means before you begin.
Copyright (c) 2004-2007 Terrell Prude', Jr.
Permission is granted to copy, distribute, and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license can currently be found at the following address:
Free Software Foundation
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301
United States of America
or on the Foundation's Web site, http://www.gnu.org/.
Last updated on June 28, 2009
Back to Homepage