Attivare il joystick su porta game

Da Linux@P2P Forum Italia.

Far funzionare un joystick su gameport (porte a 15 pin viste spesso vicino ai connettori sulle schede audio) potrebbe rivelarsi un' operazione non del tutto banale, in particolar modo se si dispone di un chip audio integrato. Nonostante questo tipo di porta sia praticamente in disuso (i PC più recenti non le montano) tutte le schede e chip audio continuano a supportarle.

I driver ALSA (Advanced Linux Sound Architecture) (utilizzati da quasi la totalità dei chip audio) hanno sempre supportato le gameport ma, di default, disattivato la gestione delle porte per i chip integrati. Pertanto collegando semplicemente il joystick alla porta game, non si ricaverà nulla di fatto. Al contrario nelle schede audio retail la porta game resta attivata e la procedura risulta essere più semplice.

La guida che segue è stata realizzata per Ubuntu 7.10 Gutsy Gibbon, ma dovrebbe risultare valida anche per altre distro Debian based.


Segnali009.png Convenzioni Segnali009.png
All'inizio di ogni comando troverete uno di questi due simboli: $ (dollaro) e # (cancelletto). La presenza di $ indica che il comando può essere eseguito anche come normale utente, mentre il simbolo # indica che il comando che lo segue deve essere eseguito con privilegi di amministratore (root). Da utenti normali è possibile divenire root in questo modo: da terminale, si digiti:
$ su

oppure, su Ubuntu e varianti:

$ sudo su

Verrà richiesta la password di amministratore (su Ubuntu e varianti quella dell'utente): per motivi di sicurezza e riservatezza non verrà mostrata durante la digitazione.

A questo punto (si noti # al posto di $, segno che ora si è root) sarà possibile lanciare il comando:

# comando

NOTA: per Ubuntu e varianti, nel caso si necessiti di eseguire solo pochi comandi, esiste un'alternativa: basta far precedere il comando da eseguire da "sudo", in questo modo:

$ sudo comando

Per altre indicazioni sulle convenzioni della linea di comando vedere "introduzione all'uso della shell"

Indice

Prerequisiti

Prima di tutto occorre conoscere la scheda audio (e il relativo chip) a disposizione. Apriamo quindi la nostra sessione terminale:

# lspci | grep audio

otterremo l'elenco delle periferiche audio connesse al bus PCI. Nel nostro caso abbiamo un chip C-Media 8738:

02:0d.0 Multimedia audio controller: C-Media Electronics Inc CM8738 (rev 10)

Successivamente dobbiamo capire quale driver il nostro sistema usi per sfruttarla:

$ lsmod | grep snd_

Individuiamo il modulo relativo al chip audio (si chiamerà probabilemnte snd_modello) che nel nostro caso è snd_cmipci (chip CM8738). A questo punto:

# gedit /usr/share/doc/alsa-base/driver/joystick.txt

E individuiamo il nostro chip nell'elenco. Ora occorre installare i tools per il test e la calibrazione del joystick (ossia le joystick testing utilities):

# apt-get install joystick

e, se si desidera un interfaccia grafica per la calibrazione, anche:

# apt-get install jscalibrator

Attivare la porta game

Se abbiamo una scheda audio retail la porta game dovrebbe essere già attivata e si può pertanto passare direttamente alla sezione successiva della guida. Nel caso di chip audio integrato, invece, dobbiamo fare in modo che il driver ALSA possa attivare la gameport.

Leggiamo la riga del file joystick.txt relativa al modulo cmipci (che è quello specifico del chip) CM8738. Per altri chip fate riferimento alla riga del relativo modulo):

cmipci		joystick_port	0 = disable (default), 1 = auto-detect, 
                               		manual: any address (e.g. 0x200)

significa che per attivare la porta game bisogna passare al modulo cmipci (snd-cmipci) l'opzione joystick_port=1

torniamo al terminale

# gedit /etc/modprobe.d/options

Aggiungiamo la riga

options snd-cmipci joystick_port=1

questo farà sì che al boot il modulo cmipci venga caricato con la gameport attivata.

Salviamo e riavviamo (con il joystick connesso).

Caricare moduli nel kernel

Ora dovremmo avere la porta attiva e non ci resta che caricare nel kernel i moduli necessari. Considerate che il joystick viene rilevato solo quando vengono caricati i moduli e quindi bisogna che a questo punto sia già connesso. Se disconnette e riconnettete il joystick, sappiate che bisognerà scaricare e ricaricare i moduli perchè venga rilevato e venga creato il nodo js0 in /dev/input.

# modprobe joydev
# modprobe analog 

per un joystick generico. I moduli specifici per altri joystick li trovate in fondo a questa guida.

Io posseggo un MS Sidewinder e quindi invece del modulo analog caricherò:

# modprobe sidewinder

Se invece abbiamo una scheda retail non serve passare l'pzione, ma dobbiamo caricare il modulo ns558, se non è già presente (controlliamo con lsmod).

# modprobe ns558

A questo punto in \dev\input\ dovrebbe essere comparso un nuovo nodo js0 il che significa che il sistema “sente” il joystick.

Controlliamo:

$ jstest /dev/input/js0

Il comando ritornerà una serie di valori numerici per gli assi e per i bottoni del joystick. Possiamo già verificare come i valori cambino se muoviamo il joystick o i tasti. Il joystick funziona.

ctrl+c per interrompere e tornare al prompt

# gedit /etc/modules 

Qui vediamo i moduli che vengo caricati al boot. Aggiungiamo quindi le seguenti due (o tre) righe

ns558 (inserite questa riga solo se avete una scheda retail ed il vostro driver non lo carica di default)
joydev
sidewinder  (oppure analog o altro a seconda della periferica)

Salviamo. Un bel riavvio per testare se tutto parte a dovere a questo punto non guasta. Riavvio o no, non resta che calibrare il joystick con

$ jscal /dev/input/js0

oppure con la più comoda GUI

$ jscalibrator

Ricordate di salvare il file di calibrazione.

In /lib/modules/2.6.22-14-generic/kernel/drivers/input/joystick sono presenti tutti i moduli per l'hardware supportato.

Informazioni sui driver

Sintetizzo di seguito le informazioni che ho trovato in giro, senza pretendere che possano essere esaustive.

Driver generico

La maggior parte dei joystick funziona (anche) con il modulo analog. Questo modulo in generale supporta joystick/gamepad


Periferica Modulo Note
Microsoft Sidewinder sidewinder anche analog, limite 4 pulsanti
Logitech adi anche analog, limite 4 pulsanti
Gravis grip
FPGaming A3D-MadCatz A3D a3d
ThrustMaster DirectConnect tmdc
Creative Labs Blaster cobra
Genius Digital gf2k
InterAct Digital interact

Link esterni

Atre informazioni su moduli e periferiche compatibili potete trovarle. qui (informazioni in inglese)

Strumenti personali
Namespace
Varianti
Azioni
Navigazione
CollectionTricks
Siti amici
Strumenti