((/news-custom/public/logo_freebsd.png|logo du système d’exploitation, FreeBSD|C|logo du système d’exploitation, FreeBSD))

En ce moment, je travaille sur l’intégration de la prochaine version stable (__4.10__) de [Xfce|http://www.xfce.org/] sous FreeBSD.

Un des composants, [xfce4-session|http://docs.xfce.org/xfce/xfce4-session/start] 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|http://www.freebsd.org/].

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|Advanced Configuration and Power Interface?? est déjà activé $$Si l’on démarre avec les paramètres prédéfinis.$$. 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|Basic Input Output System?? 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|http://upower.freedesktop.org/] $$Cette bibliothèque n’est pas fonctionnelle sous tous les ??BSD|Berkeley Software Distribution??$$, 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.