Hi, I just created a patch for gparted to improve things slightly:
* Add debian/patches/02_fdi_robustification.patch: - Install a signal handler for cleaning up the automount disabling FDI, so that it will be cleaned up on program crashes, too. - Use storage.automount_enabled_hint instead of volume.ignore for the automount disabling FDI. That way, the new drives will at least appear in Gnome and the user can mount them manually. - LP: #134712 I also sent this patch to Gnome #324220. Additionally, I'll change the hal init script to delete this file on startup. Yes, I know, a hack, but until hal offers a proper native interface for temporarily disabling automount, this will have to do. Martin -- Martin Pitt http://www.piware.de Ubuntu Developer http://www.ubuntu.com Debian Developer http://www.debian.org
diff -Nur gparted-0.3.3/src/GParted_Core.cc gparted-0.3.3.new/src/GParted_Core.cc --- gparted-0.3.3/src/GParted_Core.cc 2006-12-05 20:39:31.000000000 +0100 +++ gparted-0.3.3.new/src/GParted_Core.cc 2007-10-01 08:34:03.000000000 +0200 @@ -38,6 +38,8 @@ #include "../include/ufs.h" #include <cerrno> +#include <cstdio> +#include <csignal> #include <sys/statvfs.h> std::vector<Glib::ustring> libparted_messages ; //see ped_exception_handler() @@ -45,6 +47,13 @@ namespace GParted { +// Clean up the fdi when terminating +void sig_fdi_cleanup( int signum ) +{ + remove( "/usr/share/hal/fdi/policy/gparted-disable-automount.fdi" ); + raise( signum ); +} + GParted_Core::GParted_Core() { lp_device = NULL ; @@ -53,6 +62,29 @@ p_filesystem = NULL ; ped_exception_set_handler( ped_exception_handler ) ; + + //make sure that the fdi is cleaned up on all but the most forceful + //program exits + struct sigaction sa; + sa.sa_handler = sig_fdi_cleanup; + sigemptyset( &sa.sa_mask ); + sa.sa_flags = SA_RESETHAND; + if( sigaction( SIGHUP, &sa, NULL ) == -1 || + sigaction( SIGINT, &sa, NULL ) == -1 || + sigaction( SIGQUIT, &sa, NULL ) == -1 || + sigaction( SIGILL, &sa, NULL ) == -1 || + sigaction( SIGABRT, &sa, NULL ) == -1 || + sigaction( SIGFPE, &sa, NULL ) == -1 || + sigaction( SIGSEGV, &sa, NULL ) == -1 || + sigaction( SIGPIPE, &sa, NULL ) == -1 || + sigaction( SIGALRM, &sa, NULL ) == -1 || + sigaction( SIGTERM, &sa, NULL ) == -1 || + sigaction( SIGUSR1, &sa, NULL ) == -1 || + sigaction( SIGUSR2, &sa, NULL ) == -1 || + sigaction( SIGBUS, &sa, NULL ) == -1 || + sigaction( SIGXCPU, &sa, NULL ) == -1 || + sigaction( SIGXFSZ, &sa, NULL ) == -1 ) + perror( "Could not set signal handler" ); //disable automount //FIXME: temporary hack, till i find a better solution... std::ofstream fdi_file( "/usr/share/hal/fdi/policy/gparted-disable-automount.fdi" ) ; @@ -60,8 +92,8 @@ { fdi_file << "<deviceinfo version='0.2'>" ; fdi_file << "<device>" ; - fdi_file << "<match key='@block.storage_device:storage.hotpluggable' bool='true'>" ; - fdi_file << "<merge key='volume.ignore' type='bool'>true</merge>" ; + fdi_file << "<match key='storage.hotpluggable' bool='true'>" ; + fdi_file << "<merge key='storage.automount_enabled_hint' type='bool'>false</merge>" ; fdi_file << "</match>" ; fdi_file << "</device>" ; fdi_file << "</deviceinfo>" ;
signature.asc
Description: Digital signature