Linux'ta Steam'de Gamepad Çalışmıyor: Tanılama, udev İzinleri ve Steam Input
Sorunların %90'ında durum şuna indirgenir: Linux gamepad'i görür ancak Steam gerekli cihazlara (/dev/hidraw* ve/veya /dev/uinput) erişemez veya Steam Input, "donanım" girişiyle çatışarak çift tuş basımlarına veya hatalı eksenlere neden olur. Aşağıda kısa bir kontrol planı ve nokta atışı düzeltmeler yer almaktadır.
İçindekiler
Linux'un gamepad'i görüp görmediğini kontrol etme
- Bağlantıdan hemen sonra sistemde neyin oluştuğunu kontrol edin:
sudo dmesg -T | tail -n 80
ls -l /dev/input/by-id/ | tail -n 50
ls -l /dev/input/event* /dev/input/js* /dev/hidraw* 2>/dev/null
- Girişi Steam dışında test edin:
sudo evtest # /dev/input/eventX kontrolü
jstest /dev/input/js0 2>/dev/null || true
Eğer ne event*, ne js*, ne de hidraw* yoksa sorun Steam kaynaklı değildir: kabloyu/portu/BT bağlantısını, gücü, çekirdek modülünü ve denetleyici uyumluluğunu kontrol edin.
Hızlı semptom tablosu
| Semptom | En sık karşılaşılan neden | Kontrol edilecekler |
|---|---|---|
| Linux'ta çalışıyor, Steam'de çalışmıyor | hidraw üzerinde izin eksikliği | ls -l /dev/hidraw*, getfacl |
| Steam menüsünde çalışıyor, oyunda çalışmıyor | uinput erişimi yok | ls -l /dev/uinput, `lsmod \ |
| Çift giriş | Oyun donanımı okuyor + Steam Input sanal gamepad oluşturuyor | Oyuna özel Steam Input ayarları |
| Hatalı eksenler/tetikler | Uygun olmayan Steam Input modu/SDL eşlemesi | Oyun için Steam Input'u kapatıp açma |
Steam Input ve /dev/uinput rolü
Steam genellikle denetleyiciyle hidraw üzerinden iletişim kurar ve ardından uinput aracılığıyla bir sanal gamepad oluşturur. Bu nedenle tipik bir arıza senaryosu şöyledir: Steam arayüzünde gamepad tepki verir ancak oyunda sessizlik vardır.
Kontrol edin:
ls -l /dev/uinput
lsmod | grep -E '^uinput' || echo "uinput modülü yüklenmedi"
Modül yoksa:
sudo modprobe uinput
Oyunda çift tuş basımları veya garip eksenler varsa — Steam Input'u sadece bu oyun için değiştirmeyi deneyin (oyun özellikleri → denetleyici). Genel ayarlar ve oyuna özel ayarlar çatışabilir.
udev, uaccess (ACL) ve Flatpak incelikleri
Doğru hedef: chmod 666 yapmadan aktif kullanıcıya gerekli cihazlara erişim sağlamaktır. systemd sistemlerinde bu genellikle TAG+="uaccess" (ACL) ve 0660 modu ile yapılır.
ACL izinlerinin verilip verilmediğini kontrol etme
İzinlerdeki "artı" işareti ACL anlamına gelir:
ls -l /dev/hidraw0 /dev/uinput 2>/dev/null
getfacl /dev/hidraw0 /dev/uinput 2>/dev/null || true
hidraw için nokta atışı udev kuralı (şablon)
- VID/PID değerlerini öğrenin:
lsusb
# veya belirli bir hidraw biliyorsanız şöyle:
udevadm info --query=all --name=/dev/hidraw0 | grep -E 'ID_VENDOR_ID|ID_MODEL_ID'
- Bir dosya oluşturun, örneğin:
/etc/udev/rules.d/72-gamepad-hidraw-uaccess.rules
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="YYYY", MODE:="0660", GROUP="input", TAG+="uaccess"
- Uygulayın:
sudo udevadm control --reload-rules
sudo udevadm trigger
Her şey için SUBSYSTEM=="hidraw", MODE="0666" şeklinde bir kural oluşturmayın. Bu, tüm HID cihazlarına erişimi genişletir ve güvenliği zayıflatır.
Steam Flatpak olarak kurulmuşsa
Flatpak sandık ortamı sistem udev kurallarının yerine geçmez: hidraw/uinput erişimi yine de ana makinede belirlenir. Bu nedenle:
- önce ana makinede doğru izinleri/ACL'leri sağlayın (yukarıdaki adımlar),
- ardından Steam'i yeniden başlatın ve gamepad'i yeniden bağlayın.
Yaygın hatalar
- Gamepad hiçbir yerde tanınmıyor:
/dev/inputve/dev/hidrawiçinde cihaz yok → kabloyu/BT bağlantısını, gücü,dmesggünlüklerini, uyumluluğu ve çekirdek modüllerini kontrol edin. evtestiçinde her şey var, Steam görmüyor: neredeyse her zamanhidrawizinleri sorunu →getfacl /dev/hidraw0kontrol edin,uaccessiçeren udev kuralı ekleyin.- Steam'de çalışıyor, oyunda çalışmıyor:
/dev/uinputerişimi yok veyauinputmodülü yüklenmemiş →lsmod | grep uinput,modprobe uinput. - Çift giriş: Oyun için Steam Input'u devre dışı bırakın veya tam tersine sadece Steam Input'u açık bırakın; paralel olarak giriş haritalayıcıları/emülatörleri çalıştırmayın.
- Eksenler/tetikler "eğri": Direksiyonlar/HOTAS ve standart dışı cihazlar için genellikle oyuna özel Steam Input'u kapatmak ve oyun içindeki kontrolleri yapılandırmak yardımcı olur.
SSS
Kullanıcıyı input grubuna eklemek gerekir mi?
Bu hızlı bir geçici çözümdür, ancak genellikle tüm giriş cihazlarına erişimi genişletmemek için nokta atışı udev kuralları + uaccess daha iyidir.
Neden sadece chmod 666 /dev/uinput yapamıyoruz?
Bu güvenli değildir ve kararsızdır: izinler yeniden bağlanma/yeniden başlatma sonrası sıfırlanır. Doğrusu, erişimi udev üzerinden kalıcı hale getirmektir.
Nedeni hızlıca bulmak için hangi tanılama verilerini sağlamak gerekir? Komutların çıktıları:
lsusb
ls -l /dev/input/event* /dev/input/js* /dev/hidraw* /dev/uinput 2>/dev/null
getfacl /dev/hidraw0 /dev/uinput 2>/dev/null || true
lsmod | grep -E '^uinput' || true
sudo dmesg -T | tail -n 120