
글 작성 시점 최신 펌웨어는 6.64 입니다.
데비안에서 스팀으로 Deep Rock Galactic Survivor 하다가 패드 진동이 오지 않는다는걸 깨닫고 몇일간 삽질한 결과를 여기에 정리해봅니다.
1. 원인
그냥 Gamesir 펌웨어 버그(?)입니다.
usb 1-1: unable to read config index descriptor/all
usb 1-1: can’t read configurations, error -71dmesg -w 했을때 나오는 에러
패드 연결시 PC와 장치간 식별하는 과정이 있는데 그 과정에서 펌웨어 버그(?)로 정상적인 값(0x1010)이 아니라 엉뚱한 값(0x1082)로 인식합니다.

참고로 채찍피티는 왜 1082가 나오는지 위와 같이 설명했습니다 (믿거나 말거나)

젬민이는 1082의 정체가 위와 같다고 합니다. (아님 말고)
솔직히 둘다 아닌거 같은데..
1-1 펌웨어 버전별 인식하는 vid:pid
| Firmware Version | Windows | Linux |
|---|---|---|
| 6.28 | 3537:1010, 045e:02ff | 3537:1010 |
| 6.29 | 3537:1010, 045e:02ff | 3537:1010 |
| 6.30 | 3537:1010, 045e:02ff | 3537:1010 |
| 6.35 | 3537:1010 | 3537:1010 |
| 6.37 | 3537:1010 | 3537:1010 |
| 6.39 | 3537:1010 | 3537:1010 |
| 6.40 | 3537:1010 | 3537:1010 |
| 6.52 Note: headset volume considerably lower | 3537:1010 | 3537:1082 |
| 6.54 | 3537:1010 | 3537:1082 |
| 6.55 | 3537:1010 | 3537:1082 |
| 6.56 | 3537:1010 | 3537:1082 |
| 6.62 Note: stick movement disabled in raw mode | 3537:1010 | 3537:1082 |
| 6.64 Note: fixes the previous bug of stick input being disabled on raw. | 3537:1010 | 3537:1082 |
윈도우(USBLogView)와 리눅스(lsusb)를 통해서 표기되는 vid:pid는 위와 같습니다.
펌웨어 6.3버전까지 윈도우는 2개의 pid가 인식되고 리눅스는 1개만 인식하는 이유는 리눅스도 인식은 하는데 unkown 기기로 잡힙니다.
그리고 2개가 인식되다가 버전업그레이드로 1개만 인식된 이유는 콘솔(xsx,xss xone)기기랑 연관이 있는데 6.3이전버전은 패드를 연결하면 콘솔기기가 켜졌습니다. 하지만 엑원패드는 usb선을 연결한다고 켜지지 않고 패드의 홈(Xbox로고)버튼을 눌러야 켜지는데 그 방식을 통일할려고 한거 같습니다.
(실제 펌웨어는 저거 보다 더 많이 출시되었는데 GameSir에서 다운로드 가능한 펌웨어는 저거 밖에 없어서 저것만 테스트 했습니다) (6.28 미만은 그냥 제외했습니다)
2. 일시적인 해결 방법
2-1 터미널 명령 (최신 펌웨어 6.64용)
lsusb | grep GameSir echo "3537:10a0:gk" | sudo tee /sys/module/usbcore/parameters/quirks
터미널에 위 명령을 입력하고 패드를 연결합니다.
lsusb | grep GameSir
패드 연결하고 1~2초 후에 다시 위 명령을 입력합니다. ID가 3537:1082 -> 3537:1010 바뀌었다면 이제 스팀을 켜고 게임을 즐깁시다. (이 방식은 컴터를 켤때 마다 해야 합니다)
참고로 gk의 의미는 (출처: 레드햇 )
- g = USB_QUIRK_DELAY_INIT(장치 초기화 과정에서 장치 설명자를 읽은 후 일시 정지가 필요합니다)
- k = USB_QUIRK_NO_LPM(이 장치는 링크 전원 관리를 처리할 수 없습니다)
2-2 버그(?)를 이용한 편법 (최신 펌웨어 6.64용)
일단 패드를 “윈도우 PC” 에 연결합니다. (리눅스, 안드로이드에 연결상태에선 작동하지 않습니다)

윈도우 장치관리자를 열고 패드를 연결하면 위와 같이 “Xbox 주변장치(3537:1010)” 라는게 뜹니다.

Xbox 버튼을 누르면 표시등에 불이 켜지는데 이때 Xbox 버튼과 공유버튼을 동시에 3~5초가량 눌러줍니다.

그러면 장치 관리자에서 “Xbox 주변장치(3537:1010)” -> “Xbox 360 주변 장치(3537:10a0)” 로 바뀝니다. 이 상황에서 리눅스에 연결하고 사용하면 xbox360 패드로 인식해서 패드 진동이 잘 옵니다.
버그 편법이라고 한 이유를 서술하자면.. 이 상태에서 다시 Xbox 버튼과 공유버튼을 동시에 3~5초가량 눌러줍니다. 그러면 “Xbox 360 주변 장치(3537:10a0)” -> “Xbox 주변장치(3537:1010)” 로 돌아옵니다. 하지만 리눅스에 연결하면 여전히 “Xbox 360 주변 장치” (3537:10a0)로 인식합니다.
이 방법은 기기 초기화 (보기버튼+십자버튼 ⬆️ + Xbox 버튼을 누른채로 usb 선을 연결) 하면 다시 해줘야 해서 일시적인 방법이라고 분류했습니다.
3. 영구적인 해결 방법
아래 방법중 하나를 선택하면 됩니다.
3-1 crontab 사용 (최신 펌웨어 6.64용)
echo "@reboot root sh -c 'echo \"3537:10a0:gk\" > /sys/module/usbcore/parameters/quirks'" | sudo tee -a /etc/crontab
위 명령으로 크론탭에 재부팅 할때 마다 일시적인 방법을 실행하는 명령어를 추가합니다. 재부팅후 패드를 재연결하면 마찬가지로 ID가 3537:1082 -> 3537:1010로 바뀝니다.
3-2 grub 사용 (최신 펌웨어 6.64용)
sudo nano /etc/default/grub
grub 설정파일을 열면 GRUB_CMDLINE_LINUX_DEFAULT=”quiet” 으로 되어 있을텐데
GRUB_CMDLINE_LINUX_DEFAULT="quiet usbcore.quirks=3537:10a0:gk"
위 내용처럼 뒷부분에 usbcore.quirks=3537:10a0:gk 를 추가해줍니다.
sudo update-grub
grub에 적용하고 재부팅을 하면 마찬가지로 ID가 3537:1082 -> 3537:1010로 바뀝니다.
3-3 modprobe 사용 (최신 펌웨어 6.64용)
echo "options usbcore quirks=3537:10a0:gk" | sudo tee /etc/modprobe.d/99-gamesir-g7se.conf && sudo update-initramfs -u
위 명령 입력후 재부팅 하면 마찬가지로 ID가 3537:1082 -> 3537:1010로 바뀝니다. 개인적으론 grub 파라미터 덕지덕지 붙는거 보다 여기 파일에 기록되어 있는데 더 깔끔해 보입니다.
3-4 펌웨어 다운그레이드 (구형 펌웨어6.4용)
가장 쉬운(?) 방법은 구버전 6.4 펌웨어로 다운그레이드 하는 것입니다. (구버전 펌웨어는 GameSir 디스코드에 가면 있습니다)
리눅스쪽에 뭐 손댈거 없이 그냥 연결만 하면 3537:1010으로 인식하며 작동합니다.
4. 후기

GameSir 디코를 열심히 뒤져봤더니 역시 저랑 같은 문제를 호소하는 글이 있었지만 공식 지원팀에서 이 제품은 Windows, Xbox 용이라 리눅스 대응은 하지 않는다고 했습니다.
차후 펌업에도 기대는 하지 않는게 좋을듯 싶고.. 리눅스에서 엑박패드 드라이버 개발하는 팀(xpadneo)에서도 GameSir 제품에 대해 써놓은게 있는데…⬇️
A Note About GameSir Devices
GameSir devices do not use officially registered MAC OUIs on the Bluetooth radio part, and they come with various flaky firmware behavior and bugs, while mimicking all other identifiable feature of genuine Microsoft controllers perfectly. This makes such devices hard to detect to work around the bugs in the rumble implementation but we will need a correct implementation in a future version of xpadneo. This means that xpadneo will probably drop official support for GameSir devices in the future: Base functionality should work out of the box but advanced future rumble features may show erratic behavior. There’s nothing we can do about that and you should instead complain at the manufacturer: either properly implement the full rumble protocol, or just stick to officially registered OUIs.
유저드라이버도 기대하면 안될거 같습니다.

참고로 윈도우 Gamesir Nexus로 1000hz 설정하고 와도 리눅스에선 500hz 로 작동합니다. 헤드폰 단자를 살릴려면 xone 드라이버를 설치하면 되는데 xone 드라이버랑 G7 Pro 최신 펌웨어에서 유선동글이가 계속 붙었다 떨어지는 버그가 있어서 그냥 데비안 기본 xpad를 쓰고 있습니다. (G7 Pro를 구버전으로 낮추면 xone 드라이버도 잘 작동함)
답글 남기기