Prevenire nautilus mostrando la partizione montata nello script bash


8

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 udeve 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 triggernon è 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


Per gli altri che rispondono, potresti aggiungere la tua versione di Ubuntu? ad es. 9.04, 10.10, 12.04. Ci fu un bel po 'di evoluzione l'uno dall'altro.
Paul,

Buon punto. Modificherò la mia domanda per aggiungerla.
bcbc,

se monti -i impedisce a nautilus di spuntare? Funziona per me per impedire a gnome-shell di spuntare con il piccolo dialogo nella parte inferiore dello schermo. Questo è stato testato su Ubuntu 12.04 usando gnome-shell.
Gary,

Questo non fa differenza per me.
bcbc,

<p> _Se eseguo lo stesso comando dal terminale, Nautilus non mostra_ - Come si avvia lo script? </p> <p> e so che ci sono altri supporti nella mia sceneggiatura che non mostrano - Quali differenze tra questi supporti? </p>
zuba

Risposte:


3

Prova questo suggerimento: http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

Sono abbastanza sicuro che abbia a che fare con i segnali e l'elaborazione udev.


3
Puoi pubblicare il contenuto del link in modo conciso qui? Una risposta con solo un link non è molto gradita nella comunità di AU.
Mahesh,

Questo funziona Al momento ci sono troppi dettagli per accettare la risposta. Ho confermato manualmente che funziona per creare il file e chiamare udevadm trigger. Voglio solo confermare che funziona nello script. Pubblicheremo i dettagli nella domanda se non ne hai aggiunti altri qui.
bcbc,

Non volevo riassumere ciò che il collegamento ha già esposto chiaramente. Fondamentalmente, richiede l'aggiunta di una regola in /etc/udev/rules.d/ che dice a udev di non elaborare dispositivi specifici - ogni dispositivo otterrebbe la propria linea specificando: KERNEL == ”sda1 ″, ENV {UDISKS_PRESENTATION_HIDE} =” 1 ". Ciò non modifica alcun comportamento del sistema o del kernel. Dice a UDEV di nascondere la presentazione del disco. Nautilus si basa sull'elaborazione della regola udev proprio per questo comportamento.
papashou,

1

Prova a racchiudere il tuo script:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put your script here  
#
...

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

Non testato perché sono su 10.04

AGGIORNARE:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put CALLING your script here to survive its crashes
#
/bin/bash -c "/whenever/it/is/placed/script.sh"

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

Grazie per il suggerimento ... Non voglio modificare le impostazioni perché non sono sicuro che entrerà in vigore immediatamente, richiede un codice diverso per ogni versione, è inelegante e se lo script viene interrotto lascia l'utente in uno stato indesiderato - anche io non credo che dovrebbe essere necessario. Quello che cerco è il meccanismo mediante il quale viene notificato al nautilus il supporto e come bypassarlo. ad esempio udev? dbus? questo genere di cose.
bcbc,

+ Non voglio modificare le impostazioni perché non sono sicuro che entrerà in vigore immediatamente - Questa è la domanda da verificare (abbastanza facile). + richiede un codice diverso per ogni versione - potrebbe richiedere o meno 50 | 50 come se potessi incontrare un dyno per strada)) + è inelegante - rispetto a quale alternativa?
Zuba,

+ se lo script viene interrotto lascia l'utente in uno stato indesiderato - molti pacchetti (ad esempio aptitude) quando interrotto lo fanno. Ci sono approcci per evitare quell'effetto collaterale. Ad esempio, puoi caricare cron per verificare ogni 1 minuto se lo script è in esecuzione e, in caso contrario, per ripristinare l'impostazione. Oppure puoi eseguire lo script da un altro che controlla l'impostazione.
zuba,

Il mio punto è che non dovrebbe essere necessario modificare un'impostazione specifica del desktop. Avrei anche aggiunto che questo script può essere eseguito su Ubuntu / Xubuntu / Kubuntu / Lubuntu ecc. In modo da aggiungere un alto livello di complessità e rischio.
bcbc,

L'alternativa alla lista nera della partizione con udisk (vedi link papashous) richiede sudo e non è portatile su tutte le macchine, quindi sarebbe ancora più complessa e rischiosa.
Egil,

1

È possibile impedire il montaggio automatico dell'unità flash aggiungendo una nuova regola udev. In tale regola è possibile specificare un'unità flash in base al fornitore, al numero di serie e ad altri attributi. Vedi le righe ATTRS {} nell'output di:

udevadm info -a --name=sdb1

Lo script che dovresti inserire nella cartella /etc/udev/rules.d con un nome file speciale, ad es. 81-usb-wubi-move.rules

La regola potrebbe assomigliare

ACTION=="add", KERNEL=="sdb?", SUBSYSTEMS=="usb", ATTRS{serial}=="001CC07CEE5EFB91C91B235C", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_PRESENTATION_NOPOLICY}="1"

Guarda anche:


Sembra che dovrebbe essere una potenziale soluzione: ho bisogno di tempo per esaminarlo e sperimentare, e non avrò possibilità fino a oggi (fornirò feedback). Idealmente la risposta spiegherà perché ciò sta accadendo (rispetto alla corsa mountdal terminale) ma se avrò una buona soluzione accetterò anche quello.
bcbc,

Questo è quello
RobotHumans,

0

Non testato .... solo un sospetto.

Montare il filesystem in un albero inaccessibile all'utente nautilus, ad es. In una sottodirectory di / root o / home / someoneelse o in una sottodirectory di proprietà e protetta da qualcun altro

Tieni presente che potrebbe essere una cattiva idea montare lo stesso dispositivo hardware su due punti di montaggio e modificarlo da entrambi.

Alcune configurazioni umane sono possibili in (12.04beta) Ubuntu-> Impostazioni di sistema-> Dettagli-> Supporti rimovibili. Alcune delle opzioni potrebbero essere impostate su "non fare nulla" e ciò potrebbe evitare il popup.

La documentazione su https://help.ubuntu.com/community/Mount/USB potrebbe essere utile per 9.10 ma non funzionava con 12.04. Le chiavi per gconf-editor che citano non vengono più utilizzate.


È montato in una directory sotto / tmp (e da nessun'altra parte).
bcbc,

Ma l'utente che ha effettuato l'accesso può comunque accedere a / tmp. Il suggerimento era di usare una directory a cui l'utente che ha effettuato l'accesso non può accedere.
Paul,

Ho usato chmod 700sul dir ... sembrava promettente e poi ho spuntato una finestra di messaggio (senza titolo di finestra): "Impossibile aprire una cartella per il filesystem da 10 GB", "Nessuna applicazione registrata come gestione di questo file"
bcbc

Affascinante. Di sicuro ci prova. Forse avrò tempo di giocarci più tardi.
Paul,

0

Prova mountcon i flag -ne -i.


Ci ho provato, praticamente attraverso tutte le opzioni di mount che posso. Il grilletto sta accadendo altrove.
bcbc,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.