Repository 32bit  Forum
Repository 64bit  Wiki

CD-ROM auto mounting ed unmounting: differenze tra le versioni

Da Slacky.eu.
m (Ivman e pmount)
m (Configurazione)
Riga 61: Riga 61:
* ''IvmConfigActions.xml'' specifica quali azioni deve eseguire ivman quando viene inserito/disinserito un dispositivo rimuovibile
* ''IvmConfigActions.xml'' specifica quali azioni deve eseguire ivman quando viene inserito/disinserito un dispositivo rimuovibile
* ''IvmConfigBase.xml'' contiene le opzioni che influenzano il comportamento di ivman
* ''IvmConfigBase.xml'' contiene le opzioni che influenzano il comportamento di ivman
* IvmConfigConditions.xml specifica quali azioni deve eseguire ivman in risposta a determinati eventi HAL sulla condizione dell'hardware, come la pressione del pulsante di poweroff
+
* ''IvmConfigConditions.xml'' specifica quali azioni deve eseguire ivman in risposta a determinati eventi HAL sulla condizione dell'hardware, come la pressione del pulsante di poweroff
* IvmConfigProperties.xml specifica quali azioni deve compiere ivman quando determinate proprietà dell'hardware cambiano, come la chiusra dello schermo di un portatile
+
* ''IvmConfigProperties.xml'' specifica quali azioni deve compiere ivman quando determinate proprietà dell'hardware cambiano, come la chiusra dello schermo di un portatile
Come appare evidente, le potenzialità di ivman sono infinite. Con ivman possiamo far si che quando chiudiamo il display del portatile il sistema vada in ibernazione automatica, possiamo far si che venga eseguito automaticamente il nostro lettore multimediale preferito all'inserimento di un CD-Audio o di un DVD, e via discorrendo. E' vero che alcune di queste operazioni è possibile ottenerle anche configurando correttamente il desktop manager, ma per altre questo non è possibile. Inoltre, considerando che linux non è solo Desktop, ivman funziona indipendentemente da questo e ci permette di avere le stesse feature anche in command line.
Come appare evidente, le potenzialità di ivman sono infinite. Con ivman possiamo far si che quando chiudiamo il display del portatile il sistema vada in ibernazione automatica, possiamo far si che venga eseguito automaticamente il nostro lettore multimediale preferito all'inserimento di un CD-Audio o di un DVD, e via discorrendo. E' vero che alcune di queste operazioni è possibile ottenerle anche configurando correttamente il desktop manager, ma per altre questo non è possibile. Inoltre, considerando che linux non è solo Desktop, ivman funziona indipendentemente da questo e ci permette di avere le stesse feature anche in command line.

Versione delle 15:08, 19 ott 2007

Indice

Disclaimer

L'autore di questa guida, i suoi collaboratori e slacky.eu non si riterranno responsabili di eventuali danni provocati al vostro computer.

Informazioni

Questa guida è riferita ad un sistema con Slackware GNU/Linux 12.0. I principi in essa esposti comunque sono applicabili a qualsiasi distribuzione GNU/Linux.

Ovviamente, per poter avere successo nell'operazione, è necessario avere una buona conoscenza della distribuzione ed una buona padronanza dei comandi di base.

Introduzione

Uno degli ostacoli che storicamente hanno scoraggiato il maggior numero di utenti all'utilizzo di GNU/Linux è la gestione dei dispositivi rimuovibili. Il concetto di mounting ed unmounting, probabilmente per l'assuefazione ai sistemi Windows, risulta sempre difficile da capire e spesso si scontra con necessità di configurazione che esulano dalle conoscenze degli utenti normali.

In alcuni casi, anche per gli utenti avanzati, la necessità di tornare al Desktop o switchare su un virtual terminal per smontare manualmente il dispositivo, può essere scomodo od addirittura impossibile. Basti pensare allo scenario d'utilizzo di un videogame diviso in più CD-ROM, che richiede il cambio del CD-ROM durante il suo utilizzo.

Numerosi tentativi sono stati fatti nel tempo per permettere alle distribuzioni Linux di comportarsi come il suo antagonista commerciale, di volta in volta utilizzate da distribuzioni più "user friendly" di Slackware (io le definisco ignoranti), come Fedora od Ubuntu. Purtroppo il più delle volte queste soluzioni erano scadenti e richiedevano oscenità come la modifica del kernel o l'alterazione dei file di configurazione con l'aggiunta di spazzatura di dubbio gusto. Forse anche per questo motivo Slackware non ha mai adottato meccanismi differenti da quello standard, la digitazione esplicita dei comandi mount ed umount.

Oggi però, con l'avvento di HAL e D-BUS, finalmente inclusi di default nella versione 12.0 della nostra amata distribuzione, è possibile tramite l'utilizzo di un semplice tool userspace abbattere questo storico taboo.

Ivman e pmount

Il magico tool oggetto di questa guida si chiama Ivman. Lo scopo di Ivman è gestire gli eventi di HAL, eseguendo comandi specifici ogni volta che viene rilevato l'inserimento d'un dispositivo, il cambiamento di una proprità o di uno stato. Alcuni esempi possono essere la chiusura dello schermo di un portatile, l'inserimento di un CD-ROM o la pressione del tasto di espulsione del medesimo.

La bellezza di Ivman risede nella sua non-invasività, essendo un tool userspace, nonchè nella sua integrazione con HAL. Differentemente da tool oramai obsoleti come Supermount, Ivman è quindi in grado di funzionare in modo del tutto trasparente, senza richiedere modifiche aggiuntive ad altri software, come il protocollo media:/ di KDE, con cui non va minimamente in conflitto. Addirittura, ivman lascia un tempo di 3 secondi fra il rilevamento ed il montaggio di un volume, in modo da permettere ad altri eventuali tool di automounting di effettuare l'operazione al posto suo.

Come è ben noto agli utenti di distribuzioni come Slackware, il mounting o l'unmounting dei volumi rimuovibili è un operazione che, tra le altre cose, richiede un certa accortezza nella configurazione dei privilegi. Di default, in ambiente GNU/Linux l'operazione di mount/unmount è consentita solo all'utente root e salvo differenti impostazioni una volta montato un volume esso spesso è accessibile solo ed unicamente a quell'utenza. Questo ovviamente è estremamente scomodo in un ambiente multiutente in cui l'utenza root viene utilizzata solo a scopi amministrativi.

Nel maggior parte dei casi è possibile alterare questo comportamento impostando le dovute opzioni all'interno del file /etc/fstab in modo che anche gli utenti abbiano il diritto di montare/leggere/smontare i volumi. Nel caso però di mounting/unmounting automatico su base HAL, il discorso si complica, in quanto spesso non esiste una riga corrispondente di fstab da utilizzare.

Per risolvere il problema Ivman fa ampio utilizzo di un utility chiamata pmount, acronimo di "Policy Mount". Come da pagina man, pmount è un wrapper di mount che permette il mounting dei volumi rimuovibili con privilegi d'utenza senza che esista una riga corrispondente di fstab.

Vediamo dunque come installare e configurare entrambi questi fantastici tool.

Installazione

Prima di tutto è bene procedere all'installazione di pmount. Scarichiamo i sorgenti di pmount dal homepage del progetto [1], quindi procediamo come al solito (ricordandosi di usare l'utenza root):

tar -zxvf pmount-0.9.13.tar.gz
cd pmount-0.9.13
./configure --prefix=/usr
make
make install

A questo punto il tool sarà disponibile, senza necessità di ulteriori configurazioni. Procediamo quindi al download di ivman dall'homepage del progetto [2] e procediamo con le solite operazioni di compilazione ed installazione:

tar -jxvf ivman-0.6.14.tar.bz2
cd ivman-0.6.14
./configure --prefix=/usr --sysconfdir=/etc
make
make install

fatto ciò, entrambi i programmi saranno installati e pronti per la configurazione.

Configurazione

I file interessati per la configurazione di ivman risiedono nella directory /etc/ivman.

  • IvmConfigActions.xml specifica quali azioni deve eseguire ivman quando viene inserito/disinserito un dispositivo rimuovibile
  • IvmConfigBase.xml contiene le opzioni che influenzano il comportamento di ivman
  • IvmConfigConditions.xml specifica quali azioni deve eseguire ivman in risposta a determinati eventi HAL sulla condizione dell'hardware, come la pressione del pulsante di poweroff
  • IvmConfigProperties.xml specifica quali azioni deve compiere ivman quando determinate proprietà dell'hardware cambiano, come la chiusra dello schermo di un portatile

Come appare evidente, le potenzialità di ivman sono infinite. Con ivman possiamo far si che quando chiudiamo il display del portatile il sistema vada in ibernazione automatica, possiamo far si che venga eseguito automaticamente il nostro lettore multimediale preferito all'inserimento di un CD-Audio o di un DVD, e via discorrendo. E' vero che alcune di queste operazioni è possibile ottenerle anche configurando correttamente il desktop manager, ma per altre questo non è possibile. Inoltre, considerando che linux non è solo Desktop, ivman funziona indipendentemente da questo e ci permette di avere le stesse feature anche in command line.

Un analisi completa di tutto quello che è possibile fare con ivman esula dallo scopo di questo articolo, per cui concentriamoci sull'alterazione del comportamento standard del CD-ROM.

A tal scopo, modifichiamo innanzitutto il file /etc/ivman/IvmConfigBase.xml in modo da far si che ivman utilizzi il gruppo predefinito di Slackware per il mounting/unmointing dei dispositivi rimuovibili:

    <!-- group for Ivman to run as. Should have permissions to run 'pmount'. -->
    <ivm:Option name="group" value="plugdev" />

Di default, ivman tenta di usare l'utente "ivman" per eseguirsi all'interno del sistema. Per questo, è indispensabile aggiungere l'utente per far funzionare correttamente il demone:

useradd -g plugdev ivman

ed assicuriamoci che pmount e pumount abbiano il suid bit impostato.

chmod u+s /usr/bin/pmount /usr/bin/pumount

Se si vuole cambiare l'utente di default, è possibile farlo sempre dal file IvmConfigBase.xml

 <!-- user for Ivman to run as.  You can then setup sudo rules for this
      user. -->
 <ivm:Option name="user" value="ivman" />

Infine, editiamo il file /etc/ivman/IvmConfigActions.xml per alterare il comportamento base di ivman con i dispositivi rimuovibili.

Di default, ivman tenta di montare tutti i dispositivi rimuovibili. Questo, secondo la mia modesta opinione, non è auspicabile con ogni dispositivo, come i dispositivi di storage USB ed in generale qualsiasi volume in lettura/scrittura. Per cui, innanzitutto, individuiamo la riga responsabile di questo comportamento:

    <!-- try to mount any mountable volume at all -->
    <ivm:Match name="ivm.mountable" value="true">
        <ivm:Option name="mount" value="true" />
    </ivm:Match>

Ed aggiungiamo dei commenti XML per inibirla:

    <!-- try to mount any mountable volume at all -->
 <!--    <ivm:Match name="ivm.mountable" value="true">
        <ivm:Option name="mount" value="true" />
    </ivm:Match>
 -->

A questo punto, ivman non tenterà di fare più nulla, se noi non lo vogliamo. Aggiungiamo quindi, in fondo al file, prima della chiusura del tag </ivm:ActionsConfig>, le seguenti righe:

 <ivm:Match name="ivm.mountable" value="true">
        <!-- Permette il montaggio automatico dei CD-ROM -->
        <ivm:Match name="hal.info.category" value="volume">
                <ivm:Match name="hal.volume.disc.type" value="cd_rom">
                        <ivm:Option name="mount" value="true" />
                </ivm:Match>
        </ivm:Match>

        <!-- Inibisce il montaggio automatico degli storage USB -->
        <ivm:Match name="hal.info.category" value="storage">
                <ivm:Match name="hal.storage.bus" value="usb">
                        <ivm:Option name="mount" value="false" />
                </ivm:Match>
        </ivm:Match>
 </ivm:Match>

In teoria, non è necessario specificare che ivman non deve montare automaticamente i dispositivi usb, se s'inibisce il suo comportamento di default (il montaggio automatico di tutto). Ho deciso d'inserire comunque un esempio completo per dare una base di partenza su cui lavorare per fare personalizzazioni successive. In fondo, ognuno di noi può avere esigenze specifiche. Nel caso si desideri andare oltre, è possibile ottenere una lista delle proprietà HAL con il comando lshal.

Esecuzione e Test

A questo punto, è possibile testare ivman avviandolo in modalità interattiva con il comando:

/usr/bin/ivman --nofork

Ivman visualizzerà un sacco di output, da cui sarà possibile determinare eventuali problemi. Per testarne il funzionamento inserire un CD-ROM e controllare da un altra console o dal desktop lo stato del device: ivman dovrebbe montarlo automaticamente e visualizzare il messaggio relativo nella console da cui lo si è lanciato. A questo punto premendo il tasto di espulsione, il CD-ROM dovrebbe essere smontato automaticamente ed espulso. Una volta verificato il corretto funzionamento, premere CTRL+C per interromperne l'esecuzione. Per lanciare il demone in background, è sufficiente digitare:

/usr/bin/ivman > /dev/null &

Fine tuning tramite fstab

Di default, ivman crea la voce relativa alla periferica montata in fstab, utilizzando nomi e proprietà recueperati da HAL. Esistono casi in cui, però, si desidera forzare il montaggio di un device su un mountpoint specifico, o con opzioni specifiche. In tal caso, è sufficiente inserire la riga dentro /etc/fstab come si farebbe normalmente. Ad esempio, per il CD-ROM inserire:

/dev/cdrom      /mnt/cdrom       auto        users,noauto,owner,ro,nosuid,utf8  0   0

In fase di montaggio, ivman rileverà la riga dentro fstab e quindi userà quella, invece di crearne un altra. Non è necessario riavviare ivman ogni volta che si altera fstab. Questo è molto utile, ad esempio, se si usano wine e cedega per far funzionare i videogames Windows e si vuole far rilevare correttamente a questi software il dispositivo per la protezione dei giochi originali.

Avvio automatico

Per avviare ivman in modo automatico all'avvio del sistema, è sufficiente aggiungere la riga

/usr/bin/ivman > /dev/null &

al file /etc/rc.d/rc.local, avendo l'accortezza di verificare che rc.local abbia impostato il flag di eseguibilità

chmod +x /etc/rc.d/rc.local

Conclusione

Abbiamo scoperto un potente tool per l'interfacciamento con HAL ed abbiamo visto come è possibile abbattere una delle barriere storiche che han reso l'accesso a linux spesso poco attraente per utenti abituati a sistemi molto meno professionali. Ovviamente la potenza di HAL/Ivman non si ferma al montaggio/smontaggio automatico di un CD-ROM. Spero che questo articolo sia una buona base di partenza per l'approfondimento di questo potente strumento.

Collegamenti esterni

Ringraziamenti

Autore: Samuele "Nuitari" Diella - samuele.diella@gmail.com

Strumenti personali
Namespace

Varianti