ACPI et FreeBSD

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 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.

Notes

[1] Si l'on démarre avec les paramètres prédéfinis.

[2] Cette bibliothèque n'est pas fonctionnelle sous tous les BSD