Difference between revisions of "Udev (Italiano)"

From ArchWiki
Jump to: navigation, search
(page updated)
(wikify some external links, use https for archlinux.org)
(21 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
[[Category:Hardware detection and troubleshooting (Italiano)]]
 
[[Category:Hardware detection and troubleshooting (Italiano)]]
[[Category:HOWTOs (Italiano)]]
+
{{Lowercase title}}
[[Category:Auto-mounting (Italiano)]]
+
[[cs:Udev]]
{{i18n|Udev}}
+
[[en:Udev]]
 +
[[es:Udev]]
 +
[[ru:Udev]]
 +
[[zh-CN:Udev]]
 +
[[zh-TW:Udev]]
 +
udev sostituisce in tutte le loro funzioni sia {{ic|hotplug}} che {{ic|hwdetect}}.
  
udev sostituisce in tutte le loro funzioni sia {{Codeline|hotplug}} che {{Codeline|hwdetect}}.
+
"udev" è il device manager per il kernel Linux. Principalmente, si occupa di creare i file relativi alle periferiche in {{ic|/dev}}. Esso è il successore di devfs ed hotplug, si occupa infatti dell'intera cartella {{ic|/dev}} ed delle eventuali modifiche, come l'inserimento o la rimozione di periferiche, avrà il compito di gestire le operazioni in userspace ed eventualmente caricherà i firmware relativi alle periferiche.
 
+
"udev" è il device manager per la versione 2.6 del kernel Linux. Principalmnte, si occupa di creare i file relativi alle periferiche in {{Filename|/dev}}. Esso è il successore di devfs ed hotplug, si occupa infatti dell'intera cartella {{Filename|/dev}} ed delle eventuali modifiche, come l'inserimento o la rimozione di periferiche, avrà il compito di gestire le operazioni in userspace ed eventualmente caricherà i firmware relativi alle periferiche.
+
  
 
udev carica i moduli del kernel simultaneamente, ciò può quindi comportare una maggiore velocità di avvio del sistema. Comunque uno svantaggio è che non sempre i moduli vengono caricati nel solito ordine ad ogni avvio, questo può causare problemi ad alcune schede audio o di rete(se sono presenti due o più di queste schede). Vedere più avanti per maggiori informazioni riguardo a questo problema.
 
udev carica i moduli del kernel simultaneamente, ciò può quindi comportare una maggiore velocità di avvio del sistema. Comunque uno svantaggio è che non sempre i moduli vengono caricati nel solito ordine ad ogni avvio, questo può causare problemi ad alcune schede audio o di rete(se sono presenti due o più di queste schede). Vedere più avanti per maggiori informazioni riguardo a questo problema.
 
==Il caricamento automatico dei moduli==
 
udev non caricherà nessun modulo se non è abilitata l'opzione {{Codeline|MOD_AUTOLOAD}} in {{Filename|/etc/rc.conf}}. Se viene disabilitato il caricamento automatico dei moduli, sarà necessario inserire i moduli che si intende, o che si necessita di caricare, all'interno dell'array {{Codeline|MODULES}} in {{Filename|rc.conf}}, è possibile ottenre un elenco dei moduli con il comando {{Codeline|hwdetect --modules}}. Per maggiori informazioni vedere [[hwdetect]].
 
  
 
==Le regole di udev==
 
==Le regole di udev==
Le regole di udev si trovano in {{Filename|/etc/udev/rules.d/}}, questi file avranno l'estensione {{Filename|.rules}}.
+
Le regole di udev scritte dall'amministratore di sistema, si trovano in {{ic|/etc/udev/rules.d/}}, questi file avranno l'estensione {{ic|.rules}}. Le regole fornite dall'installazione di vari pacchetti si trovano in {{ic|/lib/udev/rules.d/}}. Nel caso in cui esistano due regole con lo stesso nome sia sotto {{ic|/lib}} che sotto {{ic|/etc}}, la regola che si trova nella cartella {{ic|/etc}} avrà la precedenza.
  
 
Per maggiori informazioni su come scrivere regole per udev consultare [http://www.reactivated.net/writing_udev_rules.html il sito(in inglese)].
 
Per maggiori informazioni su come scrivere regole per udev consultare [http://www.reactivated.net/writing_udev_rules.html il sito(in inglese)].
  
 
Per ottenere una lista dei possibili attributi di una periferica utilizzabili dalle regole di udev:
 
Per ottenere una lista dei possibili attributi di una periferica utilizzabili dalle regole di udev:
  # udevadm info -a -p $(udevadm info -q path -n [nome periferica])
+
  # udevadm info -a -n [nome periferica]
  
 
Sostituendo [nome periferica] con la periferica del sistema, come '/dev/sda' oppure '/dev/ttyUSB0'.
 
Sostituendo [nome periferica] con la periferica del sistema, come '/dev/sda' oppure '/dev/ttyUSB0'.
  
Per riavviare udev una volta che sono state effettuate modifiche alle regole, eseguire il seguente comando. Le periferiche rimovibili, come le periferiche USB, probabilmente dovranno essere rimosse e reinserite perché le nuove regole abbiano effetto.
+
Udev rileva i cambiamenti alle file delle regole automaticamente, quindi i cambiamenti avranno effetto immediato senza dover riavviare udev. Comunque, le regole non verranno applicate automaticamente alle periferiche preesistenti, quindi le periferiche rimovibili come le periferiche USB, probabilmente dovranno essere rimosse e reinserite perché le nuove regole siano applicate.
# udevadm control --reload-rules
+
  
== Tips & Tricks ==
+
== Trucchi e consigli ==
 
=== UDisks ===
 
=== UDisks ===
Installare UDisks:
+
[[Pacman (Italiano)|Installare]] il pacchetto {{pkg|udisks}} e tutte le periferiche verranno montate automaticamente in GNOME e KDE SC 4.6. Non sarà necessario utilizzare regole aggiuntive per questo metodo. In aggiunta, se si utilizza HAL solamente per il mount automatico delle periferiche, a questo punto sarà possibile rimuoverlo.
pacman -S udisks
+
d tutte le periferiche verranno montate automaticamente in GNOME e KDE SC 4.6. Non sarà necessario utilizzare regole aggiuntive per questo metodo. In aggiunta, se si utilizza HAL solamente per il mount automatico delle periferiche, a questo punto sarà possibile rimuoverlo.
+
  
 
==== UDisks Wrapper ====
 
==== UDisks Wrapper ====
 
Un UDisks wrapper ha il vantaggio di essere molto facile da installare e non necessita(oppure solo in minima parte) di configurazioni. Il wrapper monterà automaticamente CD, DVD e le periferiche di archiviazione rimovibili.
 
Un UDisks wrapper ha il vantaggio di essere molto facile da installare e non necessita(oppure solo in minima parte) di configurazioni. Il wrapper monterà automaticamente CD, DVD e le periferiche di archiviazione rimovibili.
  
* [http://igurublog.wordpress.com/downloads/script-devmon/ devmon] - ([http://aur.archlinux.org/packages.php?ID=45842 disponibile su AUR]) Si tratta di un script Bash, privo di configurazione, esso permette di effettuare l'automount di periferiche CD/DVD e di dischi esterni. Permette anche di eseguire applicazioni o comandi dopo il mount, di ignorare specifiche periferiche o specifiche etichette dei volumi, e di effettuare l'umount delle periferiche rimovibili.
+
* [http://igurublog.wordpress.com/downloads/script-devmon/ devmon] - ([https://aur.archlinux.org/packages.php?ID=45842 disponibile su AUR]) Si tratta di un script Bash, privo di configurazione, esso permette di effettuare l'automount di periferiche CD/DVD e di dischi esterni. Permette anche di eseguire applicazioni o comandi dopo il mount, di ignorare specifiche periferiche o specifiche etichette dei volumi, e di effettuare l'umount delle periferiche rimovibili.
 
* [[udiskie]] - Scritto in Python. Permette il mount automatico e lo smontaggio con ogni utente.
 
* [[udiskie]] - Scritto in Python. Permette il mount automatico e lo smontaggio con ogni utente.
*  [http://aur.archlinux.org/packages.php?ID=38723 udisksevt] - Scritto in Haskell. Permette il mount automatico ad ogni utente. Ideato per essere integrato con [http://aur.archlinux.org/packages.php?ID=32005 traydevice].
+
*  [https://aur.archlinux.org/packages.php?ID=38723 udisksevt] - Scritto in Haskell. Permette il mount automatico ad ogni utente. Ideato per essere integrato con [https://aur.archlinux.org/packages.php?ID=32005 traydevice].
* [http://aur.archlinux.org/packages.php?ID=46572 udisksvm] è uno script Bash che usa udisks e [http://aur.archlinux.org/packages.php?ID=32005 traydevice] per effettuare l'automount delle periferiche rimovibili, e ne consente il controllo tramite una interfaccia grafica, mediante l'uso di una icona nell'area di notifica utilizzando i click del mouse per smontare, rimontare o espellere le periferiche.
+
* [https://aur.archlinux.org/packages.php?ID=46572 udisksvm] è uno script Bash che usa udisks e [https://aur.archlinux.org/packages.php?ID=32005 traydevice] per effettuare l'automount delle periferiche rimovibili, e ne consente il controllo tramite una interfaccia grafica, mediante l'uso di una icona nell'area di notifica utilizzando i click del mouse per smontare, rimontare o espellere le periferiche.
  
 
==== UDisks Shell Functions ====
 
==== UDisks Shell Functions ====
Line 45: Line 42:
 
* [https://bbs.archlinux.org/viewtopic.php?id=109307 udisks_functions] - Scritto per Bash.
 
* [https://bbs.archlinux.org/viewtopic.php?id=109307 udisks_functions] - Scritto per Bash.
  
* [https://bbs.archlinux.org/viewtopic.php?id=117674 bashmount] - bashmount [http://aur.archlinux.org/packages.php?ID=48524 (AUR)] è uno script bash strutturato a menù, ed ha un semplice file di configurazione che lo rende semplice da configurare ed implementare.
+
* [https://bbs.archlinux.org/viewtopic.php?id=117674 bashmount] - bashmount [https://aur.archlinux.org/packages.php?ID=48524 (AUR)] è uno script bash strutturato a menù, ed ha un semplice file di configurazione che lo rende semplice da configurare ed implementare.
  
 
=== Mount automatico delle periferiche USB ===
 
=== Mount automatico delle periferiche USB ===
{{Nota| Nelle seguenti regole, le opzioni per il comando mount sono definite con {{Codeline|<nowiki>ENV{mount_options}="relatime"</nowiki>}}, consultare {{Codeline|man mount}}(ed eventualmente {{Codeline|man ntfs-3g}}) per tutte le possibili opzioni, leggere [[Maximizing Performance#Mount options]] per informazioni relative alle performance.}}
+
{{Nota| Nelle seguenti regole, le opzioni per il comando mount sono definite con {{ic|<nowiki>ENV{mount_options}="relatime"</nowiki>}}, consultare {{ic|man mount}}(ed eventualmente {{ic|man ntfs-3g}}) per tutte le possibili opzioni, leggere [[Maximizing Performance#Mount options]] per informazioni relative alle performance.}}
{{Nota| L'opzione {{Codeline|users}} per il comando mount '''non''' permetterà comunque agli utenti di smontare il filesystem.}}
+
{{Nota| L'opzione {{ic|users}} per il comando mount '''non''' permetterà comunque agli utenti di smontare il filesystem.}}
{{Tip|L'opzione {{Codeline|noexec}} impedisce l'esecuzione di programmi residenti sul filesystem montato.}}
+
{{Tip|L'opzione {{ic|noexec}} impedisce l'esecuzione di programmi residenti sul filesystem montato.}}
  
==== Mount in {{Filename|/media}}; usando l'etichetta della partizione se presente ====
+
==== Mount in /media; usando l'etichetta della partizione se presente ====
La seguente regola imposta il mount automatico delle partizioni/periferiche identificate come {{Filename|/dev/sd*}} (pendrive USB, hard disk esterni ed in alcuni casi SD card).
+
La seguente regola imposta il mount automatico delle partizioni/periferiche identificate come {{ic|/dev/sd*}} (pendrive USB, hard disk esterni ed in alcuni casi SD card).
Se esiste una etichetta, allora il mount sarà effettuato in {{Filename|/media/<etichetta>}}, altrimenti in {{Filename|/media/usbhd-sd*}} (esempio: /media/usbhd-sdb1):
+
Se esiste una etichetta, allora il mount sarà effettuato in {{ic|/media/<etichetta>}}, altrimenti in {{ic|/media/usbhd-sd*}} (esempio: /media/usbhd-sdb1):
{{File|name=/etc/udev/rules.d/11-media-by-label-auto-mount.rules|content=<nowiki>
+
{{hc|/etc/udev/rules.d/11-media-by-label-auto-mount.rules|2=<nowiki>
 
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"
 
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"
  
Line 81: Line 78:
  
 
==== Mount in /media; usando l'etichetta della partizione se presente; con supporto alla cifratura LUKS ====
 
==== Mount in /media; usando l'etichetta della partizione se presente; con supporto alla cifratura LUKS ====
Come nella regola precedente, ma in questo caso nella periferica risiede una partizione con un filesystem criptato con LUKS, verrà aperto una finestra di {{Codeline|xterm}} dove si dovrà inserire la passphrase(supponendo che xterm sia già installato). Consultare anche [http://bbs.archlinux.org/viewtopic.php?pid=696239#p696239 questo post sul forum internazionale].
+
Come nella regola precedente, ma in questo caso nella periferica risiede una partizione con un filesystem criptato con LUKS, verrà aperto una finestra di {{ic|xterm}} dove si dovrà inserire la passphrase(supponendo che xterm sia già installato). Consultare anche [https://bbs.archlinux.org/viewtopic.php?pid=696239#p696239 questo post sul forum internazionale].
  
{{Nota| Può essere necessario modificare il percorso di {{Codeline|cryptsetup}}, a seconda della versione (es: < 1.1.1_rc2-1).}}
+
{{Nota| Può essere necessario modificare il percorso di {{ic|cryptsetup}}, a seconda della versione (es: < 1.1.1_rc2-1).}}
  
 
+
{{hc|/etc/udev/rules.d/11-media-by-label-auto-mount.rules|2=<nowiki>
{{File|name=/etc/udev/rules.d/11-media-by-label-auto-mount.rules|content=<nowiki>
+
 
KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
 
KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
 
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"
 
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"
Line 122: Line 118:
 
</nowiki>}}
 
</nowiki>}}
  
==== Mount in {{Filename|/media}};  usando l'etichetta della partizione se presente; consentire agli utenti lo smontaggio ====
+
==== Mount in /media;  usando l'etichetta della partizione se presente; consentire agli utenti lo smontaggio ====
Questa è una variante della regola precedente. Utilizza {{Codeline|pmount}} (che dovrà essere già installato) anziché {{Codeline|mount}}, consentendo agli utenti senza privilegi di root di smontare le periferiche montate da udev. Sarà necessario specificare nel comando {{Codeline|RUN}} della regola il nome utente(nell'esempio 'tomk'), rendendo questa regola non adatta a sistemi multi utente. Il supporto a LUKS è stato rimosso dal seguente esempio ma può essere reinserito come nel precedente esempio.
+
Questa è una variante della regola precedente. Utilizza {{ic|pmount}} (che dovrà essere già installato) anziché {{ic|mount}}, consentendo agli utenti senza privilegi di root di smontare le periferiche montate da udev, e di rimuovere automaticamente il punto di mount. Sarà necessario specificare nel comando {{ic|RUN}} della regola il nome utente(nell'esempio 'tomk'), rendendo questa regola non adatta a sistemi multi utente. Il supporto a LUKS è stato rimosso dal seguente esempio ma può essere reinserito come nel precedente esempio. Si dovrà modificare l'uso del comando {{ic|/bin/su}} in modo da essere eseguito dall'utente giusto per il proprio sistema. Notare che il punto di mount rimarrà se la periferica è montata, ed il sistema, avente la cartella {{ic|/media}} persistente, viene spento, dato che lo script {{ic|rc.shutdown}} userà {{ic|umount}}, che non rimuoverà il punto di mount. Per impedire che nella cartella {{ic|/media}} rimangano i vecchi punti di mount, una soluzione è quella di effettuare il mount della cartella {{ic|/media}} come {{ic|tmpfs}}.
{{File|name=/etc/udev/rules.d/11-media-by-label-with-pmount.rules|content=<nowiki>
+
 
 +
{{hc|/etc/udev/rules.d/11-media-by-label-with-pmount.rules|2=<nowiki>
 
KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
 
KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
 
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"
 
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"
Line 139: Line 136:
 
</nowiki>}}
 
</nowiki>}}
  
==== Mount in {{Filename|/mnt}}; creando un link simbolico in {{Filename|/media}} ====
+
==== Mount in /mnt; creando un link simbolico in /media ====
La seguente regola non utilizza l'etichetta per la creazione del punto di mount; invece effettua il mount delle periferiche come usbhd-sdXY in {{Filename|/mnt}} (esempio: /mnt/usbhd-sdb1) e crea un link simbolico in {{Filename|/media}}.
+
La seguente regola non utilizza l'etichetta per la creazione del punto di mount; invece effettua il mount delle periferiche come usbhd-sdXY in {{ic|/mnt}} (esempio: /mnt/usbhd-sdb1) e crea un link simbolico in {{ic|/media}}.
{{File|name=/etc/udev/rules.d/11-mnt-auto-mount.rules|content=<nowiki>
+
{{hc|/etc/udev/rules.d/11-mnt-auto-mount.rules|2=<nowiki>
 
KERNEL!="sd[a-z][0-9]", GOTO="mnt_auto_mount_end"
 
KERNEL!="sd[a-z][0-9]", GOTO="mnt_auto_mount_end"
  
Line 151: Line 148:
  
 
# Effettua il mount in /mnt e crea il link simbolico in /media
 
# Effettua il mount in /mnt e crea il link simbolico in /media
ACTION=="add", RUN+="/bin/mount -o $env{mount_options} /dev/%k /mnt/usbhd-%k", RUN+="/bin/ln -s /mnt/usbhd-%k /media/usbhd-%k"
+
ACTION=="add", RUN+="/bin/mkdir -p /mnt/usbhd-%k", RUN+="/bin/mount -o $env{mount_options} /dev/%k /mnt/usbhd-%k", RUN+="/bin/ln -s /mnt/usbhd-%k /media/usbhd-%k"
  
 
# Effettua la pulizia delle directory alla rimozione della periferica
 
# Effettua la pulizia delle directory alla rimozione della periferica
Line 160: Line 157:
 
</nowiki>}}
 
</nowiki>}}
  
==== Mount in {{Filename|/media}} ''solo'' se la partizione ha una etichetta ====
+
==== Mount in /media ''solo'' se la partizione ha una etichetta ====
{{File|name=/etc/udev/rules.d/11-media-by-label-only-auto-mount.rules|content=<nowiki>
+
{{hc|/etc/udev/rules.d/11-media-by-label-only-auto-mount.rules|2=<nowiki>
 
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_only_auto_mount_end"
 
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_only_auto_mount_end"
  
Line 183: Line 180:
 
</nowiki>}}
 
</nowiki>}}
  
==== Mount in {{Filename|/media}}; usando l'etichetta della partizione se presente; usando ntfs-3g ====
+
==== Mount in /media; usando l'etichetta della partizione se presente; usando ntfs-3g ====
Ecco un altro esempio, in questo caso viene usato {{Codeline|ntfs-3g}} per accedere in lettura e scrittua sui filesystem NTFS:
+
Ecco un altro esempio, in questo caso viene usato {{ic|ntfs-3g}} per accedere in lettura e scrittura sui filesystem NTFS:
  
{{File|name=/etc/udev/rules.d/10-my-media-automount.rules|content=<nowiki>
+
{{hc|/etc/udev/rules.d/10-my-media-automount.rules|2=<nowiki>
 
# vim:enc=utf-8:nu:ai:si:et:ts=4:sw=4:ft=udevrules:
 
# vim:enc=utf-8:nu:ai:si:et:ts=4:sw=4:ft=udevrules:
 
#
 
#
Line 210: Line 207:
 
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},gid=100,dmask=000,fmask=111,utf8"
 
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},gid=100,dmask=000,fmask=111,utf8"
  
# mount atuomatico per i filesystem ntfs usando ntfs-3g
+
# mount automatico per i filesystem ntfs usando ntfs-3g
 
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mount -t ntfs-3g -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"
 
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mount -t ntfs-3g -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"
# mount atuomatico per gli altri filesystem
+
# mount automatico per gli altri filesystem
 
ACTION=="add", ENV{ID_FS_TYPE}!="ntfs", RUN+="/bin/mount -t auto -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"
 
ACTION=="add", ENV{ID_FS_TYPE}!="ntfs", RUN+="/bin/mount -t auto -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"
  
Line 220: Line 217:
 
# Uscita
 
# Uscita
 
LABEL="my_media_automount_end"
 
LABEL="my_media_automount_end"
 
 
</nowiki>}}
 
</nowiki>}}
  
 
==== Mount delle SD card ====
 
==== Mount delle SD card ====
Le regole sopra possono essere usate anche per il mount automatico delle schede SD, basterà sostituire {{Codeline|sd[a-z][0-9]}} con {{Codeline|mmcblk[0-9]p[0-9]}}:
+
Le regole sopra possono essere usate anche per il mount automatico delle schede SD, basterà sostituire {{ic|sd[a-z][0-9]}} con {{ic|mmcblk[0-9]p[0-9]}}:
{{File|name=/etc/udev/rules.d/11-sd-cards-auto-mount.rules|content=<nowiki>
+
{{hc|/etc/udev/rules.d/11-sd-cards-auto-mount.rules|2=<nowiki>
 
KERNEL!="mmcblk[0-9]p[0-9]", GOTO="sd_cards_auto_mount_end"
 
KERNEL!="mmcblk[0-9]p[0-9]", GOTO="sd_cards_auto_mount_end"
  
Line 245: Line 241:
  
 
==== Accedere a Firmware Programmers ed a USB Virtual Comm Devices ====
 
==== Accedere a Firmware Programmers ed a USB Virtual Comm Devices ====
La seguente regola consente a normali utenti (appartenenti al gruppo "users") la possibilità di accedere ad [http://www.ladyada.net/make/usbtinyisp/ USBtinyISP] programmatori per microcontrollori AVR ed a generici (SiLabs [http://www.silabs.com/products/interface/usbtouart CP2102]) adattatori da USB a UART. Modificare i permessi secondo le esigenze. Verificato il 11-02-2010.
+
La seguente regola consente a normali utenti (appartenenti al gruppo "users") la possibilità di accedere ad [http://www.ladyada.net/make/usbtinyisp/ USBtinyISP] programmatori per micro controllori AVR ed a generici (SiLabs [http://www.silabs.com/products/interface/usbtouart CP2102]) adattatori da USB a UART. Modificare i permessi secondo le esigenze. Verificato il 11-02-2010.
  
{{File|name=/etc/udev/rules.d/50-embedded_devices.rules|content=<nowiki>
+
{{hc|/etc/udev/rules.d/50-embedded_devices.rules|2=<nowiki>
 
# USBtinyISP Programmer
 
# USBtinyISP Programmer
 
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c9f", GROUP="users", MODE="0666"
 
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c9f", GROUP="users", MODE="0666"
 
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="0479", GROUP="users", MODE="0666"
 
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="0479", GROUP="users", MODE="0666"
 +
 +
# USBasp Programmer rules http://www.fischl.de/usbasp/
 +
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="users", MODE="0666"
  
 
# Mdfly.com Generic (SiLabs CP2102) 3.3v/5v USB VComm adapter
 
# Mdfly.com Generic (SiLabs CP2102) 3.3v/5v USB VComm adapter
Line 257: Line 256:
  
 
=== Eseguire all’inserimento di un USB ===
 
=== Eseguire all’inserimento di un USB ===
 +
Consultare la guida riguardante l'[[Execute_on_USB_insert (Italiano)|esecuzione di programmi all'inserimento di una pennina USB]], oppure il [http://igurublog.wordpress.com/downloads/script-devmon/ il sito dello script wrapper devmon].
  
Consultare la guida riguardante l'[[Execute_on_usb_insert (Italiano)|esecuzione di programmi all'inserimento di una pennina USB]], oppure il [http://igurublog.wordpress.com/downloads/script-devmon/ il sito dello script wrapper devmon].
+
=== Mount dei supporti di memoria interni come utente non privilegiato ===
 +
Se si vuole effettuare il mount di periferiche interne in KDE oppure in GNOME (ma anche in altri Desktop Environment) come utente non privilegiato(senza necessità di inserire la password per elevare i privilegi), basterà creare il seguente file in [[PolicyKit]] Local Autority:
  
=== Mount dei supporti di memoria esterni come utente non privilegiato ===
+
{{hc|/etc/polkit-1/localauthority/50-local.d/50-filesystem-mount-system-internal.pkla|2=<nowiki>
 +
[Mount a system-internal device]
 +
Identity=*
 +
Action=org.freedesktop.udisks.filesystem-mount-system-internal
 +
ResultActive=yes
 +
</nowiki>}}
  
Se si vuole effettuare il mount di periferiche esterne in KDE oppure in GNOME (ma anche in altri Desktop Environment) come utente non privilegiato(senza necessità di inserire la password per elevare i privilegi), sarà necessario modificare {{Filename|/usr/share/polkit-1/actions/org.freedesktop.udisks.policy}} (ricordarsi di fare un backup prima di modificare il file) e cambiare la linea '''<allow_active>auth_admin_keep</allow_active>''' nella sezione '''<action id="org.freedesktop.udisks.filesystem-mount-system-internal">''' in '''<allow_active>yes</allow_active>'''.
+
=== Marchiare le porte SATA interne come porte eSATA ===
 +
Se si connette una dock eSATA oppure un qualsiasi adattatore eSATA il sistema riconoscerà queste porte come SATA interne. GNOME e KDE richiederanno quindi la password di root per effettuarne il mount. La seguente regola marchia come eSATA la porta SATA interna specificata. In questo modo un utente normale su GNOME potrà quindi connettere i propri dischi eSata che verranno trattati come dischi USB, senza bisogno di inserire la password di root.
  
==Risoluzione dei problemi==
+
{{hc|/etc/udev/rules.d/10-esata.rules|2=<nowiki>
=== Disabilitare il caricamento automatico dei moduli ed uso all'avvio del parametro load_modules ===
+
DEVPATH=="/devices/pci0000:00/0000:00:1f.2/host4/*", ENV{UDISKS_SYSTEM_INTERNAL}="0"
Se viene passato il parametro {{Codeline|<nowiki>load_modules=off</nowiki>}} nella riga di boot del kernel, udev salterà la fase di caricamento dei moduli. Questo parametro può essere utile ad esempio quando qualche modulo causa dei problemi. Supponendo che udev carichi un modulo malfatto che provochi un blocco del sistema, o che possa compromettere il sistema, allora si può aggirare il caricamento automatico dei moduli, e successivamente inserire il modulo(o i moduli) in blacklist.
+
</nowiki>}}
  
 +
{{Nota| Il valore di DEVPATH può essere ottenuto dopo la connessione del disco eSATA mediante il seguente comando(sostituire {{ic|sdb}} a seconda delle proprie esigenze):
 +
# find /sys/devices/ -name sdb
 +
/sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sdb
 +
}}
 +
 +
==Risoluzione di problemi==
 
=== Inserire i moduli in blacklist ===
 
=== Inserire i moduli in blacklist ===
In rari casi, Udev può sbagliarsi e caricare il modulo sbagliato. Per prevenire ciò il modulo in questione può essere inserito in una blacklist.Consultare [[Blacklisting (Italiano)|blacklisting]] per maggiori informazioni. Una volta inserito nella blacklist udev non caricherà questo modulo, ne durante la fase di avvio ''ne'' in caso di inserimento di periferiche hotplug(durante l'inserimento di una pennina USB).
+
In rari casi, udev può sbagliarsi e caricare il modulo sbagliato. Per prevenire ciò il modulo in questione può essere inserito in una blacklist.Consultare [[Blacklisting (Italiano)|blacklisting]] per maggiori informazioni. Una volta inserito nella blacklist udev non caricherà questo modulo, ne durante la fase di avvio ''ne'' in caso di inserimento di periferiche hotplug(durante l'inserimento di una pennina USB).
  
 
=== udevd fallisce all’avvio ===
 
=== udevd fallisce all’avvio ===
Dopo un passaggio ad LDAP oppure dopo un aggiornamento di un sistema LDAP-backend può accadere che {{Codeline|udevd}} non si avvii correttamente, lo si nota alla comparsa del messaggio {{Codeline|Starting UDev Daemon}}. Questo solitamente è causato da {{Codeline|udevd}} che cerca di ottenere un nome da LDAP ma non ci riesce, perché la rete non è ancora attiva. La soluzione consiste nell’assicurarsi che tutti i nomi dei gruppi del sistema siano presenti localmente.
+
Dopo un passaggio ad LDAP oppure dopo un aggiornamento di un sistema LDAP-backend può accadere che {{ic|udevd}} non si avvii correttamente, lo si nota alla comparsa del messaggio {{ic|Starting UDev Daemon}}. Questo solitamente è causato da {{ic|udevd}} che cerca di ottenere un nome da LDAP ma non ci riesce, perché la rete non è ancora attiva. La soluzione consiste nell’assicurarsi che tutti i nomi dei gruppi del sistema siano presenti localmente.
  
 
Ottenere l’elenco dei gruppi a cui fa riferimento udev, all’interno delle sue regole, e l’elenco dei gruppi attualmente presenti nel sistema:
 
Ottenere l’elenco dei gruppi a cui fa riferimento udev, all’interno delle sue regole, e l’elenco dei gruppi attualmente presenti nel sistema:
Line 279: Line 292:
 
  # cut -f1 -d: /etc/gshadow /etc/group | sort | uniq > present_groups
 
  # cut -f1 -d: /etc/gshadow /etc/group | sort | uniq > present_groups
  
Per vedere le differenze, effettuare un {{Codeline|diff}} affiancato(side-by-side):
+
Per vedere le differenze, effettuare un {{ic|diff}} affiancato(side-by-side):
 
+
  
 
  # diff -y present_groups udev_groups
 
  # diff -y present_groups udev_groups
Line 296: Line 308:
 
  ...
 
  ...
  
In questo caso, il gruppo {{Codeline|pcscd}} per qualche ragione non è presente nel sistema. Aggiungere quindi i gruppi mancanti:
+
In questo caso, il gruppo {{ic|pcscd}} per qualche ragione non è presente nel sistema. Aggiungere quindi i gruppi mancanti:
  
 
  # groupadd pcscd
 
  # groupadd pcscd
  
Assicurarsi anche che le risorse siano bloccate prima di riabilitare LDAP. Nel File {{Filename|/etc/nsswitch.conf}} dovrebbe essere presente questa riga:
+
Assicurarsi anche che le risorse siano bloccate prima di riabilitare LDAP. Nel File {{ic|/etc/nsswitch.conf}} dovrebbe essere presente questa riga:
  
 
  group: files ldap
 
  group: files ldap
Line 307: Line 319:
 
====Le periferiche BusLogic smettono di funzionare e quindi causano un blocco durante la fase di avvio.====
 
====Le periferiche BusLogic smettono di funzionare e quindi causano un blocco durante la fase di avvio.====
 
Questo è un bug del kernel e non è stato ancora risolto.
 
Questo è un bug del kernel e non è stato ancora risolto.
====Lo slot PCMCIA e lettori di card non sono gestite come supporti rimovibili====
+
====Periferiche rimovibili non vengono riconosciute come tali====
Per accedere ad esse con il comando {{Codeline|pmount}}, tramite hal aggiungere le periferiche al file {{Filename|/etc/pmount.allow}}
+
Creare una regola per udev, impostando {{ic|UDISKS_SYSTEM_INTERNAL<nowiki>=</nowiki>0}}.Per maggiori informazioni consultare le pagine di manuale di udisks.
 
+
 
=== Problemi noti relativi al caricamento automatico dei moduli ===
 
=== Problemi noti relativi al caricamento automatico dei moduli ===
 
==== Moduli per lo scaling della frequenza della CPU ====
 
==== Moduli per lo scaling della frequenza della CPU ====
L'attuale meccanismo di identificazione del modulo per lo scaling della frequenza non è adeguato, quindi per adesso è stato rimosso dal processo di caricamento automatico dei moduli. Per utilizzare lo scaling della frequenza della CPU, sarà necessario caricare il modulo appropriato esplicitamente all'interno dell'array {{Codeline|MODULES}} in {{Filename|[[rc.conf (Italiano)|rc.conf]]}}.
+
L'attuale meccanismo di identificazione del modulo per lo scaling della frequenza non è adeguato, quindi per adesso è stato rimosso dal processo di caricamento automatico dei moduli. Per utilizzare lo [[CPU Frequency Scaling (Italiano)|scaling della frequenza della CPU]], sarà necessario caricare il modulo appropriato esplicitamente all'interno dell'array {{ic|MODULES}} in {{ic|/etc/rc.conf}}. Per maggiori informazioni [[rc.conf (Italiano)|rc.conf]].
  
 
==== Problemi con l'audio o alcuni moduli non vengono caricati automaticamente ====
 
==== Problemi con l'audio o alcuni moduli non vengono caricati automaticamente ====
Alcuni utenti hanno segnalato questo problema relativo a vecchie configurazioni presenti in {{Filename|/etc/modprobe.d/sound.conf}}. Si consiglia di ripulire il file e riprovare.
+
Alcuni utenti hanno segnalato questo problema relativo a vecchie configurazioni presenti in {{ic|/etc/modprobe.d/sound.conf}}. Si consiglia di ripulire il file e riprovare.
 +
{{Nota|A partire da {{ic|udev>&#61;171}}, il moduli relativi ad OSS ({{ic|snd_seq_oss, snd_pcm_oss, snd_mixer_oss}}) non vengono caricati automaticamente di default.}}
  
 
==== Ordinamento delle periferiche, schede di rete/audio che cambiano ordine ad ogni avvio ====
 
==== Ordinamento delle periferiche, schede di rete/audio che cambiano ordine ad ogni avvio ====
Dato che udev carica i moduli asincronamente, questi vengono inizializzati in ordine differente. Questo può causare il cambiamento casuale del loro nome. Ad esempio con due schede di rete, può capitare che il loro ordine venga invertito da {{Codeline|eth0}} ad {{Codeline|eth1}}.
+
Dato che udev carica i moduli in modo asincrono, questi vengono inizializzati in ordine differente. Questo può causare il cambiamento casuale del loro nome. Ad esempio con due schede di rete, può capitare che il loro ordine venga invertito da {{ic|eth0}} ad {{ic|eth1}}.
  
Arch Linux fornisce il vantaggio di poter specificare l'ordine di caricamento dei moduli elencandoli nell'array {{Codeline|MODULES}} in {{Filename|[[rc.conf (Italiano)|rc.conf]]}}. I moduli contenuti in questo array vengono caricati prima che udev avvii il processo di caricamento automatico, si ottiene quindi il controllo dell'ordine di caricamento.
+
Un metodo per ordinare le schede di rete è quello di usare una regola che imposti staticamente il nome ad ogni interfaccia di rete. Creare il seguente file per associare al MAC adresss di ogni scheda di rete un determinato nome di interfaccia:
 
+
{{hc|/etc/udev/rules.d/10-network.rules|2=<nowiki>
# Il modulo 8139too sarà sempre caricato prima di e100
+
MODULES=(8139too e100)
+
 
+
Un altro metodo per ordinare le schede di rete è quello di usare una regola che imposti staticamente il nome ad ogni interfaccia di rete. Creare il seguente file per associare al MAC adresss di ogni scheda di rete un determinato nome di interfaccia:
+
{{File|name=/etc/udev/rules.d/10-network.rules|content=<nowiki>
+
 
SUBSYSTEM=="net", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"
 
SUBSYSTEM=="net", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"
 
SUBSYSTEM=="net", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan0"
 
SUBSYSTEM=="net", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan0"
 
</nowiki>}}
 
</nowiki>}}
  
Un paio di cose da notare:
+
Alcune cose da notare:
* Per ottenere il MAC adress di ogni scheda, usare il seguente comando: {{Codeline|udevadm info -a -p /sys/class/net/<yourdevice> | grep address}}
+
* Per ottenere il MAC adress di ogni scheda, usare il seguente comando: {{ic|udevadm info -a -p /sys/class/net/<yourdevice> | grep address}}
 
* Assicurarsi di usare caratteri minuscoli per i MAC adress in questa regola. Non funzionerà se si usano caratteri maiuscoli.
 
* Assicurarsi di usare caratteri minuscoli per i MAC adress in questa regola. Non funzionerà se si usano caratteri maiuscoli.
 
* Alcuni utenti hanno problemi a chiamare le interfacce secondo la vecchia nomenclatura: eth0, eth1 ecc. Provare con nomi come "lan" o "wlan" se si ha questo problema.
 
* Alcuni utenti hanno problemi a chiamare le interfacce secondo la vecchia nomenclatura: eth0, eth1 ecc. Provare con nomi come "lan" o "wlan" se si ha questo problema.
  
Non dimenticare di aggiornare il proprio {{Filename|/etc/rc.conf}} ed ogni altra configurazione che utilizzi la vecchia nomenclatura! .
+
Non dimenticare di aggiornare il proprio {{ic|/etc/rc.conf}} ed ogni altra configurazione che utilizzi la vecchia nomenclatura! .
  
Un ulteriore metodo per impostare i nomi alle interfacce di rete viene descritto nella pagina del wiki relativa alla configurazione della rete
+
Un ulteriore metodo per impostare i nomi alle interfacce di rete viene descritto nella [[Configuring Network (Italiano)#Nomi delle interfacce differenti|pagina del wiki]] relativa alla configurazione della rete .
http://wiki.archlinux.org/index.php/Configuring_Network<br/>
+
 
http://wiki.archlinux.org/index.php/Configuring_Network#Interface_names_varying
+
{{Nota|Con una versione recente di udev, questo problema dovrebbe essere risolto automaticamente grazie al programma {{ic|/lib/udev/write_net_rules}} che esegue lo script {{ic|75-persistent-net-generator.rules}} che crea il file {{ic|70-persistent-net.rules}}.}}
  
 
=== Problemi noti legati all'uso di Kernel personalizzati ===
 
=== Problemi noti legati all'uso di Kernel personalizzati ===
 
==== Udev non si avvia ====
 
==== Udev non si avvia ====
Assicurarsi che il kernel in uso sia ad una versione uguale o successiva alla 2.6.15. Le versioni precedenti non di dispongono degli uevent necessari ad udev per il caricamento automatico dei moduli.
+
Assicurarsi che il kernel in uso sia ad una versione uguale o successiva alla 2.6.32. Le versioni precedenti non di dispongono degli uevent necessari ad udev per il caricamento automatico dei moduli.
 +
 +
=== Periferiche IDE CD/DVD ===
 +
A partire dalla versione 170 udev non supporta più le periferiche CD-ROM/DVD-ROM, che verranno caricate come periferiche IDE dal modulo {{ic|ide_cd_mod}} e verranno identificate come {{ic|/dev/hd*}}. Le periferiche saranno utilizzabili dai tool che accedono direttamente all'hardware, come {{ic|cdparanoia}}, ma saranno invisibili ad altri programmi come KDE.
 +
 
 +
Un motivo per cui il modulo {{ic|ide_cd_mod}} viene caricato piuttosto che altri, come {{ic|st_mod}} può essere ad esempio che per qualche motivo il modulo {{ic|piix}} viene caricato dall'initramfs. In questo caso è possibile sostituirlo con {{ic|ata_piix}} nel proprio {{ic|/etc/mkinitcpio.conf}}
 +
 
 +
=== Le periferiche ottiche hanno l'ID del gruppo impostato a disk ===
 +
Se l'ID delle periferiche ottiche è impostato su {{ic|disk}} e si vuole cambiare in {{ic|optical}} sarà necessario creare una regola personalizzata di udev:
 +
{{hc|1=/etc/udev/rules.d|2=<nowiki>
 +
# permissions for IDE CD devices
 +
SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", GROUP="optical"
  
==== CD/DVD collegamenti simbolici e permessi non funzionano ====
+
# permissions for SCSI CD devices
Se si utilizza un kernel alla versione 2.6.15, sarà necessario applicare la patch relativa agli uevent da [[Arch Build System (Italiano)|ABS]] che consente di accedere a determinati uevent presenti nella versione 2.6.16). Sarà necessario sincronizzare l'albero di ABS con il comando {{Codeline|abs}}, la patch sarà nella cartella {{Filename|/var/abs/kernels/kernel26/}}.
+
SUBSYSTEMS=="scsi", KERNEL=="s[rg][0-9]*", ATTRS{type}=="5", GROUP="optical"</nowiki>}}
  
==Risorse==
+
== Altre risorse ==
 
* [http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html Homepage di Udev(in inglese)]
 
* [http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html Homepage di Udev(in inglese)]
 
* [http://www.linux.com/news/hardware/peripherals/180950-udev Una introduzione ad Udev(in inglese)]
 
* [http://www.linux.com/news/hardware/peripherals/180950-udev Una introduzione ad Udev(in inglese)]
 
* [http://vger.kernel.org/vger-lists.html#linux-hotplug Mailing list informativa di Udev]
 
* [http://vger.kernel.org/vger-lists.html#linux-hotplug Mailing list informativa di Udev]

Revision as of 16:13, 4 December 2012

udev sostituisce in tutte le loro funzioni sia hotplug che hwdetect.

"udev" è il device manager per il kernel Linux. Principalmente, si occupa di creare i file relativi alle periferiche in /dev. Esso è il successore di devfs ed hotplug, si occupa infatti dell'intera cartella /dev ed delle eventuali modifiche, come l'inserimento o la rimozione di periferiche, avrà il compito di gestire le operazioni in userspace ed eventualmente caricherà i firmware relativi alle periferiche.

udev carica i moduli del kernel simultaneamente, ciò può quindi comportare una maggiore velocità di avvio del sistema. Comunque uno svantaggio è che non sempre i moduli vengono caricati nel solito ordine ad ogni avvio, questo può causare problemi ad alcune schede audio o di rete(se sono presenti due o più di queste schede). Vedere più avanti per maggiori informazioni riguardo a questo problema.

Contents

Le regole di udev

Le regole di udev scritte dall'amministratore di sistema, si trovano in /etc/udev/rules.d/, questi file avranno l'estensione .rules. Le regole fornite dall'installazione di vari pacchetti si trovano in /lib/udev/rules.d/. Nel caso in cui esistano due regole con lo stesso nome sia sotto /lib che sotto /etc, la regola che si trova nella cartella /etc avrà la precedenza.

Per maggiori informazioni su come scrivere regole per udev consultare il sito(in inglese).

Per ottenere una lista dei possibili attributi di una periferica utilizzabili dalle regole di udev:

# udevadm info -a -n [nome periferica]

Sostituendo [nome periferica] con la periferica del sistema, come '/dev/sda' oppure '/dev/ttyUSB0'.

Udev rileva i cambiamenti alle file delle regole automaticamente, quindi i cambiamenti avranno effetto immediato senza dover riavviare udev. Comunque, le regole non verranno applicate automaticamente alle periferiche preesistenti, quindi le periferiche rimovibili come le periferiche USB, probabilmente dovranno essere rimosse e reinserite perché le nuove regole siano applicate.

Trucchi e consigli

UDisks

Installare il pacchetto udisks e tutte le periferiche verranno montate automaticamente in GNOME e KDE SC 4.6. Non sarà necessario utilizzare regole aggiuntive per questo metodo. In aggiunta, se si utilizza HAL solamente per il mount automatico delle periferiche, a questo punto sarà possibile rimuoverlo.

UDisks Wrapper

Un UDisks wrapper ha il vantaggio di essere molto facile da installare e non necessita(oppure solo in minima parte) di configurazioni. Il wrapper monterà automaticamente CD, DVD e le periferiche di archiviazione rimovibili.

  • devmon - (disponibile su AUR) Si tratta di un script Bash, privo di configurazione, esso permette di effettuare l'automount di periferiche CD/DVD e di dischi esterni. Permette anche di eseguire applicazioni o comandi dopo il mount, di ignorare specifiche periferiche o specifiche etichette dei volumi, e di effettuare l'umount delle periferiche rimovibili.
  • udiskie - Scritto in Python. Permette il mount automatico e lo smontaggio con ogni utente.
  • udisksevt - Scritto in Haskell. Permette il mount automatico ad ogni utente. Ideato per essere integrato con traydevice.
  • udisksvm è uno script Bash che usa udisks e traydevice per effettuare l'automount delle periferiche rimovibili, e ne consente il controllo tramite una interfaccia grafica, mediante l'uso di una icona nell'area di notifica utilizzando i click del mouse per smontare, rimontare o espellere le periferiche.

UDisks Shell Functions

Mentre UDisks include dei semplici metodi di mount(ed umount) delle periferiche anche da linea di comando, può essere fastidioso eseguire i comandi ogni volta. Queste funzioni della shell garantiranno un uso più veloce e facile.

  • bashmount - bashmount (AUR) è uno script bash strutturato a menù, ed ha un semplice file di configurazione che lo rende semplice da configurare ed implementare.

Mount automatico delle periferiche USB

Nota: Nelle seguenti regole, le opzioni per il comando mount sono definite con ENV{mount_options}="relatime", consultare man mount(ed eventualmente man ntfs-3g) per tutte le possibili opzioni, leggere Maximizing Performance#Mount options per informazioni relative alle performance.
Nota: L'opzione users per il comando mount non permetterà comunque agli utenti di smontare il filesystem.
Tip: L'opzione noexec impedisce l'esecuzione di programmi residenti sul filesystem montato.

Mount in /media; usando l'etichetta della partizione se presente

La seguente regola imposta il mount automatico delle partizioni/periferiche identificate come /dev/sd* (pendrive USB, hard disk esterni ed in alcuni casi SD card). Se esiste una etichetta, allora il mount sarà effettuato in /media/<etichetta>, altrimenti in /media/usbhd-sd* (esempio: /media/usbhd-sdb1):

/etc/udev/rules.d/11-media-by-label-auto-mount.rules
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"

# Importa le informazioni sui Filesystem
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Individua l'etichetta se esiste, altrimenti ne crea una
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

# Opzioni globali per il comando mount 
ACTION=="add", ENV{mount_options}="relatime"
# Opzioni di mount specifiche per i filesystem
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

# Effettua il mount della periferica
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"

# Effettua la pulizia delle directory alla rimozione della periferica
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"

# Uscita
LABEL="media_by_label_auto_mount_end"

Mount in /media; usando l'etichetta della partizione se presente; con supporto alla cifratura LUKS

Come nella regola precedente, ma in questo caso nella periferica risiede una partizione con un filesystem criptato con LUKS, verrà aperto una finestra di xterm dove si dovrà inserire la passphrase(supponendo che xterm sia già installato). Consultare anche questo post sul forum internazionale.

Nota: Può essere necessario modificare il percorso di cryptsetup, a seconda della versione (es: < 1.1.1_rc2-1).
/etc/udev/rules.d/11-media-by-label-auto-mount.rules
KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"

# Non effettua il mount di file system già montati in altri percorsi per evitare che in /media si creino voci per tutte le partizioni locali
ACTION=="add", PROGRAM=="/bin/grep -q ' /dev/%k ' /proc/self/mountinfo", GOTO="media_by_label_auto_mount_end"

# Apre la partizione LUKS se necessario
PROGRAM=="/sbin/blkid -o value -s TYPE %N",  RESULT=="crypto_LUKS", ENV{crypto}="mapper/", ENV{device}="/dev/mapper/%k"
ENV{crypto}=="", ENV{device}="%N"
ACTION=="add", ENV{crypto}!="", PROGRAM=="/usr/bin/xterm -display :0.0 -e 'echo Password for /dev/%k; /sbin/cryptsetup luksOpen %N %k'"
ACTION=="add", ENV{crypto}!="", TEST!="/dev/mapper/%k", GOTO="media_by_label_auto_mount_end"

# Opzioni globali per il comando mount
ACTION=="add", ENV{mount_options}="noatime"
# opzioni di mount specifiche per i filesystem
ACTION=="add", PROGRAM=="/sbin/blkid -o value -s TYPE %E{device}", RESULT=="vfat|ntfs", ENV{mount_options}="%E{mount_options},utf8,gid=100,umask=002"

# Individua l'etichetta se esiste, altrimenti ne crea una
PROGRAM=="/sbin/blkid -o value -s LABEL %E{device}", ENV{dir_name}="%c"
# Utilizza basename per to gestire etichette come ../mnt/foo
PROGRAM=="/usr/bin/basename '%E{dir_name}'", ENV{dir_name}="%c"
ENV{dir_name}=="", ENV{dir_name}="usbhd-%k"

# Effettua il mount della periferica
ACTION=="add", ENV{dir_name}!="", RUN+="/bin/mkdir -p '/media/%E{dir_name}'", RUN+="/bin/mount -o %E{mount_options} /dev/%E{crypto}%k '/media/%E{dir_name}'"

# Effettua la pulizia delle directory alla rimozione della periferica
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l '/media/%E{dir_name}'"
ACTION=="remove", ENV{crypto}!="", RUN+="/sbin/cryptsetup luksClose %k"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/rmdir '/media/%E{dir_name}'"

# Uscita
LABEL="media_by_label_auto_mount_end"

Mount in /media; usando l'etichetta della partizione se presente; consentire agli utenti lo smontaggio

Questa è una variante della regola precedente. Utilizza pmount (che dovrà essere già installato) anziché mount, consentendo agli utenti senza privilegi di root di smontare le periferiche montate da udev, e di rimuovere automaticamente il punto di mount. Sarà necessario specificare nel comando RUN della regola il nome utente(nell'esempio 'tomk'), rendendo questa regola non adatta a sistemi multi utente. Il supporto a LUKS è stato rimosso dal seguente esempio ma può essere reinserito come nel precedente esempio. Si dovrà modificare l'uso del comando /bin/su in modo da essere eseguito dall'utente giusto per il proprio sistema. Notare che il punto di mount rimarrà se la periferica è montata, ed il sistema, avente la cartella /media persistente, viene spento, dato che lo script rc.shutdown userà umount, che non rimuoverà il punto di mount. Per impedire che nella cartella /media rimangano i vecchi punti di mount, una soluzione è quella di effettuare il mount della cartella /media come tmpfs.

/etc/udev/rules.d/11-media-by-label-with-pmount.rules
KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"

# Individua l'etichetta
PROGRAM=="/sbin/blkid -o value -s LABEL %N", ENV{dir_name}="%c"
# utilizza basename per to gestire etichette come ../mnt/foo 
PROGRAM=="/usr/bin/basename '%E{dir_name}'", ENV{dir_name}="%c"
ENV{dir_name}=="", ENV{dir_name}="usbhd-%k"

ACTION=="add", ENV{dir_name}!="", RUN+="/bin/su tomk -c '/usr/bin/pmount %N %E{dir_name}'"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/su tomk -c '/usr/bin/pumount /media/%E{dir_name}'"
LABEL="media_by_label_auto_mount_end"

Mount in /mnt; creando un link simbolico in /media

La seguente regola non utilizza l'etichetta per la creazione del punto di mount; invece effettua il mount delle periferiche come usbhd-sdXY in /mnt (esempio: /mnt/usbhd-sdb1) e crea un link simbolico in /media.

/etc/udev/rules.d/11-mnt-auto-mount.rules
KERNEL!="sd[a-z][0-9]", GOTO="mnt_auto_mount_end"

# Opzioni globali per il comando mount
ACTION=="add", ENV{mount_options}="relatime"
# Opzioni specifiche dei filesystem
ACTION=="add", IMPORT{program}="/sbin/blkid -o udev -p %N"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

# Effettua il mount in /mnt e crea il link simbolico in /media
ACTION=="add", RUN+="/bin/mkdir -p /mnt/usbhd-%k", RUN+="/bin/mount -o $env{mount_options} /dev/%k /mnt/usbhd-%k", RUN+="/bin/ln -s /mnt/usbhd-%k /media/usbhd-%k"

# Effettua la pulizia delle directory alla rimozione della periferica
ACTION=="remove", RUN+="/bin/rm -f /media/usbhd-%k", RUN+="/bin/umount -l /mnt/usbhd-%k", RUN+="/bin/rmdir /mnt/usbhd-%k"

# Uscita
LABEL="mnt_auto_mount_end"

Mount in /media solo se la partizione ha una etichetta

/etc/udev/rules.d/11-media-by-label-only-auto-mount.rules
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_only_auto_mount_end"

# Importa le informazioni sul Filesystem
IMPORT{program}="/sbin/blkid -o udev -p %N"
ENV{ID_FS_LABEL}=="", GOTO="media_by_label_only_auto_mount_end"

# Opzioni globali per il comando mount 
ACTION=="add", ENV{mount_options}="relatime"
# Opzioni specifiche dei filesystem
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

# Effettua il mount della periferica
ACTION=="add", RUN+="/bin/mkdir -p /media/$env{ID_FS_LABEL}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/$env{ID_FS_LABEL}"

# Effettua la pulizia delle directory alla rimozione della periferica
ACTION=="remove", ENV{ID_FS_LABEL}!="", RUN+="/bin/umount -l /media/$env{ID_FS_LABEL}", RUN+="/bin/rmdir /media/$env{ID_FS_LABEL}"

# Uscita
LABEL="media_by_label_only_auto_mount_end"

Mount in /media; usando l'etichetta della partizione se presente; usando ntfs-3g

Ecco un altro esempio, in questo caso viene usato ntfs-3g per accedere in lettura e scrittura sui filesystem NTFS:

/etc/udev/rules.d/10-my-media-automount.rules
# vim:enc=utf-8:nu:ai:si:et:ts=4:sw=4:ft=udevrules:
#
# /etc/udev/rules.d/10-my-media-automount.rules

# il controllo inizia da sdb ignorando il disco di sistema
KERNEL!="sd[b-z]*", GOTO="my_media_automount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="my_media_automount_end"

# importa alcune informazioni utili come variabili
IMPORT{program}="/sbin/blkid -o udev -p %N"

# Individua l'etichetta se esiste, altrimenti ne crea una
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

# crea la directory in /media
ACTION=="add", RUN+="/bin/mkdir -p '/media/%E{dir_name}'"

# Opzioni globali per il comando mount 
ACTION=="add", ENV{mount_options}="relatime"
# opzioni di mount specifiche per i filesystem (imposta i permessi 777/666 su cartelle/file per ntfs/vfat) 
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},gid=100,dmask=000,fmask=111,utf8"

# mount automatico per i filesystem ntfs usando ntfs-3g
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mount -t ntfs-3g -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"
# mount automatico per gli altri filesystem
ACTION=="add", ENV{ID_FS_TYPE}!="ntfs", RUN+="/bin/mount -t auto -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"

# Effettua la pulizia delle directory alla rimozione della periferica
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l '/media/%E{dir_name}'", RUN+="/bin/rmdir '/media/%E{dir_name}'"

# Uscita
LABEL="my_media_automount_end"

Mount delle SD card

Le regole sopra possono essere usate anche per il mount automatico delle schede SD, basterà sostituire sd[a-z][0-9] con mmcblk[0-9]p[0-9]:

/etc/udev/rules.d/11-sd-cards-auto-mount.rules
KERNEL!="mmcblk[0-9]p[0-9]", GOTO="sd_cards_auto_mount_end"

# Opzioni globali per il comando mount
ACTION=="add", ENV{mount_options}="relatime"
# Opzioni specifiche del filesystem 
ACTION=="add", IMPORT{program}="/sbin/blkid -o udev -p %N"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

ACTION=="add", RUN+="/bin/mkdir -p /media/sd-%k", RUN+="/bin/ln -s /media/sd-%k /mnt/sd-%k", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/sd-%k"
ACTION=="remove", RUN+="/bin/umount -l /media/sd-%k", RUN+="/bin/rmdir /media/sd-%k"
LABEL="sd_cards_auto_mount_end"

Mount dei CD

Per effettuare l’auto mount dei cd basterà avere installato e configurato uno dei UDisks wrapper.

Nota: Forse questo può essere unito con la sezione Udiscks wrapper.

Accedere a Firmware Programmers ed a USB Virtual Comm Devices

La seguente regola consente a normali utenti (appartenenti al gruppo "users") la possibilità di accedere ad USBtinyISP programmatori per micro controllori AVR ed a generici (SiLabs CP2102) adattatori da USB a UART. Modificare i permessi secondo le esigenze. Verificato il 11-02-2010.

/etc/udev/rules.d/50-embedded_devices.rules
# USBtinyISP Programmer
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c9f", GROUP="users", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="0479", GROUP="users", MODE="0666"

# USBasp Programmer rules http://www.fischl.de/usbasp/
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="users", MODE="0666"

# Mdfly.com Generic (SiLabs CP2102) 3.3v/5v USB VComm adapter
SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", GROUP="users", MODE="0666"

Eseguire all’inserimento di un USB

Consultare la guida riguardante l'esecuzione di programmi all'inserimento di una pennina USB, oppure il il sito dello script wrapper devmon.

Mount dei supporti di memoria interni come utente non privilegiato

Se si vuole effettuare il mount di periferiche interne in KDE oppure in GNOME (ma anche in altri Desktop Environment) come utente non privilegiato(senza necessità di inserire la password per elevare i privilegi), basterà creare il seguente file in PolicyKit Local Autority:

/etc/polkit-1/localauthority/50-local.d/50-filesystem-mount-system-internal.pkla
[Mount a system-internal device]
Identity=*
Action=org.freedesktop.udisks.filesystem-mount-system-internal
ResultActive=yes

Marchiare le porte SATA interne come porte eSATA

Se si connette una dock eSATA oppure un qualsiasi adattatore eSATA il sistema riconoscerà queste porte come SATA interne. GNOME e KDE richiederanno quindi la password di root per effettuarne il mount. La seguente regola marchia come eSATA la porta SATA interna specificata. In questo modo un utente normale su GNOME potrà quindi connettere i propri dischi eSata che verranno trattati come dischi USB, senza bisogno di inserire la password di root.

/etc/udev/rules.d/10-esata.rules
DEVPATH=="/devices/pci0000:00/0000:00:1f.2/host4/*", ENV{UDISKS_SYSTEM_INTERNAL}="0"
Nota: Il valore di DEVPATH può essere ottenuto dopo la connessione del disco eSATA mediante il seguente comando(sostituire sdb a seconda delle proprie esigenze):
# find /sys/devices/ -name sdb
/sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sdb

Risoluzione di problemi

Inserire i moduli in blacklist

In rari casi, udev può sbagliarsi e caricare il modulo sbagliato. Per prevenire ciò il modulo in questione può essere inserito in una blacklist.Consultare blacklisting per maggiori informazioni. Una volta inserito nella blacklist udev non caricherà questo modulo, ne durante la fase di avvio ne in caso di inserimento di periferiche hotplug(durante l'inserimento di una pennina USB).

udevd fallisce all’avvio

Dopo un passaggio ad LDAP oppure dopo un aggiornamento di un sistema LDAP-backend può accadere che udevd non si avvii correttamente, lo si nota alla comparsa del messaggio Starting UDev Daemon. Questo solitamente è causato da udevd che cerca di ottenere un nome da LDAP ma non ci riesce, perché la rete non è ancora attiva. La soluzione consiste nell’assicurarsi che tutti i nomi dei gruppi del sistema siano presenti localmente.

Ottenere l’elenco dei gruppi a cui fa riferimento udev, all’interno delle sue regole, e l’elenco dei gruppi attualmente presenti nel sistema:

# fgrep -r GROUP /etc/udev/rules.d/ /lib/udev/rules.d | perl -nle '/GROUP\s*=\s*"(.*?)"/ && print $1;' | sort | uniq > udev_groups
# cut -f1 -d: /etc/gshadow /etc/group | sort | uniq > present_groups

Per vedere le differenze, effettuare un diff affiancato(side-by-side):

# diff -y present_groups udev_groups
...
network                                      <
nobody                                       <
ntp                                          <
optical                                      optical
power                                        |    pcscd
rfkill                                       <
root                                         root
scanner                                      scanner
smmsp                                        < 
storage                                      storage
...

In questo caso, il gruppo pcscd per qualche ragione non è presente nel sistema. Aggiungere quindi i gruppi mancanti:

# groupadd pcscd

Assicurarsi anche che le risorse siano bloccate prima di riabilitare LDAP. Nel File /etc/nsswitch.conf dovrebbe essere presente questa riga:

group: files ldap

Problemi noti relativi all'hardware

Le periferiche BusLogic smettono di funzionare e quindi causano un blocco durante la fase di avvio.

Questo è un bug del kernel e non è stato ancora risolto.

Periferiche rimovibili non vengono riconosciute come tali

Creare una regola per udev, impostando UDISKS_SYSTEM_INTERNAL=0.Per maggiori informazioni consultare le pagine di manuale di udisks.

Problemi noti relativi al caricamento automatico dei moduli

Moduli per lo scaling della frequenza della CPU

L'attuale meccanismo di identificazione del modulo per lo scaling della frequenza non è adeguato, quindi per adesso è stato rimosso dal processo di caricamento automatico dei moduli. Per utilizzare lo scaling della frequenza della CPU, sarà necessario caricare il modulo appropriato esplicitamente all'interno dell'array MODULES in /etc/rc.conf. Per maggiori informazioni rc.conf.

Problemi con l'audio o alcuni moduli non vengono caricati automaticamente

Alcuni utenti hanno segnalato questo problema relativo a vecchie configurazioni presenti in /etc/modprobe.d/sound.conf. Si consiglia di ripulire il file e riprovare.

Nota: A partire da udev>=171, il moduli relativi ad OSS (snd_seq_oss, snd_pcm_oss, snd_mixer_oss) non vengono caricati automaticamente di default.

Ordinamento delle periferiche, schede di rete/audio che cambiano ordine ad ogni avvio

Dato che udev carica i moduli in modo asincrono, questi vengono inizializzati in ordine differente. Questo può causare il cambiamento casuale del loro nome. Ad esempio con due schede di rete, può capitare che il loro ordine venga invertito da eth0 ad eth1.

Un metodo per ordinare le schede di rete è quello di usare una regola che imposti staticamente il nome ad ogni interfaccia di rete. Creare il seguente file per associare al MAC adresss di ogni scheda di rete un determinato nome di interfaccia:

/etc/udev/rules.d/10-network.rules
SUBSYSTEM=="net", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"
SUBSYSTEM=="net", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan0"

Alcune cose da notare:

  • Per ottenere il MAC adress di ogni scheda, usare il seguente comando: udevadm info -a -p /sys/class/net/<yourdevice>
  • Assicurarsi di usare caratteri minuscoli per i MAC adress in questa regola. Non funzionerà se si usano caratteri maiuscoli.
  • Alcuni utenti hanno problemi a chiamare le interfacce secondo la vecchia nomenclatura: eth0, eth1 ecc. Provare con nomi come "lan" o "wlan" se si ha questo problema.

Non dimenticare di aggiornare il proprio /etc/rc.conf ed ogni altra configurazione che utilizzi la vecchia nomenclatura! .

Un ulteriore metodo per impostare i nomi alle interfacce di rete viene descritto nella pagina del wiki relativa alla configurazione della rete .

Nota: Con una versione recente di udev, questo problema dovrebbe essere risolto automaticamente grazie al programma /lib/udev/write_net_rules che esegue lo script 75-persistent-net-generator.rules che crea il file 70-persistent-net.rules.

Problemi noti legati all'uso di Kernel personalizzati

Udev non si avvia

Assicurarsi che il kernel in uso sia ad una versione uguale o successiva alla 2.6.32. Le versioni precedenti non di dispongono degli uevent necessari ad udev per il caricamento automatico dei moduli.

Periferiche IDE CD/DVD

A partire dalla versione 170 udev non supporta più le periferiche CD-ROM/DVD-ROM, che verranno caricate come periferiche IDE dal modulo ide_cd_mod e verranno identificate come /dev/hd*. Le periferiche saranno utilizzabili dai tool che accedono direttamente all'hardware, come cdparanoia, ma saranno invisibili ad altri programmi come KDE.

Un motivo per cui il modulo ide_cd_mod viene caricato piuttosto che altri, come st_mod può essere ad esempio che per qualche motivo il modulo piix viene caricato dall'initramfs. In questo caso è possibile sostituirlo con ata_piix nel proprio /etc/mkinitcpio.conf

Le periferiche ottiche hanno l'ID del gruppo impostato a disk

Se l'ID delle periferiche ottiche è impostato su disk e si vuole cambiare in optical sarà necessario creare una regola personalizzata di udev:

/etc/udev/rules.d
# permissions for IDE CD devices
SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", ATTRS{media}=="cdrom*", GROUP="optical"

# permissions for SCSI CD devices
SUBSYSTEMS=="scsi", KERNEL=="s[rg][0-9]*", ATTRS{type}=="5", GROUP="optical"

Altre risorse