Repository 32bit  Forum
Repository 64bit  Wiki

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

Da Slacky.eu.
(Configurazione)
 
(24 revisioni intermedie di un utente non mostrate)
Riga 1: Riga 1:
  +
[[Category:Periferiche]]
=Disclaimer=
=Disclaimer=
L'autore di questa guida, i suoi collaboratori e slacky.eu non si riterranno responsabili di eventuali danni provocati al vostro computer.
L'autore di questa guida, i suoi collaboratori e slacky.eu non si riterranno responsabili di eventuali danni provocati al vostro computer.
=Informazioni=
+
=Prerequisiti=
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.
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.
Riga 18: Riga 19:
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.
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 sfondare questo storico taboo.
+
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=
=Ivman e pmount=
Il magico tool oggetto di questa guida si chiama [http://ivman.sourceforge.net/ 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 schero di un portatile, l'inserimento di un CD-ROM o la pressione del tasto di espulsione del medesimo.
+
Il magico tool oggetto di questa guida si chiama [http://ivman.sourceforge.net/ 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.
+
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.
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.
Riga 37: Riga 38:
=Installazione=
=Installazione=
Prima di tutto è bene procedere all'installazione di pmount. Scarichiamo i sorgenti di pmount dal homepage del progetto [http://www.piware.de/projects/], quindi procediamo come al solito (ricordandosi di usare l'utenza root):
+
Prima di tutto è bene procedere all'installazione di pmount. Scarichiamo i sorgenti di pmount dal homepage del progetto [http://www.piware.de/projects/], quindi procediamo come al solito (ricordandoci di usare l'utenza root):
tar -zxvf pmount-0.9.13.tar.gz
tar -zxvf pmount-0.9.13.tar.gz
Riga 59: Riga 60:
I file interessati per la configurazione di ivman risiedono nella directory /etc/ivman.
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
* ''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
+
* ''IvmConfigActions.xml'' specifica quali azioni deve eseguire ivman quando viene inserito/disinserito un dispositivo rimuovibile
* IvmConfigProperties.xml specifica quali azioni deve compiere ivman quando determinate proprietà dell'hardware cambiano, come la chiusra dello schermo di un portatile
+
* ''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.
+
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, considerato che linux non è solo Desktop, ivman funziona indipendentemente 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.
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 pmount e pumount utilizzino il gruppo predefinito di Slackware per il mounting/unmointing dei dispositivi rimuovibili:
+
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:
  +
<pre>
<!-- group for Ivman to run as. Should have permissions to run 'pmount'. -->
<!-- group for Ivman to run as. Should have permissions to run 'pmount'. -->
<ivm:Option name="group" value="plugdev" />
<ivm:Option name="group" value="plugdev" />
  +
</pre>
Di default, ivman tenta di usare l'utente "ivman" per eseguirsi all'interno del sistema.
Di default, ivman tenta di usare l'utente "ivman" per eseguirsi all'interno del sistema.
Riga 81: Riga 83:
chmod u+s /usr/bin/pmount /usr/bin/pumount
chmod u+s /usr/bin/pmount /usr/bin/pumount
  +
  +
Infine, creiamo manualmente il file pid necessario al corretto funzionamento dell'applicativo.
  +
  +
touch /var/run/ivman.pid
Se si vuole cambiare l'utente di default, è possibile farlo sempre dal file IvmConfigBase.xml
Se si vuole cambiare l'utente di default, è possibile farlo sempre dal file IvmConfigBase.xml
  +
<pre>
<!-- user for Ivman to run as. You can then setup sudo rules for this
<!-- user for Ivman to run as. You can then setup sudo rules for this
user. -->
user. -->
<ivm:Option name="user" value="ivman" />
<ivm:Option name="user" value="ivman" />
+
</pre>
Infine, editiamo il file /etc/ivman/IvmConfigActions.xml per alterare il comportamento base di ivman con i dispositivi rimuovibili.
Infine, editiamo il file /etc/ivman/IvmConfigActions.xml per alterare il comportamento base di ivman con i dispositivi rimuovibili.
Riga 93: Riga 100:
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:
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:
  +
<pre>
<!-- try to mount any mountable volume at all -->
<!-- try to mount any mountable volume at all -->
<ivm:Match name="ivm.mountable" value="true">
<ivm:Match name="ivm.mountable" value="true">
<ivm:Option name="mount" value="true" />
<ivm:Option name="mount" value="true" />
</ivm:Match>
</ivm:Match>
  +
</pre>
Ed aggiungiamo dei commenti XML per inibirla:
Ed aggiungiamo dei commenti XML per inibirla:
  +
<pre>
<!-- try to mount any mountable volume at all -->
<!-- try to mount any mountable volume at all -->
<!-- <ivm:Match name="ivm.mountable" value="true">
<!-- <ivm:Match name="ivm.mountable" value="true">
Riga 105: Riga 115:
</ivm:Match>
</ivm:Match>
-->
-->
+
</pre>
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:
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">
+
<pre>
<!-- Permette il montaggio automatico dei CD-ROM -->
+
<ivm:Match name="ivm.mountable" value="true">
<ivm:Match name="hal.info.category" value="volume">
<ivm:Match name="hal.info.category" value="volume">
<ivm:Match name="hal.volume.disc.type" value="cd_rom">
+
<ivm:Match name="hal.volume.is_disc" value="true">
<ivm:Option name="mount" value="true" />
+
<ivm:Match name="hal.volume.disc.is_blank" value="false">
  +
<ivm:Option name="mount" value="true" />
  +
</ivm:Match>
</ivm:Match>
</ivm:Match>
</ivm:Match>
</ivm:Match>
<!-- Inibisce il montaggio automatico degli storage USB -->
 
<ivm:Match name="hal.info.category" value="storage">
<ivm:Match name="hal.info.category" value="storage">
<ivm:Match name="hal.storage.bus" value="usb">
<ivm:Match name="hal.storage.bus" value="usb">
Riga 122: Riga 131:
</ivm:Match>
</ivm:Match>
</ivm:Match>
</ivm:Match>
</ivm:Match>
+
</ivm:Match>
  +
</pre>
  +
  +
Il primo blocco permette il montaggio automatico di ogni volume di tipo ottico (cd_rom, cd_rw, etc), a patto che sia stato masterizzato (non sia blank).
  +
  +
Il secondo blocco invece impedisce ad ivman di montare in modo automatico gli storage usb. Considerato che i dispositivi usb vengono solitamente montati in read/write, e che quindi l'utente deve smontarli correttamente per evitare di perdere dati, può essere utile far si che questi non vengano montati automaticamente ma solo su precisa volontà dell'utente.
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.
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.
+
Nel caso si desideri andare oltre, è possibile ottenere una lista delle proprietà HAL con il comando lshal, oppure è possibile consultare (in formato HTML) la documentazione di HAL, normalmente memorizzata sotto /usr/doc/hal-VERSIONE/spec/hal-spec.html
  +
  +
=Esecuzione e Test=
A questo punto, è possibile testare ivman avviandolo in modalità interattiva con il comando:
A questo punto, è possibile testare ivman avviandolo in modalità interattiva con il comando:
Riga 144: Riga 153:
/dev/cdrom /mnt/cdrom auto users,noauto,owner,ro,nosuid,utf8 0 0
/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. In questo modo possibile anche fare cose come forzare l'utilizzo di ntfs-3g su un device usb senza avere la necessità di ricompilare HAL, e via discorrendo. Non è necessario riavviare ivman ogni volta che si altera fstab.
+
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=
=Avvio automatico=
Riga 150: Riga 159:
Per avviare ivman in modo automatico all'avvio del sistema, è sufficiente aggiungere la riga
Per avviare ivman in modo automatico all'avvio del sistema, è sufficiente aggiungere la riga
/usr/bin/ivman > /dev/null &
+
/usr/bin/ivman > /var/log/ivman 2>&1 < /dev/null
al file /etc/rc.d/rc.local, avendo l'accortezza di verificare che rc.local abbia impostato il flag di eseguibilità
al file /etc/rc.d/rc.local, avendo l'accortezza di verificare che rc.local abbia impostato il flag di eseguibilità
Riga 157: Riga 166:
=Conclusione=
=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.
+
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 affascinante argomento.
+
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.
 
=Riferimenti utili=
 
Homepage progetto ivman http://ivman.sourceforge.net/
 
 
Homepage progetto pmount http://www.piware.de/projects/
 
Howto Gentoo wiki http://gentoo-wiki.com/HOWTO_ivman
+
=Collegamenti esterni=
  +
* http://ivman.sourceforge.net/ Homepage progetto ivman
  +
* http://www.piware.de/projects/ Homepage progetto pmount
  +
* http://gentoo-wiki.com/HOWTO_ivman Ivman Gentoo Howto
=Ringraziamenti=
=Ringraziamenti=
Autore: '''Nuitari''' - nuitari@gmail.com
+
Autore: Samuele "Nuitari" Diella - samuele.diella@gmail.com

Versione attuale delle 16:29, 4 mar 2008

Indice

[modifica] Disclaimer

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

[modifica] Prerequisiti

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.

[modifica] 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.

[modifica] 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.

[modifica] 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 (ricordandoci 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.

[modifica] Configurazione

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

  • IvmConfigBase.xml contiene le opzioni che influenzano il comportamento di ivman
  • IvmConfigActions.xml specifica quali azioni deve eseguire ivman quando viene inserito/disinserito un dispositivo rimuovibile
  • 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, considerato che linux non è solo Desktop, ivman funziona indipendentemente 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

Infine, creiamo manualmente il file pid necessario al corretto funzionamento dell'applicativo.

touch /var/run/ivman.pid

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">
        <ivm:Match name="hal.info.category" value="volume">
                <ivm:Match name="hal.volume.is_disc" value="true">
                        <ivm:Match name="hal.volume.disc.is_blank" value="false">
                                <ivm:Option name="mount" value="true" />
                        </ivm:Match>
                </ivm:Match>
        </ivm:Match>

        <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>

Il primo blocco permette il montaggio automatico di ogni volume di tipo ottico (cd_rom, cd_rw, etc), a patto che sia stato masterizzato (non sia blank).

Il secondo blocco invece impedisce ad ivman di montare in modo automatico gli storage usb. Considerato che i dispositivi usb vengono solitamente montati in read/write, e che quindi l'utente deve smontarli correttamente per evitare di perdere dati, può essere utile far si che questi non vengano montati automaticamente ma solo su precisa volontà dell'utente.

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, oppure è possibile consultare (in formato HTML) la documentazione di HAL, normalmente memorizzata sotto /usr/doc/hal-VERSIONE/spec/hal-spec.html

[modifica] 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 &

[modifica] 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.

[modifica] Avvio automatico

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

/usr/bin/ivman > /var/log/ivman 2>&1 < /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

[modifica] 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.

[modifica] Collegamenti esterni

[modifica] Ringraziamenti

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

Strumenti personali
Namespace

Varianti