En ce moment, je travaille sur l'intégration de la prochaine version stable (4.10) de Xfce sous FreeBSD.
Un des composants, xfce4-session gère l'hibernation et le suspend to RAM (mise en veille). J'ai donc voulu voir, comment cela été pris en charge par FreeBSD.
L'essais a été effectué sur :
olivier@bornem:~ $ uname -rsp
FreeBSD 8.2-RELEASE-p3 i386
olivier@bornem:~ $
État des lieux
Il faut savoir, que par défaut l'ACPI est déjà activé [1]. Cependant on doit rechercher les informations concernant les différentes méthodes de mise en veille.
olivier@bornem:~ $ sysctl -a | grep acpi.supported
hw.acpi.supported_sleep_state: S3 S4 S5
olivier@bornem:~ $
Sur cet ordinateur, on peut voir que trois états (sleep states) sont « pris en charge » par le système.
On peut également voir, si le BIOS est capable de le gérer.
olivier@bornem:~ $ sysctl -a | grep acpi.s4bios
hw.acpi.s4bios: 0
olivier@bornem:~ $
Dans mon cas, la valeur est à zéro, donc mon BIOS n'a pas ce support.
On peut tester les différents états (il faut être root) avec l'utilitaire acpiconf
.
root@bornem:~ # acpiconf -s 3
L'état S4 (correspondant à l'hibernation) est équivalent à S5, j'en déduis donc que je ne pourrais pas utiliser cette fonctionnalité.
L'état S3 (suspend to RAM) est pleinement fonctionnel.
Intégration avec le gestionnaire de bureau
xfce4-session possède une dépendance, UPower [2], responsable de la gestion de la consommation (en autre).
Pour pouvoir l'employer, il faut autoriser certaines opérations, grâce notamment à polkit.
On va tout d'abord rechercher les actions possibles concernant UPower.
olivier@bornem:~ $ pkaction | grep upower
org.freedesktop.upower.hibernate
org.freedesktop.upower.qos.cancel-request
org.freedesktop.upower.qos.request-latency
org.freedesktop.upower.qos.request-latency-persistent
org.freedesktop.upower.qos.set-minimum-latency
org.freedesktop.upower.suspend
olivier@bornem:~ $
J'ai uniquement besoin du support de suspend, j'en profite donc pour créer un fichier .pkla
(l'extension est primordiale) situé dans /usr/local/etc/polkit-1/localauthority/50-local.d/
.
Voici son contenu :
root@bornem:~ # cat /usr/local/etc/polkit-1/localauthority/50-local.d/org.freedesktop.upower.pkla
[Suspend]
Identity=unix-group:users
Action=org.freedesktop.upower.suspend
ResultAny=yes
ResultInactive=yes
ResultActive=yes
root@bornem:~ #
Tous les utilisateurs appartenant au groupe users sont autorisés à mettre en veille (en RAM) le système.