Skip to content

[🐧] GNU+Linux compatibility progress #1430

Description

@YoshiRulz

edit 2026-07-20: Locking this thread so no-one can ping 50 users at once. There aren't many new Linux-only bugs anyway, and you can always open a new issue.

jump to known bugs

Overview:

  • Nothing on this page applies to the (discontinued) macOS port.
  • Build instructions are in the readme. tl;dr: run Dist/BuildRelease.sh.
  • "Installation" instructions are also in the readme. tl;dr: run output/EmuHawkMono.sh.
    • No Wine required! If you get it working in Wine, good for you, but I'm going to ignore you and hide any counter-productive comments.
  • 40-ish of 45-ish systems can be emulated, with the notable exception of N64 (Mupen64Plus isn't available, and the experimental Ares64 core is too slow).
  • For casual players, most things work as they would on Windows.
  • For TASers, most things work as they would on Windows.
  • For glitch hunters and romhackers, everything sucks and I'm sorry. But if a core is available on Linux, and the core implements the necessary services for a tool, then it should be at least functional.
  • Before 2.10:
    • Command-line flags to EmuHawkMono.sh are passed through as expected. The single exception is if you pass --mono-no-redirect as the first flag, which disables redirecting stdout/stderr to EmuHawkMono_last*.txt (the default behaviour is to write to disk instead of the terminal).
    • When it inevitably crashes, some errors go to the terminal/EmuHawkMono_last*.txt, some appear in dialog boxes, some both. Most of these error dialogs will either have a "Copy" button, or will allow Ctrl+C.

As of 2.10.1, the following systems can be emulated:

  • 3DO with Opera (I don't have roms --yoshi)
  • 3DS with Encore
  • Amiga with UAE
  • Apple II with Virtu
  • Arcades with MAME
  • Atari 2600 with Atari2600Hawk or Stella
  • Atari 7800 with A7800Hawk
  • Atari Jaguar with VirtualJaguar
  • Atari Lynx with Handy
  • Channel F with ChannelFHawk (I don't have roms --yoshi)
  • ColecoVision with ColecoHawk
  • Commodore 64 with C64Hawk (loads to BASIC prompt, at least --yoshi)
  • DOOM with DSDA-Doom
  • Game Boy and GBC with Gambatte, GBHawk, or SameBoy
  • GBA with mGBA
  • Intellivision with IntelliHawk
  • Magnavox Odyssey² with O2Hawk
  • MS-DOS/Win9x with DOSBox-X
  • MSX with MSXHawk
  • N64 with Ares64
  • N64DD with Ares64 (I don't have roms --yoshi)
  • Neo Geo Pocket / Color with NeoPop
  • NES/Famicom plus FDS with NesHawk or QuickNes
  • Nintendo DS with melonDS
  • Nintendo Virtual Boy with Virtual Boyee
  • PC Engine / TG-16 and SuperGrafx plus CD with HyperNyma, PCEHawk, or TurboNyma
  • PC-FX with T.S.T.
  • PSX with Nymashock
  • PSP with PPSSPP (I had troubles with it during the PR phase --yoshi)
  • Sega 32X with PicoDrive
  • Sega CD with Genplus-gx
  • Sega Game Gear with SMSHawk
  • Sega Genesis / Mega Drive with Genplus-gx
  • Sega Master System with SMSHawk
  • Sega Pico with Genplus-gx (I don't have roms --yoshi)
  • Sega Saturn with Saturnus
  • Sega SG-1000 SMSHawk
  • SNES/SFC with BSNES, Faust, or Snes9x
  • Super Game Boy with Gambatte or BSNES
  • TI-83 with Emu83 or TI83Hawk (see "Issues with TI83Hawk" below)
  • TIC-80 fantasy console with TIC-80 reference implementation
  • Uzebox fantasy console with Uzem
  • Vectrex with VectrexHawk
  • WonderSwan / Color with Cygne
  • ZX Spectrum with ZXHawk
  • Anything else via Libretro cores (provided they don't crash)

Activity

  1. YoshiRulz commented on Jan 7, 2019

    @YoshiRulz
    ContributorAuthor

    Issues with EmuHawk

    Startup issues:

    • Gtk not found (missing LD_LIBRARY_PATH to libgtk-x11-2.0.so.0?), using built-in colorscheme—see ignored GTK theme below.
    • Unable to locate theme engine in module_path: "adwaita" seems to be a harmless error, but can be resolved by installing gnome-themes-extra.

    Misc. issues:

    • Mono seemingly ignores the GTK theme... on my machine >:( (Others have reported mono/mono#20078 dark theme being inconsistently applied). As a result, everything is an ugly beige, and some icons in e.g. open file dialogs are missing. Hope you remember which is the parent directory button!
      • THEMING UPDATE 2024-09: Some work has been put into making the default not so ugly, but hopefully the "correct" light theme can be installed and coerced to load as was done for NixOS in 9a2c163. Users who were affected by mixed dark/light theme have had success with the GTK_DATA_PREFIX='' ./EmuHawkMono.sh workaround, so perhaps that could be applied by default.
      • There was a tiny amount of work put into making the mixed dark/light theme usable (b967e60), but EmuHawk was designed for a light theme. Please report if you're affected by the mixed dark/light theme, but don't report individual instances of illegible text for example—those are wontfix.
    • I think file extensions are case-sensitive on Mono. The rom loader dialog doesn't recognise my .32X file as a rom. fixed in f8a688d
    • (unthrottled) FPS triples when window unfocused. Is input slowing it down? who knows --yoshi
      • actually I can't repro this --yoshi at 25a5449
      • dwango repro'd this on stream. still no idea why it happens. --yoshi
      • Still can't repro, no change when swapping out OpenTKInputAdapter for a DummyInputAdapter --yoshi at 24f69eb
      • Repro'd on NixOS, both on 2.9.1 and at ebe3cad, though it's a very small difference in Release config. --yoshi
      • It's just defocusing MainForm, by the way, you can have the Lua Console or Virtual Pad focused to get the speedup
    • Keyboard shortcuts in RAM Watch don't work. ToolStripMenuItem.ShortcutKeys isn't working at all.
      • Just looked into this again with TAStudo and ProcessCmdKey isn't even being called. --yoshi at 681ef72
    • Menubar mnemonics are disabled. Past me did it to prevent a crash, needs retesting. --yoshi at 03d10ce
      • enabled on MainForm as of 28d62e6
      • not working on other Forms --yoshi at 28d62e6
      • probably same cause as ShortcutKeys --yoshi at 681ef72
    • Some file open dialogs cause a ArgumentOutOfRangeException in System.DateTimeOffset.FromUnixTimeSeconds(long). --yoshi at 03d10ce
    • In IToolFormAutoConfigs, Settings > Stay on Top correctly writes Window.KeepAbove = !item.Checked, but does not read the actual value i.e. toggling keep-above via the WM does not change the checkbox's state. I suggest this menu item be disabled on Linux (and macOS?). --yoshi at 03d10ce
      • Fixed in 329a7de (by hiding the menu item).
    • Defaults for Config > Paths... could be changed to standards like $XDG_CONFIG_HOME. Making this change to system-global dirs would break from the "portable app" precedent. --yoshi
      • Sorta done in NixHawk
    • Users with only an Intel iGPU (i.e. no discrete GPU) may get i965: Failed to submit batchbuffer: Invalid argument. Try LIBGL_ALWAYS_SOFTWARE=1 ./EmuHawkMono.sh or otherwise setting that environment variable. (workaround found by @InfamousKnight)
    • Dialogs which pause emulation should cause the current frame to be redrawn to MainForm, but instead drawing stops and you get the solitaire effect. --yoshi at 268ab96
    • Possibly related, under Plasma Wayland on NixOS: "open file" dialogs sometimes result in empty black windows, which then become "infectious" and result in even the main window only showing black, which persists until user logout / compositor shutdown. --bugQ
    • Dropdowns not closing: WinForms - ToolStrip dropdowns do not close properly mono/mono#12644 --yoshi at 42fc895
      • workaround added in 653844e (sorry I didn't do that sooner --yoshi)
    • Controls in RecordMovie (dialog asking for filename and author for new movie) are misplaced, making keyboard navigation a requirement for recording movies (without TAStudio) --yoshi at 9e60927
    • If you get an error like "GDI+ status: InvalidParameter" at System.Drawing.Image.get_FrameDimensionsList, try updating libgdiplus.
    • Hard crash when clicking+dragging scrollbar in OpenFileDialog. Nothing in stdout or stderr. ¯\_(ツ)_/¯
      • Similarly, random hard crashes when clicking+dragging scrollbar in core settings dialogs, then moving cursor over the button of a dropdown menu without releasing the mouse button.
    • In Hex Editor, opening context menu causes scroll wheel and arrow keys to have no effect until the window is unfocused and refocused.
    • Log Window threading is fragile, see LogWindow something causes crash on Mono #2741.
    • Starting Mono while the solution is being rebuild will, rather than hitting the version check in EmuHawk.Program, cause Mono to segfault. (Not before init'ing GTK, though. I swear it's taunting me.)
    • May be NixOS-specific, but it seems idling with Lua scripts running+drawing but emulation paused causes the Lua Console (possible all WinForms UI?) to freeze, and unpausing emulation fixes it immediately...
      • It also seems to unpause for no reason? Does it think I closed a menu and it was only temp. paused?
    • RetroAchievements dialogs aren't great, but they are technically usable
    • From 2.10, SDL2 handles sleep prevention, but while it's implemented for Linux (X11), it's not working in practice. See BizHawk does not inhibit display or system sleep while running #3644 (comment).
    • PictureBox applies anti-aliasing/interpolation to pixel graphics: [🐧] NES PPU Viewer's "zoom box" shouldn't be anti-aliased #3764
    • Buttons in some windows and dialogs are missing their labels. Possibly related to Japanese locale. Initially reported by @miyakut on Discord, running Mint. 404f28f didn't work and was reverted.
    • Lua Console REPL, and possibly elsewhere, doesn't accept numpad input. Repro'd on Ubuntu 22.04 but not NixOS.

    Cores

    Issues with TI83Hawk

    • IndexOutOfRangeException at BizHawk.Emulation.Cores.Calculators.TI83.ReadMemory(ushort) --yoshi at 25a5449

    Building and packaging

    Dependencies are being recorded (so build scripts can be made) in the GitLab mirror's snippets. On multi-arch distros, target x86_64/amd64.

    For the record I've mostly focused on Manjaro, Nix/NixOS (which I use), Linux Mint, and Ubuntu. --yoshi

    Bus error (core dumped) when building may be because you're out of disk space.

    libblip_buf works as intended on both OSes, but the Makefile for Linux builds was hacked together (see libblip_buf issue tracker) and using the library in BizHawk was intended to be a temporary hack. The library has been rewritten as noted in #1312. Sappharad has previously attempted moving it to managed C#. It may be possible to use libspeex instead. they serve different purposes according to #3207 (comment) --yoshi

    Don't know where else to leave these:

    • Debug P/Invokes (.dll/.so loading) with MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll ./EmuHawkMono.sh --mono-no-redirect.
    • It seems libgdiplus.so doesn't support whatever the "PNG 256x256" mode of .icos is.
  2. nattthebear commented on Jan 7, 2019

    @nattthebear
  3. Sappharad commented on Jan 8, 2019

    @Sappharad
  4. alyosha-tas commented on Jan 8, 2019

    @alyosha-tas
  5. YoshiRulz commented on Jan 8, 2019

    @YoshiRulz
    Author
  6. Asnivor commented on Jan 8, 2019

    @Asnivor
  7. YoshiRulz commented on Jan 8, 2019

    @YoshiRulz
    Author
  8. Asnivor commented on Jan 8, 2019

    @Asnivor
  9. nattthebear commented on Jan 8, 2019

    @nattthebear
  10. Sappharad commented on Jan 9, 2019

    @Sappharad
  11. Asnivor commented on Jan 9, 2019

    @Asnivor
  12. nattthebear commented on Jan 9, 2019

    @nattthebear
  13. Asnivor commented on Jan 9, 2019

    @Asnivor
  14. YoshiRulz commented on Jan 10, 2019

    @YoshiRulz
    Author
  15. Asnivor commented on Jan 10, 2019

    @Asnivor
  16. 327 remaining items

  17. rjgabel commented on Sep 25, 2025

    @rjgabel
  18. Noxillio commented on Oct 7, 2025

    @Noxillio
  19. rjgabel commented on Oct 7, 2025

    @rjgabel
  20. Noxillio commented on Oct 7, 2025

    @Noxillio
  21. Noxillio commented on Oct 7, 2025

    @Noxillio

    Alright now I have real errors.

    Trying to launch Pokemon Red using SGB2 on the bsnes core. It gets through the SGB2 intro animation and right after loading the GB game the emulator crashes.

    In the terminal:

    =================================================================
    	Native Crash Reporting
    =================================================================
    Got a SIGSEGV while executing native code. This usually indicates
    a fatal error in the mono runtime or one of the native libraries 
    used by your application.
    =================================================================
    
    =================================================================
    	Native stacktrace:
    =================================================================
    	0x55e1a7ab5ee7 - mono : 
    	0x55e1a7ab60fd - mono : 
    	0x55e1a7a63949 - mono : 
    	0x55e1a7aaf505 - mono : 
    	0x36f001866eb - Unknown
    
    =================================================================
    	Basic Fault Address Reporting
    =================================================================
    Memory around native instruction pointer (0x36f001866eb):0x36f001866db  b6 84 37 00 93 02 00 31 c0 45 84 c0 41 0f 45 c1  ..7....1.E..A.E.
    0x36f001866eb  80 bc 37 00 94 02 00 00 0f 84 d0 00 00 00 0f b6  ..7.............
    0x36f001866fb  d2 80 bc 17 f0 00 00 00 00 0f 84 bf 00 00 00 80  ................
    0x36f0018670b  bf f8 00 00 00 00 0f b7 d0 74 43 89 ce c1 ee 10  .........tC.....
    
    =================================================================
    	Managed Stacktrace:
    =================================================================
    =================================================================
    Aborted (core dumped)
    

    In EmuHawkMono_laststderr.txt:

    snes_init was called!
    name "ipl.rom" was requested
    rom size: 524288
    loaded game manifest: "
    game
      sha256:   c172498a23d1176672931bab33b629c7d28f914a43dca9e540b8af1b37ccf2c6
      label:    
      name:     
      title:    Super GAMEBOY2
      region:   NTSC
      revision: SHVC-042J-16
      board:    GB-LOROM
        memory
          type: ROM
          size: 0x80000
          content: Program
        memory
          type: ROM
          size: 0x100
          content: Boot
          manufacturer: Nintendo
          architecture: LR35902
          identifier: SGB2
        oscillator
          frequency: 20971520
    "
    name "manifest.bml" was requested
    name "boards.bml" was requested
    name "program.rom" was requested
    name "msu1/data.rom" was requested
    name "manifest.bml" was requested
    name "program.rom" was requested
    name "save.ram" was requested
    name "sgb2" was requested
    
  22. YoshiRulz commented on Oct 7, 2025

    @YoshiRulz
    ContributorAuthor

    Unfortunately none of that is helpful, since it's crashing in unmanaged code and there are no debugging symbols. There might be a way to compile for debugging but it's not something that we've streamlined.
    Does it only crash with that core and that rom?

  23. Noxillio commented on Oct 7, 2025

    @Noxillio

    Unfortunately none of that is helpful, since it's crashing in unmanaged code and there are no debugging symbols. There might be a way to compile for debugging but it's not something that we've streamlined. Does it only crash with that core and that rom?

    Seems to happen when loading any game with SGB2 or SGB1.

  24. InfamousKnight commented on Nov 13, 2025

    @InfamousKnight

    Using the new cosmic DE, input doesn't register at all. Not on keyboard nor gamepad.

    But mouse inputs do. To fix these issues, go to config - customize - accept background input. This magically makes it functional!

  25. YoshiRulz commented on Jan 22, 2026

    @YoshiRulz
    ContributorAuthor

    Heads up for anyone having problems with Lua drawing fonts:
    It seems that if your copy of libgdiplus was built with Pango support instead of Cairo, you'll get tofu (boxes) with pixelText.
    Image
    (Though as you can see, drawString is horribly aliased for me with Cairo.)
    If your package manager doesn't tell you the dependencies of libgdiplus, you can check with ldd /path/to/libgdiplus.so. Or, you know, try using the drawing APIs.

    test script
    while true do
    	emu.yield();
    	gui.cleartext();
    	gui.clearGraphics();
    	gui.use_surface("client");
    	gui.text(20, 40, "gui.text");
    	gui.pixelText(20, 80, "gui.pixelText(..., nil)", nil, nil, nil);
    	gui.pixelText(20, 100, "gui.pixelText(..., 'gens')", nil, nil, "gens");
    	gui.pixelText(20, 120, "gui.pixelText(..., 'fceux')", nil, nil, "fceux");
    	gui.drawString(20, 160, "gui.drawString(..., nil)", nil, nil, nil, nil);
    	gui.drawString(20, 180, "gui.drawString(..., 'Arial')", nil, nil, nil, "Arial");
    	gui.drawString(20, 200, "gui.drawString(..., 'Noto Sans')", nil, nil, nil, "Noto Sans");
    end
  26. Yamidavie commented on Feb 27, 2026

    @Yamidavie
  27. Yamidavie commented on Feb 27, 2026

    @Yamidavie

    Having a weird issue with some text not showing up, the issue only seems to affect menus that pop out of the application. Text properly shows in most places except descriptors of options. Is there a specific font it calls for? If there is it's not called during the AUR based install

    OS: Arch Linux x86_64 Kernel: Linux 6.18.13-arch1-1 WM: i3 4.25.1 (X11) CPU: AMD Ryzen 7 9800X3D (8) @ 5.27 GHz GPU: AMD Radeon RX 9070 XT [Discrete]
    Image Image

    Realized that this is already being discussed with the autoscaler issue. Is there a way to set a launch option for legacy text scaling or is that something that requires a full rebuild?

  28. YoshiRulz commented on Feb 27, 2026

    @YoshiRulz
    ContributorAuthor

    (re: #4469) There is no such option, but it was mostly fixed already so you can grab a dev build.

  29. YoshiRulz commented on Feb 27, 2026

    @YoshiRulz
    ContributorAuthor

    Trying to launch Pokemon Red using SGB2 on the bsnes core. It gets through the SGB2 intro animation and right after loading the GB game the emulator crashes.

    [...] Does it only crash with that core and that rom?

    Seems to happen when loading any game with SGB2 or SGB1.

    Late, but repro'd on 2.11, but only with the old BSNES core and it's inconsistent. So just stick to the BSNESv115+ core. @Noxillio

  30. InfamousKnight commented on Jul 19, 2026

    @InfamousKnight

    Using the new odyssey void linux beta5, for some reason long movies won't complete. And by long, I mean like 15 minutes.

    I tried to playback my need for speed most wanted ds movie and it stops about 70% in for some reason.

    But it is in beta still so maybe once July 25th comes around it will be fixed. I tried using konsole as well and it doesnt work there either..

  31. locked as resolved and limited conversation to collaborators on Jul 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    App: EmuHawkRelating to EmuHawk frontendMetaRelating to code organisation or to things that aren't codere: MultiplatformRelating to porting to Linux (or macOS, etc.), or porting to other host architectures

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions