Nella mia /dev
cartella, vorrei che i seguenti file fossero leggibili e scrivibili dall'utente:
/dev/ttyUSB0
/dev/gpib0
Come posso fare questo senza usare chgrp
? Posso modificare /etc/udev/rules.d
ma non conosco la sintassi.
Nella mia /dev
cartella, vorrei che i seguenti file fossero leggibili e scrivibili dall'utente:
/dev/ttyUSB0
/dev/gpib0
Come posso fare questo senza usare chgrp
? Posso modificare /etc/udev/rules.d
ma non conosco la sintassi.
Risposte:
Per i dispositivi che rientrano nel sottosistema tty, è possibile impostare il loro gruppo come segue:
SUBSYSTEM=="tty", GROUP="dialout"
Si noti che, proprio come nella programmazione comune, ==
è un test per l'uguaglianza mentre =
è un compito. Quindi, l'istruzione precedente si traduce in "if SUBSYSTEM=="tty"
then assegnato GROUP="dialout"
. Un'istruzione può avere più test, che sono messi insieme e più assegnazioni.
Se si desidera modificare le autorizzazioni di lettura-scrittura-esecuzione, assegnare MODE invece di GROUP dove MODE segue la solita notazione ottale Unix, ad esempio MODE="0660"
concede al proprietario e al gruppo le autorizzazioni di lettura-scrittura. man udev
ha tutti i dettagli.
Puoi trovare molti esempi di tali regole in /lib/udev/rules.d/91-permissions.rules
Una volta che hai deciso cosa vuoi che sia la tua regola, è abbastanza semplice aggiungerla. Su un sistema derivato da Debian, vai alla directory /etc/udev/rules.d
e crea un file. I file vengono eseguiti nell'ordinamento. Quindi, per rendere l'ultimo file da leggere, sovrascrivendo quelli precedenti, prova un nome come 99-instruments.rules
. Quindi inserisci le tue regole in quel file, una per riga. (Se necessario, le linee possono essere estese inserendo una barra rovesciata alla fine della linea, proprio come nella shell.)
Quindi, se si desidera modificare il gruppo e le autorizzazioni sui dispositivi tty, il file /etc/udev/rules.d/99-instruments.rules
potrebbe essere costituito da un'unica riga:
SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"
Per assicurare che il tuo nuovo file stesso abbia le consuete autorizzazioni:
sudo chown root:root /etc/udev/rules.d/99-instruments.rules
sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules
Dopo aver creato il file, udevd potrebbe leggerlo automaticamente. In caso contrario, puoi forzarlo a rileggere i suoi file con:
udevadm control --reload-rules
Se vuoi avere un controllo più preciso su quali dispositivi rispondono a quali regole, puoi saperne di più su come udev vede i tuoi dispositivi esaminando / sys /. In questo momento, non ho accesso a una macchina con un ttyUSB o un HPIB, quindi facciamo un esempio di disk sda. Correre:
udevadm info --attribute-walk --path=/sys/block/sda
Questo fornisce molte informazioni che assomigliano a:
. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .
Queste righe sono tutte nella forma adatta all'uso come if
clausole nelle regole. Quindi, ad esempio, per modificare la proprietà su tutti i dispositivi a blocchi contrassegnati come non rimovibili, utilizzeremo la regola:
SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024
Con le informazioni provenienti da udevadm
, si possono sviluppare regole che possono colpire specificamente i dispositivi di interesse.
Penso che suggerirei di rendere la regola un po 'più restrittiva di quella di John. Ad esempio, creare un file come /etc/udev/rules.d/99-tty-dialout.rules
:
SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"
È possibile utilizzare udevadm
per determinare dispositivi SUBSYSTEM==
e KERNEL==
valori. Per esempio:
$ udevadm info -a -n /dev/tty0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/virtual/tty/tty0':
KERNEL=="tty0"
SUBSYSTEM=="tty"
DRIVER==""
ATTR{active}=="tty1"