在银河麒麟操作系统中让手柄正常识别并用于游戏,需绕过默认输入限制,手动启用内核驱动(如hid-sony、uinput)与用户态服务支持,配置udev权限规则,并通过jstest-gtk或Steam验证输入响应。

在银河麒麟操作系统中让手柄正常识别并用于游戏,需绕过默认的输入设备限制,手动启用内核驱动与用户态服务支持。
确认手柄硬件是否被系统识别
插入手柄(USB有线或已配对的蓝牙),打开终端,执行:
lsusb | grep -i game
若无输出,尝试换USB口或重启蓝牙服务:sudo systemctl restart bluetooth。部分国产手柄(如iQOO G1、GameSir TMR)需先在Windows下完成固件初始化,否则Linux内核可能无法加载其HID描述符。
看到类似“Bus 002 Device 005: ID 054c:09cc Sony Corp. DualShock4”即表示硬件层已通。【未显示设备ID时,不要继续后续步骤】
启用uinput模块并加载hid-sony等驱动
银河麒麟V10 SP1及之后版本默认禁用uinput,而Steam、RetroArch等依赖该模块模拟按键事件:
sudo modprobe uinput
检查是否加载成功:
lsmod | grep uinput
若返回空行,需永久启用:echo "uinput" | sudo tee -a /etc/modules。对索尼系、任天堂系手柄,还需加载对应驱动:
sudo modprobe hid-sony && sudo modprobe hid-nintendo
部分霍尔摇杆手柄(如乌龟海岸Stealth Flip)需额外加载hid-gyroscope以启用陀螺仪支持,否则《原神》《塞尔达传说》体感功能失效。
配置手柄权限与udev规则
普通用户默认无权读取/dev/input/event*设备节点:
sudo usermod -aG input $USER
立即生效需重新登录,或运行:
newgrp input
为避免每次插拔重设权限,创建udev规则文件:
sudo nano /etc/udev/rules.d/99-gamepad-perms.rules
写入以下内容(适配主流手柄VID/PID):
SUBSYSTEM=="input", GROUP="input", MODE="0660"
KERNEL=="event*", SUBSYSTEM=="input", MODE="0660"
保存后执行:
sudo udevadm control --reload-rules && sudo udevadm trigger
验证手柄输入是否可用
方法一:使用jstest-gtk图形工具
sudo apt install jstest-gtk
启动后选择对应设备,左右摇杆、按键应实时响应。若全部灰显,说明hid驱动未加载或权限未生效。
方法二:命令行快速检测
jstest /dev/input/js0
按下手柄任意键,终端应滚动输出轴值与按钮状态。无反应则回到第二步检查modprobe结果。
方法三:Steam内强制识别
启动Steam → 设置 → 控制器 → 启用通用控制器支持 → 重启Steam。Steam会自动调用SDL2的gamecontrollerdb.txt映射库,对iQOO G1、GameSir TMR等新机型已有预置配置。
修复蓝牙手柄断连后无法重连问题
第一步:删除旧配对记录
bluetoothctl
[bluetooth]# remove XX:XX:XX:XX:XX:XX
第二步:关闭自动重连机制(银河麒麟蓝牙管理器存在bug,会错误锁定连接状态):
sudo nano /etc/bluetooth/main.conf
将AutoEnable=true改为AutoEnable=false,保存后执行:
sudo systemctl restart bluetooth
第三步:手动配对并绑定为游戏设备
bluetoothctl
[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# scan on
等待设备出现后输入:pair XX:XX:XX:XX:XX:XX
配对成功后立即输入:
trust XX:XX:XX:XX:XX:XX
connect XX:XX:XX:XX:XX:XX
这一步必须在配对后30秒内完成trust+connect,否则系统会拒绝建立L2CAP通道,导致/dev/input/js0不生成。


















