Hi, [...]
nehme ich immer noch gerne (vor allem wenn es einfacher wird), aber mittlerweile habe ich es von hinten durch die Brust ins Auge hinbekommen (getestet nur unter Leap 42.1):
mittlerweile habe ich das Ganze mit Perls Net::DBus Modul soweit hin bekommen. Falls es jemand mal brauchen sollte: ------------------------< snip snip snip >----------------------------- #!/usr/bin/perl -w use 5.005; use strict; use IO::Handle; use Net::DBus; use Net::DBus::Dumper; use Net::DBus::Reactor; use POSIX qw( _exit ); use constant TRUE => 1; use constant FALSE => 0; $SIG{INT} = \&dbl_SignalHandler; my( %HLOCKS ); my( %SIGNALS ) = ( "PrepareForSleep" => "sleep", "PrepareForShutdown" => "shutdown", ); my( $OIF ) = dbl_getInterface() || die $!; for my $_signal ( keys %SIGNALS ) { $OIF->connect_to_signal( "$_signal", \&{ "dbl_on" . $_signal } ) || die $!; $HLOCKS{ $SIGNALS{ $_signal } } = undef; dbl_takeLocks( $_signal ) || die $!; } my( $reactor ) = Net::DBus::Reactor->main() || die $!; $reactor->run(); exit( 0 ); sub dbl_getInterface { my( $bus ) = Net::DBus->system || die $!; my( $osvc ) = $bus->get_service( "org.freedesktop.login1" ) || die $!; my( $oif ) = $osvc->get_object( "/org/freedesktop/login1", "org.freedesktop.login1.Manager", ) || die $!; return( $oif ); } sub dbl_takeLocks { my( $signal, $type ) = @_; my( $ret_val ) = FALSE; return( $ret_val ) unless( defined( $signal ) ); my( $_lock ) = $SIGNALS{ $signal }; return( $ret_val ) unless( defined( $_lock ) ); unless( exists( $HLOCKS{ $_lock } ) && ref( $HLOCKS{ $_lock } ) =~ /IO::Handle/i && $HLOCKS{ $_lock }->stat() ) { my( $fd ) = $OIF->Inhibit( $_lock, 'my signal watcher', 'preparing', 'delay' ); my( $fh ) = IO::Handle->new_from_fd( $fd, 'r' ); if( $fh->stat() ) { $HLOCKS{ $_lock } = $fh; $ret_val = TRUE; } } return( $ret_val ); } sub dbl_dropLocks { my( $signal ) = @_; my( $ret_val ) = FALSE; return( $ret_val ) unless( defined( $signal ) ); my( $_lock ) = $SIGNALS{ $signal }; return( $ret_val ) unless( defined( $_lock ) ); if( exists( $HLOCKS{ $_lock } ) && ref( $HLOCKS{ $_lock } ) =~ /IO::Handle/i && $HLOCKS{ $_lock }->stat() && $HLOCKS{ $_lock }->close() ) { $HLOCKS{ $_lock } = undef; $ret_val = TRUE; } return( $ret_val ); } sub dbl_onPrepareForAll { my( $signal, $prepost ) = @_; my( $ret_val ) = 0; my( $_lock ) = $SIGNALS{ $signal }; if( $prepost ) { if( $signal eq "PrepareForSleep" ) { # do whatever before going to sleep } else { # do whatever before shutting down # !! seems not to work !! } dbl_dropLocks( $signal ); } else { dbl_takeLocks( $signal ); if( $signal eq "PrepareForSleep" ) { # do whatever after resuming from sleep } } return( $ret_val ); } sub dbl_onPrepareForSleep { my( $prepost ) = @_; my( $ret_val ) = 0; my( $_me ) = ( caller( 0 ) )[ 3 ]; $_me =~ s/^.*:://; my( $_signal ) = $_me; $_signal =~ s/^on//; $ret_val = &dbl_onPrepareForAll( $_signal, $prepost ); return( $ret_val ); } sub dbl_onPrepareForShutdown { my( $prepost ) = @_; my( $ret_val ) = 0; my( $_me ) = ( caller( 0 ) )[ 3 ]; $_me =~ s/^.*:://; my( $_signal ) = $_me; $_signal =~ s/^on//; $ret_val = &dbl_onPrepareForAll( $_signal, $prepost ); return( $ret_val ); } sub dbl_SignalHandler { my( $sSignal ) = shift; POSIX::_exit( 0 ) if( $sSignal eq "INT" ); } ------------------------< snip snip snip >----------------------------- Ciao. Michael. -- Michael Hirmke -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org