Hi there,
I asked about this on the GroovyMAME forums and they recommended I ask for help here.
The short description is, Retroarch is core dumping with a Qt error when I try to launch it from GroovyArcade, unless I set desktop_menu_enable = "false"
, but it runs fine if I launch it from X. So it looks to me like it’s trying to load a Qt plugin but it won’t work when I don’t have X loaded and am just rendering to the framebuffer.
It seems like I shouldn’t need Qt at all as I’m using rgui.
More detailed explanation (copied from my post at arcadecontrols.com):
I’m using GroovyArcade and using Pegasus as my frontend. I used to be able to launch Retroarch games but at some point an update appears to have broken it. When I launch a game that uses retroarch, the screen very briefly flashes to white text on a black background (too quickly for me to read the text but it looks like a warning about setting a powersave mode and I think it’s unrelated to the issue launching Retroarch) and then reloads the Pegasus UI.
It appears that Retroarch is core dumping at launch. I looked over pegasus.log and I think this is the relevant section:
Executing command: [`/opt/galauncher/galauncher.sh`,`retroarch`,`megadrive`,`/home/arcade/shared/roms/megadrive/QuackShot Starring Donald Duck (World) (Rev A) (Alt).md`]
Working directory: `/opt/galauncher`
Process 0 started
----------------------------------------
Prelaunching Retroarch
ac_compute_device_uuid's output is based on invalid pci bus info.
qt.qpa.xcb: could not connect to display
qt.qpa.plugin: From 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin.
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: xcb, minimal, wayland, eglfs, linuxfb, minimalegl, wayland-egl, offscreen, vkkhrdisplay, vnc.
/opt/galauncher/emulators/retroarch.sh: line 7: 902 Aborted (core dumped) retroarch --verbose --log-file "$LOG_DIR"/retroarch.log -L "$core_file" "$rom" ${@:3} < /dev/null
I get the same error if I exit out of Pegasus and gasetup and run retroarch from the command line (either just running plain retroarch
or using galauncher.sh).
Retroarch runs without issue if I launch it from the desktop (again, either using the retroarch
command or galauncher.sh).
As far as I’ve been able to tell, what’s happening is that Retroarch is using a Qt plugin called xcb to load its GUI (even though I’ve got it set to use rgui, which I don’t think should require Qt at all?) and xcb requires X. That’s why it works if I launch it from the desktop. But if I launch from Pegasus or the command line, it fails because X isn’t running and it’s supposed to be rendering to the framebuffer.
Per the Qt for Embedded Linux docs, I’ve tried setting the QT_QPA_PLATFORM environment variable to the following values, with these results when I run retroarch:
minimal Segfaults at launch; no other error message
eglfs Screen goes black (so it might be rendering somewhere but not to my primary display); I can SSH in, kill retroarch, and it’ll drop back to the command line.
linuxfb Screen briefly flashes black, then freezes on the command line; it seems like something is running but whatever it is won’t update the screen. If I SSH in, ps shows there’s no running retroarch process; I haven’t worked out how (or if) I can get back to an interactive shell without a reboot.
minimalegl Exits with “Could not initialize egl display” error
offscreen Segfaults at launch; no other error message
I haven’t tried the wayland, wayland-egl, vkkhrdisplay, or vnc plugins, because I’m not using Wayland, Vulkan, or VNC.
Per a recommendation by Substring on the arcadecontrols.com forum, Retroarch will launch from GroovyArcade if I set desktop_menu_enable = "false"
in retroarch.cfg, but this isn’t an ideal solution as I’d like to be able to use the menu to remap buttons, manage savestates, etc.
Has anybody else seen anything like this, or have any ideas? Thanks in advance.