Skrypt pythonowy do automatycznej detekcji, inicjalizacji, mapowania i kalibracji gamepada (Gamepad Hama uRage Vendetta) dla systemu Linux, przy użyciu modułów pyusb, pyudev i narzędzia jscal z pakietu joystick.
- Automatyczne wykrywanie: Skrypt wykorzystuje
pyudev
do monitorowania zdarzeń USB, wykrywając kiedy gamepad jest podłączony lub odłączony. - Inicjalizacja: Wysyła
kod inicjujący
w celu aktywowania gamepada. - Kalibracja: Automatycznie kalibruje gamepada za pomocą narzędzia
jscal
. - Logging: Rejestrowanie zdarzeń związanych z podłączaniem, inicjalizacją, kalibracją i odłączaniem gamepada.
- Biblioteka
pathlib
- Biblioteka
pyudev
- Biblioteka
pyusb
- Python 3.9 lub nowszy
joystick
(dlajscal
)
Aby umożliwić użytkownikowi inicjalizację i kalibrację gamepada bez uprawnień roota, należy skonfigurować reguły udev, które dostosowują uprawnienia do USB i urządzeń wejściowych gamepada.
Użyj lsusb
by zidentyfikować idVendor
i idProduct
twojego gamepada:
lsusb
# Bus 003 Device 002: ID 045e:028e Microsoft Corp. Xbox360 Controller
IdVendor to 045e
, a idProduct to 028e
.
- Utwórz nowy plik reguł udev:
sudo nano /etc/udev/rules.d/99-gamepad.rules
- Dodaj następującą zawartość, aby ustawić uprawnienia dla urządzeń INPUT/USB:
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="028e", OWNER="myuser", MODE="0600"
SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="028e", OWNER="myuser", MODE="0660"
Ta konfiguracja zapewnia, że zarówno urządzenie wejściowe (np. /dev/input/js0
), jak i samo urządzenie USB są dostępne dla wybranego użytkownika myuser
.
Po zapisaniu reguł, przeładuj reguły udev i uruchom je:
sudo udevadm control --reload-rules
sudo udevadm trigger
Uruchom skrypt i spróbuj ponownie podłączyć gamepada i sprawdź uprawnienia w odpowiednich węzłach urządzenia:
ls -l /dev/input/js0
Powinieneś zobaczyć coś takiego:
crw-rw---- 1 myuser input 13, 0 Aug 23 15:00 /dev/input/js0
Python script for automatic detection, initialization, mapping and calibration of gamepad (Gamepad Hama uRage Vendetta) for Linux, using pyusb, pyudev modules and jscal tool from joystick package.
- Automatic detection: The script uses
pyudev
to monitor USB events, detecting when a gamepad is connected or disconnected. - Initialization: Sends an
initialization code
to activate the gamepad. - Calibration: Automatically calibrates the gamepad using the
jscal
tool. - Logging: Logs events related to connecting, initializing, calibrating and disconnecting the gamepad.
pathlib
librarypyudev
librarypyusb
library
- Python 3.9 or later
joystick
(forjscal
)
To allow user to initialize and calibrate the gamepad without root permissions, you need to set up udev rules that adjust the permissions on the gamepad's USB and input devices.
Use lsusb
to identify your gamepad's idVendor
and idProduct
:
lsusb
# Bus 003 Device 002: ID 045e:028e Microsoft Corp. Xbox360 Controller
The idVendor is 045e
and idProduct is 028e
.
- Create a new udev rules file:
sudo nano /etc/udev/rules.d/99-gamepad.rules
- Add the following content to set permissions for INPUT/USB devices:
SUBSYSTEM=="input", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="028e", OWNER="myuser", MODE="0600"
SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="028e", OWNER="myuser", MODE="0660"
This configuration ensures that both the input device (e.g. /dev/input/js0
) and the USB device itself are available to the selected myuser
user.
After saving the rules, reload the udev rules and trigger them:
sudo udevadm control --reload-rules
sudo udevadm trigger
Run script and try reconnect your gamepad and check the permissions on the relevant device nodes:
ls -l /dev/input/js0
You should see something like:
crw-rw---- 1 myuser input 13, 0 Aug 23 15:00 /dev/input/js0
This indicates that myuser
has the necessary permissions to access and calibrate the gamepad.