Nel mio script bash monto partizioni, le controllo, le copia i file su di esse e le smonto. Quando lo script monta la partizione, Nautilus si apre con una finestra che mostra la partizione e ruba lo stato attivo. Questo è qualcosa che voglio evitare.
Nota: so che posso cambiare il comportamento di questo in Impostazioni di sistema, Dettagli, Supporti rimovibili Never prompt or start programs on media insertion
, ma non voglio cambiare il comportamento, ad esempio se è inserita una chiavetta USB, voglio solo prevenirla nel mio script bash . Poiché questo script viene eseguito su computer di altri utenti, non posso modificare queste impostazioni (nello script) perché se viene terminato in modo anomalo, lascerà le impostazioni modificate in atto (non credo che debba essere necessario farlo).
In realtà questa visualizzazione automatica non sembra coerente. Se eseguo esattamente lo stesso comando dal terminale, Nautilus non viene visualizzato e so che nella mia sceneggiatura ci sono altri supporti che non vengono visualizzati. Quindi cosa potrebbe causare questo? Ecco un esempio del codice (entrambi fanno apparire finestre nautilus separate):
mount $dev $target
mkdir -p $target/home
mount $homedev $target/home
Sono interessato a capire il processo attraverso il quale il mount segnala Nautilus e perché ciò sta accadendo (quando non lo è se monto la partizione dal terminale). E qual è il modo migliore per evitare che ciò accada.
Ho notato questo comportamento a partire dalla versione 11.10 (se ricordo bene). Attualmente sto eseguendo 12.04, ma lo script deve funzionare su tutte le versioni supportate. Non credo che la soluzione dovrebbe comportare la modifica delle impostazioni di sistema (che potrebbe differire tra le versioni). Ad esempio, se guardi altre cose che montano le partizioni (come os-prober), non ci sono finestre nautilus che spuntano quando monta partizioni diverse.
Lo script può essere trovato qui . Ed ecco la parte in cui salta Nautilus. Penso che anche qui venga visualizzato , ma ho concentrato i miei test sul primo link. Qui è dove non si apre, chiamato prima di quegli altri mount - nota che ho riscritto i primi come - solo-lettura e all'interno di un'istruzione if e non fa alcuna differenza.
Idealmente la risposta spiegherà perché ciò sta accadendo e come prevenirlo, in altre parole, spiegherà perché l'in-script mount
è trattato in modo diverso da quello emesso da un terminale. Sarà accettata anche una buona soluzione se si tratta di una soluzione completamente spiegata e pratica che può supportare tutti gli ambienti desktop (ubuntu, kubuntu, xubuntu, lubuntu ecc.) - Voglio anche evitare un aumento esponenziale dei test per verificarlo.
Grazie in anticipo
============
Soluzione secondo il link di papashou :
add_udev_rules ()
{
for i in "$dev" "$homedev" "$bootdev" "$usrdev"; do
if [ -n "$i" ]; then
block=${i#/dev/}
echo "KERNEL==\"""$block""\",ENV{UDISKS_PRESENTATION_HIDE}=\"1\"" >> "$wubi_move_dir"/wubi_move.rules
fi
done
cp "$wubi_move_dir"/wubi_move.rules /etc/udev/rules.d/wubi_move.rules
udevadm trigger > /dev/null 2>&1
}
remove_udev_rules ()
{
rm /etc/udev/rules.d/wubi_move.rules
rm "$wubi_move_dir"/wubi_move.rules
udevadm trigger > /dev/null 2>&1
}
Questo raggiunge il risultato desiderato, ma sembra un approccio con la mazza. Credo che ci sia probabilmente una messa a punto in udev che permetterà alla partizione di essere ancora mostrata in Nautilus (e altri browser di file) senza apparire quando è montata. A proposito, se qualcuno vuole provare questo, il seguente script mostrerà l'effetto pop-up di nautilus:
mkdir -p /tmp/testmount
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
rmdir /tmp/testmount
Continuerò a giocare con udev
e ho anche presentato un bug , dal momento che questo non ha alcun senso per una partizione che non è inserita per agire come una scheda USB / media inserita al momento del montaggio. Inoltre udevadm trigger
non è un'operazione economica che appare (almeno il 12.04) per congelare temporaneamente tutto.
Quindi, in sintesi, ho una soluzione praticabile (grazie a tutti quelli che mi hanno aiutato), che posso o meno implementare (non sono ancora sicuro); ma continuerò a cercare qualcos'altro. Grazie