3. Accedere al dispositivo video

Il paragrafo che segue si riferisce a tutti i tipi di connessione.

3.1. Il Video Device Node

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

3.2. Gruppi e permessi

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.