I have an 8Bitdo nes controller that connects using bluetooth. It displays as a joystick in the bluetooth menu. Using jstest-gtk I can see the buttons when I push them but the directional pad maps to the keyboard. Pad allows me to move to different buttons and I can scroll a page on a web browser. I need to know how to map the directional pad correctly. Any ideas?
8Bitdo gamepads are Bluetooth HID gamepads which have some basic support on Linux but usually need remapping to work correctly. There's a userspace driver called xboxdrv that can do this sort of remapping. Basically, it will transform the gamepad inputs so they look like an XInput device, which allows it to work with apps that expect Xbox controllers.
I haven't tried this myself but probably you will want to follow the instructions here to add an xboxdrv mapping:
The mapping itself is:
#8Bitdo NES30 Pro Config [xboxdrv] evdev-debug = true evdev = /dev/btjoy evdev-grab = true rumble = false mimic-xpad = true silent = true [evdev-absmap] ABS_HAT0X = dpad_x ABS_HAT0Y = dpad_y ABS_X = X1 ABS_Y = Y1 ABS_Z = X2 ABS_RZ = Y2 [axismap] -Y1 = Y1 -Y2 = Y2 [evdev-keymap] # Map start and select BTN_START=Start BTN_SELECT=Back # Map power to guide BTN_C=Guide # Map buttons to the printed key BTN_SOUTH=A BTN_EAST=B BTN_NORTH=X BTN_WEST=Y # L1 R1 as Triggers BTN_TL=LT BTN_TR=RT # L2 R2 as buttons BTN_TL2=LB BTN_TR2=RB # Thumbs as thumbs BTN_THUMBL=TL BTN_THUMBR=TR