bsnes-emu / bsnes

bsnes is a Super Nintendo (SNES) emulator focused on performance, features, and ease of use.
Other
1.64k stars 154 forks source link

Running in Linux? #230

Closed cheekylions closed 2 years ago

cheekylions commented 2 years ago

Sorry if this is the wrong place to put this. I am running Linux Mint and trying to get bsnes Ubuntu running, but the 'executable' doesn't open, even when I tell Linux to allow it to execute as a program. It says it can't find the program to open it. I've been able to get the Windows version working alright with WINE, but it would be nice to be able to run the Linux version ya'll have spent good time getting together. Thanks!

Screwtapello commented 2 years ago

It's possible there's some system library that bsnes needs that isn't available on your Mint installation because no other program has needed it yet.

If you run this command in the terminal, it should install all the things bsnes needs:

sudo apt-get install libgtk2.0-0 libpulse0 libcairo2 libsdl2-2.0-0 libxv1 libao4 libopenal1 libudev1

If you're familiar with the terminal, you can use the ldd command to discover what libraries an application like bsnes uses:

$ ldd ~/.local/bin/bsnes 
    linux-vdso.so.1 (0x00007fff12531000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f6fe37ba000)
    libgtk-3.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-3.so.0 (0x00007f6fe2f8c000)
    libgdk-3.so.0 => /usr/lib/x86_64-linux-gnu/libgdk-3.so.0 (0x00007f6fe2e87000)
    libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f6fe2e35000)
    libcairo.so.2 => /usr/lib/x86_64-linux-gnu/libcairo.so.2 (0x00007f6fe2d10000)
    libgdk_pixbuf-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007f6fe2ce2000)
    libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f6fe2c86000)
    libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f6fe2b52000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f6fe2acb000)
    libXv.so.1 => /usr/lib/x86_64-linux-gnu/libXv.so.1 (0x00007f6fe28c6000)
    libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007f6fe27bf000)
    libao.so.4 => /usr/lib/x86_64-linux-gnu/libao.so.4 (0x00007f6fe27b4000)
    libpulse.so.0 => /usr/lib/x86_64-linux-gnu/libpulse.so.0 (0x00007f6fe275d000)
    libpulse-simple.so.0 => /usr/lib/x86_64-linux-gnu/libpulse-simple.so.0 (0x00007f6fe2756000)
    libSDL2-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0 (0x00007f6fe25c7000)
    libudev.so.1 => /usr/lib/x86_64-linux-gnu/libudev.so.1 (0x00007f6fe259e000)

The output on your machine will probably look different (much longer, for example), but it means the application needs the library on the left of the =>, and it's going to satisfy that need with the file named on the right. For example, my copy of bsnes needs libX11.so.6, and it's going to satisfy that need with the file /usr/lib/x86_64-linux-gnu/libX11.so.6.

If any line says "not found" instead of a file, that's a library that's missing. You should be able to figure out what library to install with apt-file. For example, if libao.so.4 were missing, you could run:

$ apt-file search libao.so.4
libao4: /usr/lib/x86_64-linux-gnu/libao.so.4
libao4: /usr/lib/x86_64-linux-gnu/libao.so.4.1.1

...to discover that libao4 is the package that provides those libraries, so sudo apt install libao4 should fix that problem.

Alcaro commented 2 years ago

Exception: linux-vdso.so.1. It's kernel magic; it doesn't exist on your filesystem, nor is it supposed to. Ignore it in ldd output, only check for other missing =>s. (If you want to know more, google it.)

cheekylions commented 2 years ago

I appreciate your responses! I have run the apt-get command you recommended and it said they all were at the newest version already and didn't install anything new.

I did the "ldd" command as well (I didn't know that existed! Definitely going in the old brainasium) and none of the files listed stated that "not found" beside them. It seems they were all located just fine.

Besides the linux-vdso.so.1, there was one other that similarly didn't have the "=>" indicator.. "/lib64/ld-linux-x86-64.so.2" from the libc6 library, but that's already listed as being up-to-date.

Screwtapello commented 2 years ago

Hm, if you run bsnes from the terminal (rather than by double-clicking on it in the file-manager), do you get any error message?

cheekylions commented 2 years ago

I just tried "./bsnes" in terminal and it boots. Still not from Nemo though.

Screwtapello commented 2 years ago

Well, that's weird. I'm afraid I don't know what to suggest.

Screwtapello commented 2 years ago

I guess modern Linux distros don't like the idea of distributing apps as a simple archive anymore.

Apparently Linux Mint includes support for the Flatpak distribution format, so you might be able to install the latest stable build of bsnes from FlatHub: https://flathub.org/apps/details/dev.bsnes.bsnes

cheekylions commented 2 years ago

That works, too!

Alternatively, since I have several scripts that pair with different versions of bsnes, I discovered I could just create a bash file in my bsnes folders called run-bsnes with the following code:

#!/bin/bash
./bsnes

Which gives me a "display file or run?" dialog, but ultimately does what it's supposed to.

Still frustrated that it should just work, but apparently this has been a problem with Nemo/Nautilus for years now with no sign of going away. At some point I'll have to switch to something more advanced.

Thanks for all your help!

Alcaro commented 2 years ago

Which gives me a "display file or run?" dialog

You can remove that prompt with a .desktop file. Here's an example.

cheekylions commented 2 years ago

You can remove that prompt with a .desktop file. Here's an example.

Hmm. I tried a few variations of that code on my system for bsnes but I can't get it working.

cheekylions commented 2 years ago

Ok, I figured it out. I was trying to use relative paths which .desktop files don't like.