我正在尝试让 Costume Quest(Double Fine 的游戏)使用我的任何一个游戏手柄,并根据开发人员的支持我所需要做的就是将 SDL2 配置行添加到SDLGamepad.config
文件,但是,我找不到正确的 UUID 值。 或 提供的值均不lsusb
符合dmesg
以下udevadm
示例,其中 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. 配置,在 Linux 上使用 xpad 工作:
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,
答案1
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 <SDL.h>
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;
}
答案2
如果有人想知道 SDL 游戏手柄号码,只需安装程序antimicro
(您可以使用sudo apt install antimicro
)并点击控制器映射。
答案3
您是否尝试过 Steams Big Picture Mode 并在那里配置您的控制器?据我所知,Steam 将通过这种方式自动生成 SDL2 配置并将其交给游戏。
答案4
偶然发现了这个 - 这是一个不需要任何编译器知识的 ruby 脚本:http://bazaar.launchpad.net/~taktaktaktaktaktaktaktaktaktak/+junk/joystickguid/view/head:/joystickguid.rb