I've decided to dedicate a page to PSX emulation under Linux.
In my experience, PSX emulation is quite a bit more flaky in Linux than it is in Windows. To make stuff work, you have few options. And hardware requirements are a little strict. My guide presumes the following:
- You're running Debian or Ubuntu Linux, no other distro. My guide may work in other distros, or it may not. I've only tested it with Debian and Ubuntu. Follow at your own risk. (I have been told my guide works in Fedora as well.)
- You have an NVIDIA card with their proprietary drivers installed. Sorry, ATI people. I can't help you.
Now that that's out of the way, we'll jump right in.
- ePSXe seems to work well, but the controller configuration only lets you use the keyboard. For me this rules out ePSXe, so I use PCSX.
- For some reason, sometimes launching the PCSX binary in KDE/GNOME doesn't quite work right. (Missing logo/configs and whatnot.) If this happens to you, then you must launch PCSX from the terminal. cd /wherever/my/pcsx/folder/is then ./pcsx and you're good to go.
- If when you try to load a plugin's config screens and they do not appear, try running it from the terminal. If the terminal output says something like error while loading shared libraries: libgtk-1.2.so.0: cannot open shared object file: No such file or directory, then you need to sudo apt-get install libgtk1.2.
- If when you initially launch PCSX it says 'PCSX needs to be configured' and then just closes, try running it from the terminal. If the terminal output when it closes says libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory, then you need to sudo apt-get install libstdc++2.10-glibc2.2. (Fedora users: yum install compat-libstdc++-296. Thanks to Matthew for the tip.)
- I tried out all the GPU plugins thoroughly, and Pete's MesaGL Driver seems to be the fastest, most accurate, highest quality one.
- Unfortunately, Pete's MesaGL GPU plugin has severe issues with doing fullscreen. In the image below, PCSX is shown loading the BIOS in fullscreen mode. The red lines represent the visible screen area, proportional to the rest of my desktop. (For the record, no, this has nothing to do with my NVIDIA TwinView setup. I disabled the TwinView setup and tested it again to make sure and got the exact same results.)
(Click for full size)
It looks like Pete's MesaGL Driver does fullscreen by simply removing the window border, maximizing the window, drawing the game screen at the desired resolution in the top left corner, changing the screen resolution, and moving the monitor viewport to the top left corner. This isn't real fullscreen, it's fake fullscreen and is subject to number of compatibility issues. For one, the gnome-panel at the top of my screen is forcing the maximized pseudo-fullscreen PCSX window down several pixels. Secondly, the viewport is not fixed. The resolution of the X11 session is still in fact 2880x1200, and you can move anywhere within this much larger real estate simply by moving the mouse. In some ways this can be an advantage though. You could use the mouse to carefully recenter the viewport over the game screen so that it's not cut off anymore. But that's annoying. And it won't work anyway... here's why:
(Click for full size)
After PCSX is done doing its BIOS thing, Pete's MesaGL Driver moves the game screen to the bottom left of the viewport, for some odd reason. And since gnome-panel is forcing the absolutely sized PCSX window down several pixels, the bottom of the game screen is cut off once again. And this time no amount of recentering with the mouse can help you. What you can do, is move all your gnome-panels to the bottom of your screen and set them to auto hide. If you do that, then use your mouse to recenter the game screen to the bottom after you load PCSX, you can have a totally full screened PCSX with nothing cut off. Note: If you select a full screen resolution that is exactly the same as your monitor's current resolution, you won't need to recenter with the mouse. Also, if you use KDE, you shouldn't have to worry about its panel (kicker) doing this kind of stuff. But if your fullscreen resolution is smaller than your monitor's normal resolution, you will have to do the recentering stuff. Finally, another workaround you can use is to use P.E.Op.S. SoftX Driver. It does the same fake fullscreen nonsense that the Pete's MesaGL Driver does, but it also automatically (yay!) centers centers the viewport to where it needs to be, and don't pull any shenanigans on you moving the game screen around the viewport. It doesn't lock it there though. If you move the mouse while playing, you will reveal gnome-panel. See below.
Even with this, P.E.Op.S. SoftX Driver is still the much more convenient option so long as you don't touch the mouse once you go fullscreen. But personally I think Pete's MesaGL Driver looks and performs leaps and bounds better, and I'd rather play it windowed, or deal with its funny fullscreen behavior then use the more convenient, but less pretty, and slower P.E.Op.S. SoftX Driver instead.
- Given only two choices for SPU plugins, Eternal's and P.E.Op.S. OSS Audio Driver, I was forced to use P.E.Op.S. OSS Audio Driver when Eternal's wouldn't work. Luckily, P.E.Op.S. OSS Audio Driver works nicely.
- There is a special thing you must do to get Pete's plugins to work correctly. You must place the plugins (the .so files) in the plugins directory, but you must place the binary configuration programs in the root emulator directory, with the emulator binary. Otherwise, the emulator cannot configure the plugins.
- For input plugins, both Omnipad and padJoy are fine plugins. But you have to compile Omnipad yourself, whereas padJoy is already compiled for you, making padJoy the easier of the two to use.
- There is a special thing you must do to get padJoy to work though. Like Pete's plugins, padJoy's config program needs to be moved somewhere (else) special. You must create a /cfg directory in your emulator's root folder. Place the plugin in the emulator's plugins folder, but place the binary configuration program in the /cfg directory you created. If you do not do this, the plugin will not work.
- Of all the CD Image plugins I tried, only the Mooby2 cd disk image driver worked correctly.
- In PCSX, you may not use a bios file that has spaces in it. Remove all the spaces from your psx bios files.
- PCSX seems to hate long UNIX paths. Originally I had my PCSX in /home/kethinov/software/console/psx/emulators/linuxx86/pcsx and things didn't work right. When I moved it to /home/kethinov/pcsx things worked correctly.
- PCSX by default creates a configuration file in your home directory representing your settings named Pcsx.cfg. This annoyed the piss out of me, because every other UNIX program under the sun makes that a hidden file, so you never have to bloody see it there constantly. Luckily though, PCSX is open source. If you hate unhidden config files as much as I do, you can download the PCSX source and replace the LnxMain.c with my hacked version of LnxMain.c in PcsxSrc-1.5/Linux. My hack changes the config file from Pcsx.cfg to .pcsx.cfg. Once you have replaced the LnxMain.c, simply cd /path/to/PcsxSrc-1.5/Linux then ./configure then make. You should get no errors doing that. If you do, you don't have gcc, libgtk or some of the other deps you need. Check the PCSX documentation for the list of deps, or you can simply download my precompiled binary. Both the binary and source hack are use at your own risk stuff etc, etc, ad nauseum.
- Last but most certainly not least, I've found that once you load a game into PCSX, if you press escape and load a different game, it will occasionally lockup X forcing you to reboot. To prevent this, if you want to load a different game, close PCSX and reopen it.
To download emulators and plugins, check out ngemu.com. To download games, psx bios images, or learn how to make uncopyprotected CD images, google for a site less legal than mine.
Alternatively, you can download my custom PCSX build designed for easy PCSX deployments on Linux systems. It contains PCSX 1.5 and every known Linux input, gpu, and spu plugin is properly installed. I compiled omnijoy for you, and I included my hidden config file patch. This package should contain everything you need to play PSX games in Linux. All you need to do is supply a BIOS image (don't ask me for one...) and pick which plugins you want to use, then load a game!
My PCSX packages are third party. Assembled without permission from the various authors. Any complaints from copyright holders should be directed to me personally.
Good luck with your Linux (x86) PSX emulation!