gamesir-keepalive/README.md

2.5 KiB

gamesir-keepalive

Fix em C nativo para o problema de desconexão/reconexão contínua em loop de controles GameSir (como Tegenaria Lite, Nova Lite e modelos similares com ID USB 3537:1093) no Linux.


📌 O Problema

Em distribuições Linux, controles GameSir entram em um ciclo de desconexão e reconexão USB a cada ~3 segundos:

usb 1-2: USB disconnect, device number X
usb 1-2: new full-speed USB device number Y

Isso ocorre porque o firmware do controle espera que algum processo do sistema mantenha o arquivo de eventos (/dev/input/by-id/*joystick*) aberto para leitura contínua. Caso contrário, ele sofre um timeout interno e reinicia o barramento USB.

Muitos usuários notam que abrir a Steam "resolve" temporariamente o problema — isso acontece porque o subsistema Steam Input abre o joystick em segundo plano para escutar comandos.


🚀 Como este projeto resolve

Este projeto implementa um daemon em C nativo ultraleve e de alta performance:

  • Uso de CPU: 0.0% (utiliza chamadas bloqueantes read do kernel).
  • Consumo de Memória: ~700 KB - 1 MB (não utiliza runtime interpretado do Python).
  • Zero vazamento de memória: Testado e auditado com Valgrind Memcheck (0 errors, 0 memory leaks).
  • Tratamento de Sinais: Suporta encerramento limpo via SIGTERM/SIGINT.
  • Auto-reconexão: Caso o controle seja desplogado e plugado novamente, o daemon restabelece o descritor automaticamente.
  • Transparente: Não interfere em jogos nem no Steam Input (o subsistema evdev do Linux permite múltiplos leitores simultâneos).

📥 Instalação Rápida

Clone o repositório e execute o script instalador:

git clone https://github.com/muriloscolari/gamesir-keepalive.git
cd gamesir-keepalive
./install.sh

O install.sh faz tudo sozinho:

  1. Compila o binário em C com otimizações (-O2).
  2. Instala o executável em ~/.local/bin/gamesir-keepalive.
  3. Configura a unidade do systemd de usuário em ~/.config/systemd/user/gamesir-keepalive.service.
  4. Habilita e inicializa o serviço automaticamente na inicialização da sua sessão.

🔍 Verificar status

Para checar se o serviço está ativo:

systemctl --user status gamesir-keepalive.service

Para acompanhar os logs em tempo real:

journalctl --user -u gamesir-keepalive.service -f

🗑️ Desinstalação

Para remover completamente o serviço e o binário:

cd gamesir-keepalive
./uninstall.sh

📄 Licença

MIT License.