u/C0ds_

Image 1 — While playing a racing game I felt TMR/Hall Effect sticks sluggish on Linux. So I checked the driver Fuzz/Flat settings.
Image 2 — While playing a racing game I felt TMR/Hall Effect sticks sluggish on Linux. So I checked the driver Fuzz/Flat settings.
Image 3 — While playing a racing game I felt TMR/Hall Effect sticks sluggish on Linux. So I checked the driver Fuzz/Flat settings.

While playing a racing game I felt TMR/Hall Effect sticks sluggish on Linux. So I checked the driver Fuzz/Flat settings.

I finally figured out why my TMR controller (GuliKit ES PRO/Vader 4 PRO) felt like it was smoothing my inputs on CachyOS and u/DraugerOS. It turns out the xpad driver applies a default "fuzz" (anti-jitter) and "flat" (deadzone) that basically kills the 11-bit precision of these sensors.

If you run evtest, you'll probably see a fuzz of 16 or more. For a high-res stick, that's way too much.

So I got evdev-joystick (part of the joystick package on Debian or game-devices-udev on Arch/AUR).

Then: sudo evdev-joystick --evdev /dev/input/event29 --deadzone 2 --fuzz 8

sudo evdev-joystick --e /dev/input/event29 --f 6 --d 2 --a 0

This configuration is helping me a lot! It made my inputs so much more responsive and precise in Asphalt Legends (I really love this game) — I'm actually top 1000 in a competition right now because of this "speed trick".

Use evdev-joystick -h to see what can be useful to you.

I believe that these tweaks on fuzz and deadzone might not be necessary for games that don't rely on aiming or steering, but for racing, it's a game-changer.

P.S: My older post was removed cos I used AI. Sorry, bros. Here is my genuine text. I hope it helps someone.

images: my CachyOS terminal while I was doing "the speed trick", screenshots from Asphalt lederboard, some of my controllers and a book from Samuel Rawet.

Cheers

EDIT: evdev-joystick is a part of the official arch package joyutils. you don't need the AUR pacakge

 Warning: evdev-joystick --e /dev/input/event6 --d 0 (this command is shown by evdev-joystick --help but some people reported that it made "dpad stop working")

If you want to change the fuzz value better use the command like this for per-axis control:

evdev-joystick --e </path/to/event/device/file> --d <deadzone_value> --fuzz 8 --a <axis_index>

Thanks to u/king_Brad u/Criveratech u/AtMaxbo for the revision, contribution and help.

u/C0ds_ — 6 days ago

TL;DR: (English) If you are using high-resolution controllers (TMR or Hall Effect) on Linux, your driver might be "throwing away" that extra precision due to automatic smoothing filters (fuzz) and deadzones (flat). Here is how I reclaimed surgical precision.

O Problema: (PT-BR) Comprei alguns controles com sensores Hall Effect e TMR (11 ou 12 bits de resolução, ~2048 passos por eixo) esperando uma resposta imediata. No entanto, no Linux, sentia que o carro (em jogos como Asphalt) ou a mira não tinham aquela "fidelidade total". Parecia que o sistema estava atrapalhando meus movimentos.

A Causa Raiz: Investigando via evtest e evdev-joystick, descobri que o driver padrão (como o xpad) aplica valores de FUZZ e FLAT por padrão para evitar o jitter em controles baratos de 8 bits (Xbox original).

  • FUZZ: É um filtro de suavização. Se o seu stick reporta uma mudança menor que o valor de fuzz, o kernel a ignora. Para um controle TMR de alta resolução, um fuzz de 16 ou 32 mata os micro-ajustes que o sensor é capaz de fazer.
  • FLAT (Deadzone): É a zona morta aplicada em nível de hardware/kernel.

No meu caso, os eixos estavam vindo com um fuzz de 16. Em um controle de 11 bits, isso é como tentar fazer cirurgia usando luvas de boxe.

A Solução (O "Toque de Cirurgião"): Usei a ferramenta evdev-joystick para reduzir esses filtros ao mínimo.

  1. Como instalar:
  • Arch / CachyOS: paru -S game-devices-udev (ou evdev-joystick via AUR).
  • Debian / Ubuntu / Mint: sudo apt install joystick
  1. Identificação: sudo evtest /dev/input/eventXX
  2. O Ajuste: ```bash
  3. Removendo a zona morta do kernel e reduzindo a suavização sudo evdev-joystick --evdev /dev/input/eventXX --axis 0 --deadzone 0 --fuzz 6

*Nota: Deixei o fuzz em 6 para evitar ruído elétrico, mas o comportamento mudou da água para o vinho.*

Resultado: A linearidade ficou perfeita. A sensação de "escada" nas curvas desapareceu. Agora, o sistema operacional finalmente reporta os 65.536 valores lógicos (baseados nos 2.048 passos reais do TMR) sem tentar "adivinhar" ou filtrar o que estou fazendo.

Se você tem um GuliKit, Vader 4 Pro ou qualquer controle TMR/Hall Effect, faça um favor a si mesmo: limpe os filtros do seu kernel.

EDIT: Repare em qual thumbstick será aplicada a configuração. --axis 0 se refere ao movimento do thumbstick esquerdo. Portanto,

sudo evdev-joystick --evdev /dev/input/eventXX --axis 0 --deadzone 0 --fuzz 6

mudará somente o thumbstick esquerdo. Atenção: Nunca mexa nas axis 16 e 17 (0x10 e 0x11) pois são para o seu D-pad. Somente faça isso se for realmente intencional.

Use evdev-joystick --h para se orientar a respeito de qual é o eixo que deseja configurar.

Voltanto ao padrão: Para deixar do jeito que estava antes, apenas disconecte e reconecte o seu controle, pois as configurações feitas com evdev-joystick --evdev não são permanentes e são apagadas ao desligar/desconectar o controle. Isso significa que devem ser feitas toda vez que você quiser tê-las aplicadas.

Peço desculpas por não escrever esse post todo em inglês. Meu vocabulário é falho, o que me trás dificuldades de comunicar o que realmente quero dizer.

u/C0ds_ — 6 days ago