4

把Steam Deck变成PC的蓝牙手柄

 1 year ago
source link: https://discretetom.github.io/posts/steam-deck-as-bluetooth-joystick/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

过年回家,只带了 Steam Deck 和 PC,忘了带手柄。既然 Steam Deck 有手柄硬件,还有 Desktop Mode,写个脚本让它变成蓝牙手柄岂不美哉

在桌面模式捕获手柄输入

参考此文

默认情况下,桌面模式的 steam deck 手柄会控制鼠标操作,而不是作为手柄。可以通过长按右侧 X 键上面的【暂停键/三道杠】进行切换

切换之后,就可以使用python 的 pyjoystick 库捕获手柄输入了

模拟蓝牙手柄

方案 1:HID(失败)

只要能够为 steam deck 实现蓝牙 HID (Human Interface Device),就可以直接连接 PC,PC 上面就不用安装额外的软件/驱动,是最理想的方案

然而,经过很长时间的调研和测试,蓝牙 HID 的端口和 UUID 在 steam deck 上都已经被注册

因为 steam deck 可以被电脑连接,作为蓝牙音箱,所以可能是此功能占用了 HID 的 UUID 和端口。而我研究了很久也没办法禁用这个功能,所以可能暂时无法在 steam deck 上实现 HID

不知道这个蓝牙音箱功能是在硬件层面实现的,还是操作系统层面。如果是操作系统层面,未来可以考虑重装系统(双系统),用其他的 linux,试试能不能实现 HID

另外,关于 HID 的资料可真难找啊,和互联网软件开发是完全不同的体验。以下是一些有用的链接或可参考的项目,先记下来,万一以后想复活 HID 方案呢

方案 2:蓝牙 Socket

既然不能使用 HID,那就自己实现一个协议吧。需要在 PC 和 Steam Deck 上都启动程序才行,Steam Deck 上发送手柄数据,PC 上接受手柄数据,并操作虚拟手柄

  • Steam Deck 上获取手柄输入,上文已经提到,可以使用 pyjoystick 库
  • PC 上虚拟手柄,使用了 vgamepad 库,安装的时候会安装一个驱动
  • 蓝牙协议栈:Steam Deck 和 PC 都使用了 pybluez 进行蓝牙操作
    • 不论是 PC 还是 Steam Deck,都要 源码安装 pybluez,不要pip install pybluez
    • Win 11 也可以使用 pybluez,需要安装 Windows C++ SDK,跟着 pybluez 的提示安装即可
    • Steam Deck 上面会缺少很多 C 语言头文件或库,谷歌搜索 arch linux xxx.h 就能知道哪个包有这个文件,然后sudo pacman -S xxx安装包就行了。有的包需要重新安装才能有头文件,比如Python.h就需要重新安装 python
      • 也可以直接用 pacman 查。先pacman -Fy更新数据库,然后pacman -F Python.h就可以查询

还有以下注意事项:

实现虚拟手柄之后,可以使用 Windows 系统中的 joy.cpl 工具进行调试

最终成品可以在这个 repo 找到


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK