{"id":48600463,"url":"https://github.com/JacKeTUs/universal-pidff","last_synced_at":"2026-04-24T15:01:18.582Z","repository":{"id":248448595,"uuid":"801102109","full_name":"JacKeTUs/universal-pidff","owner":"JacKeTUs","description":"PIDFF driver with patches for initialization of FFB-capable devices.","archived":false,"fork":false,"pushed_at":"2026-02-03T14:36:22.000Z","size":266,"stargazers_count":219,"open_issues_count":9,"forks_count":11,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-03-03T20:31:20.340Z","etag":null,"topics":["driver","ffb","linux-kernel","pid"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JacKeTUs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-15T15:40:08.000Z","updated_at":"2026-02-26T22:40:29.000Z","dependencies_parsed_at":"2026-01-22T18:14:08.770Z","dependency_job_id":null,"html_url":"https://github.com/JacKeTUs/universal-pidff","commit_stats":null,"previous_names":["jacketus/universal-pidff"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/JacKeTUs/universal-pidff","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JacKeTUs%2Funiversal-pidff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JacKeTUs%2Funiversal-pidff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JacKeTUs%2Funiversal-pidff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JacKeTUs%2Funiversal-pidff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JacKeTUs","download_url":"https://codeload.github.com/JacKeTUs/universal-pidff/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JacKeTUs%2Funiversal-pidff/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32228437,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["driver","ffb","linux-kernel","pid"],"created_at":"2026-04-08T22:00:19.235Z","updated_at":"2026-04-24T15:01:18.567Z","avatar_url":"https://github.com/JacKeTUs.png","language":"C","funding_links":[],"categories":["Linux Wheel Drivers"],"sub_categories":["rFactor"],"readme":"# Universal Force Feedback driver for Linux\n\nLinux PIDFF driver with useful patches for initialization of FFB devices. Primarily targeting Direct Drive wheelbases.\n\nCheck out Linux Simracing community channel on [Matrix](https://matrix.to/#/#simracing:matrix.org)\n\n## What's different between this and native pidff driver?\n\u003e [!NOTE]\n\u003e This driver was upstreamed into kernel from versions 6.12.24+, 6.13.12+, 6.14.3+. 6.15+ and greater, so with recent kernel there is no functional differences. You can install driver from this repo if you want to test some new functions/devices and/or debug something specific.\n\nThat driver allows most DirectDrive wheelbases to initialize and work.\nMost of the DirectDrive wheelbases are basically DirectInput wheels, but with some caveats, which Windows allows, but pidff doesn't.\nIn that repository - pidff driver with some changes, which allows most of the DirectDrive wheelbases to work.\n\n1. Added multiple quirks for better initialization rules for different wheelbases\n2. Fixes for infinite-length effects\n3. Fixes for out-of-bounds values (no more spam in kernel logs)\n\nAnd that's basically it\n\n## What devices are supported?\n### Bases:\n1. MOZA R3, R5, R9, R12, R16, R21\n2. Cammus C5, C12\n3. VRS DirectForce Pro\n4. FFBeast Wheel, Joystick, Rudder\n5. PXN V10, V12, V12 Lite\n6. Lite Star GT978 FF\n7. Asetek Invicta, Forte, La Prima, Tony Kanaan\n8. ...\n\nKernel `pidff` driver will try to probe all devices with HID PID descriptor, so even if your device isn't listed here, it can probably just work (with recent kernel version).\nVersion of the driver in this repository will probe only devices with selected VID/PIDs.\n\n## What works?\n1. FFB (all effects defined from device descriptor)\n2. All inputs (wheel axis, buttons, passthrough axis/buttons for wheel (e.g. Moza))\n\n\n## What does not work?\n1. Telemetry functions. It does not depend on the driver itself. Telemetry LEDs/shakers can be handled by [Monocoque](https://github.com/Spacefreak18/monocoque).\n2. `Firmware Update` function. Use Windows PC or Windows VM at the moment.\n3. Setup through proprietary software may or may not work. It does not depend on the driver itself. May require [some tweaking](#how-to-set-up-a-base-parameters) in corresponding Wine prefix.\n\n## How to install this driver?\nYou can install it through AUR package, through DKMS or manually.\n\nOn SecureBoot enabled systems you will need additional steps for load this driver into the system. See [Signing](docs/SIGNING.md#signing) section.\n\n### AUR package\nThere's an [AUR package](https://aur.archlinux.org/packages/universal-pidff-dkms-git) for Arch Linux maintained by [@Lawstorant](https://github.com/Lawstorant).\n\n### DKMS\nDKMS will install module into system, and will update it every time you update your kernel. Module will persist after reboots. It's the preferrable way to install it on the most distros.\n\n1. Install `dkms` package from your distro package manager\n2. Clone repository to `/usr/src/universal-pidff`\n3. Install the module:\n`sudo dkms install /usr/src/universal-pidff`\n4. Update initramfs:\n`sudo update-initramfs -u`\n5. Reboot\n\nTo remove module:\n`sudo dkms remove universal-pidff/\u003cversion\u003e --all`\n\n### Manually\nBest for debugging purposes, where you need frequently change codebase/branches\n1. Install `linux-headers-$(uname -r)` and `build-essential` packages from your distro package manager\n2. Clone repository anywhere you want and `cd` into that directory\n3. `make`. Alternatively, you can enable debug logs from the driver with `make debug`\n4. Load module into system with `sudo insmod hid-universal-pidff.ko`\n\nTo unload module:\n`sudo rmmod hid_universal_pidff`\n\n### Steam Deck/SteamOS\n#### Automatic install\n```bash\n# first, let's set a password\n# (optional, skip if you already done this in the past)\npasswd deck\n\n# run installation script\nsudo sh -c \"$(curl -fsSL https://raw.githubusercontent.com/JacKeTUs/universal-pidff/main/scripts/steam-deck-install.sh)\"\n```\n#### Automatic uninstall:\n```bash\n# and this is uninstall script if needed:\nsudo sh -c \"$(curl -fsSL https://raw.githubusercontent.com/JacKeTUs/universal-pidff/main/scripts/steam-deck-uninstall.sh)\"\n\n# optionally, remove your password\n# enter current one and leave the new password blank\npasswd deck\n```\n\n#### Manual install\n```bash\n# first, let's set a password\n# (optional, skip if you already done this in the past)\npasswd deck\n\n# then, let's disable read only state\nsudo steamos-readonly disable\n\n# initialise and populate keyring\nsudo pacman-key --init\nsudo pacman-key --populate archlinux\nsudo pacman-key --populate holo\n\n# install necessary stuff\nlinux=$(pacman -Qsq linux-neptune | tail -n 1)\nsudo pacman -Syu --noconfirm base-devel fakeroot glibc git \\\n    $linux $linux-headers linux-api-headers\n\n# download AUR packege\nwget https://aur.archlinux.org/cgit/aur.git/snapshot/universal-pidff-dkms-git.tar.gz\ntar -xf universal-pidff-dkms-git.tar.gz\n\n# finally install the driver itself\ncd universal-pidff-dkms-git\nmakepkg -scri --noconfirm\n\n# optionally, remove things we needed during installation\ncd ..\nrm -rf universal-pidff-dkms-git*\n```\n\nAnd now, just reboot and enjoy!\n\n#### If you need to uninstall this driver and lock your deck again:\n```bash\nlinux=$(pacman -Qsq linux-neptune | grep -e \"[0-9]$\" | tail -n 1)\n\nsudo pacman -Rcns hid-universal-pidff-dkms-git\nsudo pacman -Rcns $linux-headers fakeroot\n\nsudo steamos-readonly enable\n\n# optionally, remove your password\n# enter current one and leave the new password blank\npasswd deck\n```\n\n### Testing\n1. Use the `test` make target as root. `sudo make test` builds module with debug, loads it and cleans the working directory.\n2. Start new terminal and run `journalctl -f -k` to monitor new kernel messages\n3. Connect wheelbase via USB to your PC\n4. To test the supported effects, use ffbplay from [ffbtools](https://github.com/berarma/ffbtools) and play the included [effect-test.ffb](./effect-test.ffb) file e.g.\n```\n\u003cpath to built ffbplay\u003e/ffbplay -d /dev/input/by-id/usb-\u003cwheelbase-id\u003e ./effect-test.ffb\n```\nMake sure that all effects were played and the wheelbase reacted accordingly.\n5. Switch back to terminal with running `journalctl` command, it should have a lot of debug messages\n\n\n## How to set up a base parameters  (max rotation degree, max power, filters, etc)?\n### MOZA\n**[Boxflat](https://github.com/Lawstorant/boxflat)** is a Linux Pit House alternative made by [@Lawstorant](https://github.com/Lawstorant)\n\n**[Android App](https://play.google.com/store/apps/details?id=com.gudsen.mozapithouse)**\n\n### Cammus\n**[Android App](https://play.google.com/store/apps/details?id=com.cammus.simulator)**\n\n### VRS DirectForce Pro\nYou can do it through VRS config tool through Steam as non-Steam game or with modified Wine prefix.\n\n\u003e [!WARNING]\n\u003e Firmware update doesn't work at this time, puts the wheelbase onto bootloop. If you need to update the wheelbase, do it from Windows (VM with USB passthrough or dualboot) for now. It is known issue, and will be fixed in long term.\n\n#### Prerequisites:\nYou need to install udev rules, which will open hidraw descriptors to the wheelbase, wheels, pedals.\n\n```\n# VRS DFP\necho 'KERNEL==\"hidraw*\", ATTRS{idVendor}==\"0483\", ATTRS{idProduct}==\"a355\", MODE=\"0666\", TAG+=\"uaccess\"' | sudo tee /etc/udev/rules.d/11-vrs.rules\n# VRS pedals\necho 'KERNEL==\"hidraw*\", ATTRS{idVendor}==\"0483\", ATTRS{idProduct}==\"a3be\", MODE=\"0666\", TAG+=\"uaccess\"' | sudo tee /etc/udev/rules.d/11-vrs.rules\n# VRS wheel\necho 'KERNEL==\"hidraw*\", ATTRS{idVendor}==\"0483\", ATTRS{idProduct}==\"a44c\", MODE=\"0666\", TAG+=\"uaccess\"' | sudo tee /etc/udev/rules.d/11-vrs.rules\n\nudevadm control --reload-rules \u0026\u0026 udevadm trigger\n```\n\n#### Steam method\n1. Add VRS config tool to Steam as non-Steam game. Rename it as you like.\n2. Compatibility -\u003e Force the use of specific Steam Play compatibility tool -\u003e set recent enough Proton on it. Proton 10, Proton Experimental, Proton GE worked fine.\n3. Change Shortcut -\u003e Launch options like so:\n```\nPROTON_ENABLE_HIDRAW=1 %command%\n```\n\n#### Modified Wine prefix\nYou need to force VRS software to use hidraw, not SDL, to communicate with devices:\n1. Create new Wine prefix for them:\n\n      `mkdir ~/.vrs-wine`\n1. Launch regedit in prefix:\n\n      `WINEPREFIX=$HOME/.vrs-wine wine regedit`\n1. Create two keys in\n  `HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\winebus`:\n\n    * `DisableInput` (DWORD) - set to `1`;\n    * `Enable SDL` (DWORD) - set to `0`; (yes, variable name contains space)\n1. Install important packages for VRS config tool to work:\n      `WINEPREFIX=$HOME/.vrs-wine winetricks win7`\n      `WINEPREFIX=$HOME/.vrs-wine winetricks dotnet48`\n\n1. Now you can launch soft through that WINEPREFIX:\n\n    `WINEPREFIX=$HOME/.vrs-wine wine VRS.exe` - launch VRS software from installation directory.\n\nNote: In order to play Damping/Friction/Inertia/Spring effects by games, you must enable `Use device and game effects` from dropdown menu for these in DirectForce configuration tool and save it to the wheelbase.\n\n### Asetek\nYou need to enable \"high torque mode\" after device is turned on/plugged in.\nMore info here: [asetek_wheelbase_cli repo](https://github.com/moonrail/asetek_wheelbase_cli)\n\n## Known issues with the driver\n- Current limit of usable buttons is 160 (up from the Linux default of 80). Create an issue if you want this increased further.\n\n## Known issues with the firmware\nYou tell me please\n\n## DISCLAIMER\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJacKeTUs%2Funiversal-pidff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJacKeTUs%2Funiversal-pidff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJacKeTUs%2Funiversal-pidff/lists"}