Il paragrafo che segue si riferisce a tutti i tipi di connessione.
Il kernel di Linux deve creare un dispositivo virtuale per poter accedere al dispositivo video e controllarlo. Esso può essere stato già creato automaticamente all'avvio del sistema; ls -l /dev/video* (con l'asterisco) o, in alternativa, find /dev -name video* oppure un'occhiata alla directory /dev con il proprio file manager preferito possono servire ad accertarsi che il dispositivo virtuale esista. In caso affermativo, si può passare alla la Sezione 3.2; altrimenti sarà necessario crearlo manualmente.
Un modo semplice per creare questo tipo di file è usare lo script MAKEDEV che, se disponibile nella propria distribuzione, dovrebbe trovarsi in /dev, oppure nelle cartelle solitamente contenenti i comandi (/bin,/sbin e simili). Le pagine di manuale relative a MAKEDEV (man MAKEDEV) possono essere d'aiuto, ma si faccia attenzione alle opzioni proprie di ciascun tipo di dispositivo. Se MAKEDEV non funziona o non esiste, o se si preferisce un approccio di basso livello, si passi al paragrafo successivo.
Un dispositivo può essere creato come blocco (come ad esempio un disco), una fifo (file-in-file-out, come per xconsole) o come un dispositivo a carattere, che rappresenta altro hardware. Ciascun dispositivo possiede una coppia di "coordinate", dette numero primario e secondario (major/minor), che dicono al kernel a cosa accedere e dove accedervi. Tali numeri non sono arbitrari. Il numero primario 81 con numeri secondari pari a 0, 1, 2 e così via, è assegnato convenzionalmente ai dispositivi Video4linux, compresi sintonizzatori TV e webcam. Per creare il dispositivo video /dev/video0, si usi il comando mknod al prompt:
# mknod /dev/video0 c 81 0 |
dove c rappresenta un dispositivo a caratteri.
Si può anche usare il seguente script, preso dal sorgente del kernel (si trova in linux/Documentation/video4linux/bttv/MAKEDEV dalla directory in cui si trovano i sorgenti):
#!/bin/bash function makedev () { for dev in 0 1 2 3; do echo "/dev/$1$dev: char 81 $[ $2 + $dev ]" rm -f /dev/$1$dev mknod /dev/$1$dev c 81 $[ $2 + $dev ] chmod 666 /dev/$1$dev done # symlink for default device rm -f /dev/$1 ln -s /dev/${1}0 /dev/$1 } # see http://roadrunner.swansea.uk.linux.org/v4lapi.shtml echo "*** new device names ***" makedev video 0 makedev radio 64 makedev vtx 192 makedev vbi 224 # "*** old device names (for compatibility only) ***" #makedev bttv 0 #makedev bttv-fm 64 #makedev bttv-vbi 224 |
E' sufficiente copiare e incollare quanto scritto sopra in un qualsiasi editor di testo, salvare il file chiamandolo MAKEDEV o anche in un altro modo, renderlo eseguibile (ad esempio con: chmod u+x MAKEDEV) e eseguirlo come root:
# ./MAKEDEV |
E' buona norma assicurarsi di avere i privilegi necessari per accedere al dispositivo una volta caricati i moduli e creati i nodi necessari. Il modo più sicuro per fare questo consiste nel garantire l'accesso per un gruppo specifico. Sul mio sistema, i membri del gruppo 'video' hanno il permesso di usare la webcam, lo scanner e altri dispositivi fotografici. Per ottenere questo risultato è necessario per prima cosa assegnare un nuovo proprietario ai dispositivi nella directory /dev (occorre essere root):
# chown root.video /dev/usb/video* |
...dove root.video sono rispettivamente il proprietario e il gruppo al quale appartengono i dispositivi. Ovviamente, il comando varia a seconda del sistema sul quale lo si esegue e del tipo di dispositivi interessati. E' importante assicurarsi di modificare i permessi dei nodi veri e propri e non quelli dei relativi collegamenti simbolici; i permessi di questi ultimi vengono modificati solo agendo sui corrispondenti permessi dei nodi a cui puntano.
Per vedere se il proprio account è membro del gruppo in questione, si esegua come root il seguente comando: grep -e video /etc/group. Si dovrebbe vedere qualcosa del genere:
video:x:44: |
...dove '44' è il numero del gruppo. Dal momento che nessun membro è inserito dopo i due punti finali, si può aggiungere, ad esempio, l'utente 'jhs' con il comando:
# adduser jhs video |
Dopodiché occorre solo garantire l'accesso in lettura e scrittura per l'utente in questione, ad esempio così:
# chmod g+rw /dev/v4l/video0 |
... dove g+rw significa aggiungere i flag read e write per il gruppo. Si veda la documentazione di chmod (man chmod o info chmod per ulteriori informazioni.