Come installare e configurare il proprio Joystick in Linux
In Linux il device joystick è presente nella directory di sistema /dev
e precisamente è rappresentato dai seguenti file:
/dev/js0
/dev/js1
/dev/js2
/dev/js3
Ognuno di questi file rappresenta un singolo dispositivo e quindi abbiamo la possibilità di avere 4 joystick contemporaneamente anche se in realtà questa situazione non si verifica mai.
Prima di procedere all'installazione si devono creare manualmente, a meno che non siano già presenti, i seguenti nodes nella directory /dev/input
:
[root@Apollo13 /]# cd /dev
Rimuove i file device attuali
[root@Apollo13 /]# rm js0
[root@Apollo13 /]# rm js1
[root@Apollo13 /]# rm js2
[root@Apollo13 /]# rm js3
[root@Apollo13 /]# mkdir input
Crea i nodes
[root@Apollo13 /]# mknod input/js0 c 13 0
[root@Apollo13 /]# mknod input/js1 c 13 1
[root@Apollo13 /]# mknod input/js2 c 13 2
[root@Apollo13 /]# mknod input/js3 c 13 3
Link a nuovi file device
[root@Apollo13 /]# ln -s input/js0 js0
[root@Apollo13 /]# ln -s input/js1 js1
[root@Apollo13 /]# ln -s input/js2 js2
[root@Apollo13 /]# ln -s input/js3 js3
Per poter utilizzare il joystick è necessario il modulo joydev, inoltre in base alle caratteristiche del nostro dispostivo si rivelano indispensabili altri moduli:
ns558 : se il nostro joystick comunica tramite la gameport
serport: se il nostro joystick comunica attraverso la porta seriale
analog : se il si si tratta di un dispositivo analogico (la maggior parte)
Nel caso che questi moduli non siano stati compilati con il kernel è necessario caricarli.
Poniamo di dover installare un joystick analogico che utilizza la gameport:
[root@Apollo13 /]# modprobe joydev
[root@Apollo13 /]# modprobe ns558
[root@Apollo13 /]# modprobe analog
A questo punto si può testare il funzionamento del joystick tramite l'utility jstest
[root@Apollo13 /]# jstest /dev/js0
jstest visualizza il tipo di joystick collegato, il numero di assi, di pulsanti e la versione del driver
Joystick (Analog 2-axis 4-button joystick) has 2 axes and 4 buttons. Driver version is 2.1.0.
Testing ... (interrupt to exit)
I valori degli assi e lo stato dei pulsanti
Axes: 0: 0 1: 0 Buttons: 0:off 1:off 2:off 3:off
Muovendo il joystick l'utility visualizzerà i valori in input. Se l'utility restituisce No such device, oppure se i valori non cambiano significa che il joystick non è riconosciuto o molto più probabilmente abbiamo commesso qualche errore nella procedura di installazione.
Normalmente il tipo di joystick viene riconosciuto automaticamente da Linux ma se il dispositivo presenta caratteristiche diverse da quelle rilevate da jstest, per esempio ha più assi o più pulsanti, è possibile caricare il modulo analog con il parametro
js=type0,type1,type2,type3
dove type0 è il tipo di joystick rappresentato da js0, type1 è il tipo di joystick rappresentato da js1 e così via...
I valori che può assumere type sono:
none Nessun dispositivo collegato
auto : Rileva automaticamente il joystick (opzione di default)
2btn : 2-Pulsanti n-Assi
y-joy : 2-Pulsanti 2-Assi
y-pad : 2-Pulsanti 2-Assi gamepads
fcs : Thrustmaster FCS joystick
chf : Joystick con un CH Flightstick Hat Switch (pulsante speciale)
fullchf : CH Flightstick con 2 Hat Switch e 6 Pulsanti
gamepad : 4/6-Pulsanti n-Assi gamepad
gamepad8 : 8-Pulsanti 2-Assi gamepad
Per esempio il comando:
[root@Apollo13 /]# modprobe analog js=fcs,none,none,none
specifica un joystick Thrustmaster FCS per js0, nessun joystick per gli altri device.
Se il joystick si discosta ancora da questi tipi standard è possibile utilizzare un tipo personalizzato di type, costruendo un numero in base alle caratteristiche della periferica e alla seguente tabella:
Bit Descrizione
0 : Axis X1
1 : Axis Y1
2 : Axis X2
3 : Axis Y2
4 : Button A
5 : Button B
6 : Button C
7 : Button D
8 : CHF Buttons X and Y
9 : CHF Hat 1
10 : CHF Hat 2
11 : FCS Hat
12 : Pad Button X
13 : Pad Button Y
14 : Pad Button U
15 : Pad Button V
16 : Saitek F1-F4 Buttons
17 : Saitek Digital Mode
19 : GamePad
20 : Joy2 Axis X1
21 : Joy2 Axis Y1
22 : Joy2 Axis X2
23 : Joy2 Axis Y2
24 : Joy2 Button A
25 : Joy2 Button B
26 : Joy2 Button C
27 : Joy2 Button D
31 : Joy2 GamePad
Se per esempio il nostro joystick dispone di 2 assi (X,Y), 3 pulsanti e un FCS Hat:
type = 2^0 + 2^1 + 2^4 + 2^5 + 2^6 + 2^11
type = 2163
[root@Apollo13 /]# modprobe analog js=2163,none,none,none
Ora abbiamo forzato Linux a riconoscere il nostro joystick, non ci resta che verificare
il funzionamento della nuova configurazione eseguendo di nuovo jstest.
In caso di ulteriori problemi, o per controllare se una determinata periferica è supportata dai driver di Linux, è utile leggere il file joystick.txt che solitamente è presente in /usr/share/doc
.