... or how to find a way to handle ACPI button events in a
user-unfriendly desktop
So, we're switching to pm-utils + HAL +
gnome-power-manager/kpowersave to do power management.
It's great to finally have an unified power management framework, but
I'm still not really statisfied with it.
Why? Because I'm not really a desktop-friend, I don't use neither KDE
nor Gnome, and I don't use much applets. So, gnome-power-manager and
kpowersave are not good options to me.
Furthermore, the ACPI button events are not passed from acpid to HAL,
so that these desktop applications can receive. I have to drop the
/etc/acpi/events files that used to catch them, or else the events
will be handled inconsistently in many ways.
So, now, when not in KDE/Gnome, nothing handles these ACPI events
anymore, great...
A year ago, the idea of a PolicyManager
daemon has been raised, but there has been no implementation for a
long time.
It turned out in to PolicyKit
and ConsoleKit
which will soon be used in a better gnome-power-manager.
Though, there is no full integration with power managers yet.
After a discussion between power management application maintainers,
an org.freedesktop.Policy.Power interface
has been introduced by Novell in kpowersave and powersave. Acquiring
this D-Bus interface acts as a lock between power management programs
that supports it, so that only one power management policy can get
applied. They even patched
gnome-power-manager to support this interface.
In Mandriva, to make the events handled when not in KDE/Gnome, I will
create a small pm-has-power-policy helper using dbus-send:
dbus-send --system --dest=org.freedesktop.DBus --type=method_call
--print-reply --reply-timeout=200 / org.freedesktop.DBus.NameHasOwner
string:org.freedesktop.Policy.Power
| grep -q 'boolean true'
Then, I have restored /etc/acpi/events helpers, that check if
pm-has-power-policy returns false because calling the real actions
(poweroff/suspend).
Of course, I also have to create a
/etc/dbus-1/system.d/policy-power.conf file, to allow user apps to
acquire org.freedesktop.Policy.Power.
Finally, I got a simple solution, but the thing is, latest official
kpowersave release does not event support poweroff/suspend/hibernate
buttons /o\ Yet some more patches to bakport
(from kpowersave SVN).
It looks like the better compromise to me as of today, even if the
situation will probably evolve quite fast.
Well, what a ride...