Link mua hàng:
Ai dùng linux cũng biết là thường khi có thiết bị mới cắm vào máy mà không chạy ngay lần đầu thì tức không có sẵn driver trong kernel và ta phải tự compile driver cho thiết bị đó.
Thường thì khả năng thực hiện việc cài driver ngoài này không thành công là khá cao (vì nếu thiết bị được hỗ trợ thì đã được merge lên upstream rồi).
Tuy nhiên dù gì thì cũng mới nhận hàng vài tiếng trả lại thì tốn thời gian của cả 2 bên quá, nên thử tìm hiểu tí về driver tay cầm trên linux xem sao.
Sau một hồi hỏi google thì mình mò ra được một vài cái repo về driver cho tay cầm xbox như sau:
- xpad: đây là cái driver phổ biến nhất và thậm chí là được dùng trong sẵn linux kernel, thậm chí có cả một bài reddit về cách hỗ trợ thêm các tay cầm ngoài: https://www.reddit.com/r/linux_gaming/comments/l1ty23/getting_a_generic_xboxone_gamepad_to_work_on_linux/. Tuy nhiên thì nhìn kĩ hơn thì driver này rất đơn giản, không hỗ trợ nhiều thứ nên mình tiếp tục tìm các driver khác.
- xboxdrv: có vẻ đây là driver chuyên trị các tay cầm xbox 360 chứ không phải là xbox one nên không chọn cái này
- xpadneo: repo rất có tiềm năng nhưng tìm hiểu kĩ hơn thì họ muốn tập trung vào đối tượng tay cầm KHÔNG DÂY => không phù hợp với cái tay này
- xow: lại một project chuyên về tay cầm xbox one KHÔNG DÂY => không phù hợp với cái tay này
Và cuối cùng là từ 2 cái repo xpadneo
và xow
đều dẫn tới một cái repo nữa đó là xone và theo file README của repo này thì đây là lựa chọn hoàn hảo:
- Wired devices (via USB)
- Third party controllers (PowerA, PDP, etc.)
Sau khi mình dựa theo hướng dẫn của repo và cài đặt driver này thì nó ... vẫn không chạy. Nhưng vì trang README đã có quảng cáo sẵn là hỗ trợ 3rd party nên bước tiếp theo là tự chỉnh source code và cài driver.
Trước tiên cần tìm hiểu cách hỗ trợ thêm một controller mới như thế nào bắt cách vào một số PR của repo này:
Nhìn có vẻ là chỉ cần chỉnh một file nhanh gọn! Cắm tay cầm vào và dùng lệnh lsusb
để lấy thông tin của thiết bị:
Bus 001 Device 011: ID 11c1:2001 Controller
Ở đây vendor id là 11c1
và product id là 2001
, ta chỉ quan tâm đến vendor id.
Copy paste và chỉnh lại một dòng vào transport/wired.c
theo như 2 PR kia:
{ XONE_WIRED_VENDOR(0x11c1) },
và compile lại driver. Lúc này cắm vào thì tay đã nhận!
Dùng dmesg
để kiểm tra thì có output như sau
[ 150.468862] usb 1-6: new full-speed USB device number 11 using xhci_hcd
[ 150.596395] usb 1-6: New USB device found, idVendor=11c1, idProduct=2001, bcdDevice= 1.08
[ 150.596398] usb 1-6: New USB device strings: Mfr=0, Product=2, SerialNumber=3
[ 150.596398] usb 1-6: Product: Controller
[ 150.596399] usb 1-6: SerialNumber: <redacted>
[ 150.711239] usb 1-6: reset full-speed USB device number 11 using xhci_hcd
[ 150.877861] input: Microsoft X-Box One pad as /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/gip0/gip0.0/input/input30
Kiểm tra tay cầm:
- Vào trang gamepad-tester.com để kiểm tra nhanh gọn các nút nhất, dpad và joystick đều hoạt động bình thường
- Cài thêm
evtest
để xem tay hỗ trợ những tính năng nào. Mình nhận thấy tay có hỗ trợ RUMBLE (rung). - Cài tiếp
fftest
để kiểm tra tính năng rung của tay:sudo fftest /dev/input/eventXX
(số XX lấy từ câu lệnhevtest
)
Force feedback test program.
HOLD FIRMLY YOUR WHEEL OR JOYSTICK TO PREVENT DAMAGES
Device /dev/input/event25 opened
Features:
* Absolute axes: X, Y, Z, RX, RY, RZ, Hat 0 X, Hat 0 Y,
[3F 00 03 00 00 00 00 00 ]
* Relative axes:
[00 00 ]
* Force feedback effects types: Periodic, Rumble, Gain,
Force feedback periodic effects: Square, Triangle, Sine,
[00 00 00 00 00 00 00 00 00 00 03 07 01 00 00 00 ]
* Number of simultaneous effects: 16
Setting master gain to 75% ... OK
Uploading effect #0 (Periodic sinusoidal) ... OK (id 0)
Uploading effect #1 (Constant) ... Error: Invalid argument
Uploading effect #2 (Spring) ... Error: Invalid argument
Uploading effect #3 (Damper) ... Error: Invalid argument
Uploading effect #4 (Strong rumble, with heavy motor) ... OK (id 1)
Uploading effect #5 (Weak rumble, with light motor) ... OK (id 2)
Enter effect number, -1 to exit
Có vẻ là tay không hỗ trợ toàn bộ các hiệu ứng rung, nhưng vẫn có 3 loại rung 0, 4 và 5 Chọn từng loại rung và kiểm tra thì tay hoạt động bình thường!
Mình muốn tìm hiểu kĩ hơn về tay cầm này được sản xuất bởi ai. Vì trên bao bì (xem hình ở trang bán hàng của shoptaycam.com ở trên) thì hoàn toàn không có bất kì thông tin nào.
Nhưng ở đây ta lấy được vendor id nên có thể dùng trang devicehunt.com để tìm ra đây là sản phẩm của LSI Corporation
Đọc trang wiki thì biết trước đây nó là từ Agere Systems, và Agere Systems lại bắt nguồn từ Lucent Technologies, Inc., một nhánh của AT&T Corporation. Sau này LSI Corporation đã được mua lại bởi Avago Technologies (nay là Broadcom Inc.)
Điều hay ở tất cả các công ty kể trên là chúng đều là công ty Mỹ, có vẻ như là nhà sản xuất tay cầm này sử dụng chip của Broadcom và không đổi lại tên nên cuối cùng cũng chả biết được là dây là của hãng nào.
Thôi coi như tuân theo mô tả của shop bán hàng tech7 nó là No-Brand vậy.