Joystick on Ubuntu Core

These lines are suspicious to my eye:

stat64("/build/supertux/parts/supertux/build/data/credits.stxt", 0xbef40608) = -1 ENOENT (No such file or directory)
...
access("/snap/supertux/x1/usr/share/games/supertux2", W_OK) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/root/snap/supertux/x1/.local/share/supertux2/config", O_RDONLY) = -1 ENOENT (No such file or directory)
lstat64("/root/snap/supertux/x1/.local/share/supertux2/config", 0xbef401b8) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/snap/supertux/x1/usr/share/games/supertux2/config", O_RDONLY) = -1 ENOENT (No such file or directory)
lstat64("/snap/supertux/x1/usr/share/games/supertux2/config", 0xbef401b8) = -1 ENOENT (No such file or directory)

Specifically that last one $SNAP/usr/share/games/supertux2/config being not found… and $SNAP/usr/share/games/supertux2 giving access denied.

The SDL2 game controller API has an event type SDL_CONTROLLERDEVICEADDED to detect new devices and then uses the ID reported in the event to register/open the device. Only after that initialization procedure input events are read from /dev/input/js0. What I think it’s happening here is that /dev/input/js0 is available and readable, but SDL is not being informed that a game controller is plugged (so, for SDL, there’s no game controller connected and no input is read). Does that make sense to you?

1 Like

So to test this possibility I wrote a small SDL app that reads the state of the controller buttons and straced it. On a classic system it opens /dev/input/event22 and reads data when input is generated on the controller, but on core it doesn’t open anything, so I think SDL is really not being informed about the presence of a game controller device.

1 Like

In other news, gdbserver has landed in the edge channel of the core18 snap, so to debug the crash, you can try:

snap refresh core18 --edge # wait for reboot afterwards
snap run --experimental-gdbserver supertux

and then follow the instructions to have a working gdb session on Ubuntu Core to see where it is segfaulting