如何在Ubuntu中识别SDL2的游戏控制器?

我正在尝试让Costume Quest(Double Fine游戏)使用我的游戏手柄,根据开发人员的支持,我需要做的就是将SDL2配置行添加到SDLGamepad.config文件,但是,我找不到正确的值对于UUID。 lsusbdmesgudevadm提供的值都不匹配UUID为32个字符长(第一列)的示例(如下所示):

 030000006d0400001ec2000020200000,Logitech Rumble Gamepad F510(Linux),a:b0,b:b1,x:b2,y:b3,start:b7,back:b6,guide:b8,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5, 030000005e0400008e02000014010000,Microsoft Xbox 360 Gamepad (xpad) (Linux),a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5, 

我应该在那里使用什么? 我的配置文件条目不起作用:

 0003:0E8F:0012.0016,GreenAsia Inc. USB Wireless 2.4GHz Gamepad,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b13,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7, 0003:0079:0006.0011,DragonRise Inc. Generic USB Joystick,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b13,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7, 

lsusb输出:

 Bus 002 Device 049: ID 0079:0006 DragonRise Inc. Generic USB Joystick Bus 002 Device 048: ID 0e8f:0012 GreenAsia Inc. USB Wireless 2.4GHz Gamepad 

====编辑====

如果有人来这里只是为了这个,这是我的GreenAsia Inc.配置,使用xpad在Linux上工作:

 030000008f0e00001200000010010000,GreenAsia Inc.,a:b2,b:b1,y:b0,x:b3,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5, 

偶然发现 – 这是一个不需要任何编译器知识的ruby脚本: http ://bazaar.launchpad.net/~taktaktaktaktaktaktaktaktaktak/+junk/joystickguid/view/head: /joystickguid.rb

GUID是SDL2特定的ID,没有直接的方法来获取它与系统工具。 通过将总线,供应商,产品和版本号压缩成单个值来构建GUID,您可以在此处看到它:

http://hg.libsdl.org/SDL/file/a9d1c47bb1aa/src/joystick/linux/SDL_sysjoystick.c#l117

获得它的一种方法是从SDL中读取它。 以下程序执行此操作,使用以下命令编译:

 gcc -o sdl2-joystick sdl2-joystick.c `pkg-config --libs --cflags sdl2` 

将以下内容另存为sdl2-joystick.c

 #include  int main() { SDL_Init(SDL_INIT_JOYSTICK); atexit(SDL_Quit); int num_joysticks = SDL_NumJoysticks(); int i; for(i = 0; i < num_joysticks; ++i) { SDL_Joystick* js = SDL_JoystickOpen(i); if (js) { SDL_JoystickGUID guid = SDL_JoystickGetGUID(js); char guid_str[1024]; SDL_JoystickGetGUIDString(guid, guid_str, sizeof(guid_str)); const char* name = SDL_JoystickName(js); int num_axes = SDL_JoystickNumAxes(js); int num_buttons = SDL_JoystickNumButtons(js); int num_hats = SDL_JoystickNumHats(js); int num_balls = SDL_JoystickNumBalls(js); printf("%s \"%s\" axes:%d buttons:%d hats:%d balls:%d\n", guid_str, name, num_axes, num_buttons, num_hats, num_balls); SDL_JoystickClose(js); } } return 0; } 

您是否尝试过Steams Big Picture Mode并在那里配置您的控制器? 据我所知,Steam将自动生成SDL2配置并将其交给游戏。