| .gitignore | ||
| gamesir-keepalive.c | ||
| gamesir-keepalive.service | ||
| install.sh | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| uninstall.sh | ||
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 bloqueantesreaddo 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
evdevdo 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:
- Compila o binário em C com otimizações (
-O2). - Instala o executável em
~/.local/bin/gamesir-keepalive. - Configura a unidade do systemd de usuário em
~/.config/systemd/user/gamesir-keepalive.service. - 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.