ACPI
ACPI (Advanced Configuration and Power Management Interface) is a power management system that is part of the BIOS.
Installation
Kernel
The following kernel options need to be activated for ACPI:
Power management and ACPI options --->
[*] Power Management support
[*] ACPI (Advanced Configuration and Power Interface) Support --->
Option | Module | Recommend | Description |
---|---|---|---|
Deprecated /proc/acpi files | - | No | Creates deprecated files in the procfs filesystem, which are now replaced by files in the sysfs filesystem. |
Deprecated power /proc/acpi directories | - | No | Creates deprecated files in the procfs filesystem, which are now replaced by files in the sysfs filesystem. |
EC read/write access through /sys/kernel/debug/ec | ec-debugfs | No | Debug interface to the Embedded Controller. |
Deprecated /proc/acpi/event support | - | No | Creates deprecated files in the procfs filesystem, which are now replaced by the input layer or netlink events. |
AC Adapter | ac | Laptops | Creates files to tell if your system is connected to AC. |
Battery | battery | Laptops | Creates files to tell if your system is powered by a battery. |
Button | button | - | Handles events on the power, sleep, and lid buttons. |
Video | video | - | Supports basic operations for Video cards. |
Fan | fan | - | Supports ACPI fan devices, allowing user-mode applications to perform basic fan control (on, off, status). |
Dock | dock | - | Supports ACPI-controlled docking stations and removable drive bays, see the acpi dock article. |
Processor | processor | - | Installs ACPI as the idle handler for Linux and uses ACPI C2 and C3 processor states to save power. |
Processor Aggregator | processor-aggregator | - | ACPI 4.0 function to perform specific processor configuration and control. |
Thermal Zone | thermal | Yes | Supports ACPI thermal zones to protect your processor against overheating. |
NUMA support | - | - | |
Debug Statements | - | No | |
PCI slot detection driver | pci-slot | No | Helps to correlate PCI bus addresses with physical slots |
Container and Module Devices | container | - | Supports ACPI Container and Module devices to hotplug nodes, CPUs, and memory. |
Smart Battery System | sbs, sbshc | - | Supports another type of access to battery information, found on some laptops. |
Hardware Error Device | hed | - | Supports the Hardware Error Device, which is used to report some hardware errors. |
Allow ACPI methods to be inserted/replaced at run time | custom-method | No | |
ACPI Platform Error Interface (APEI) | - | - | APEI allows to report errors (for example from the chipset) to the operating system. |
Emerge
Desktop environments react on the common events generated by ACPI. If a desktop environment is not installed or to have the system react on special events the ACPI package can be installed. Install the sys-power/acpid package:
root #
emerge --ask sys-power/acpid
USE flags
Several packages know about the global acpi
USE flag. There are no use flags available for sys-power/acpid at this time.
SELinux
For acpid to be able to shutdown a SELinux system, make sure the sec-policy/selinux-shutdown package is installed and the /sbin/shutdown executable is re-labelled:
root #
emerge --ask sec-policy/selinux-shutdown
Configuration
The scripts found in /etc/acpi define how the system reacts on ACPI events. They can be edited as necessary to meet the user's needs.
Services
OpenRC
The acpid service can now be started. While using OpenRC run:
root #
/etc/init.d/acpid start
To have the acpid service start at boot time add it to the default runlevel:
root #
rc-update add acpid default
systemd
If systemd is being used as the init system, enable the acpid service on system boot by issuing:
root #
systemctl enable acpid.service
To start the service now:
root #
systemctl start acpid.service
Advanced examples
The default ACPI setup may be satisfactory for some users, however a little extra configuration may be required to get the acpid daemon to treat some basic ACPI events properly (AC power plug in/out, multimedia keys, etc.).
Modifications can be make to /etc/acpi/default.sh along with /etc/acpi/events/default if necessary. Why not create a complicated setup that makes use of the /etc/acpi/actions and /etc/acpi/events capabilities? Simply put scripts and event files in those locations for advanced usage.
A basic default.sh file will probably be enough for most users, however the following is an example of what could be done using default.sh:
#!/bin/sh
#
# $Header: /etc/acpi/default.sh Exp $
# $Author: (c) 2012-2014 -tclover <tokiclover@dotfiles.> Exp $
# $License: MIT (or 2-clause/new/simplified BSD) Exp $
# $Version: 2014/12/24 21:09:26 Exp $
#
log() { logger -p daemon "ACPI: $*"; }
uhd() { log "event unhandled: $*"; }
set $*
group=${1%/*}
action=${1#*/}
device=$2
id=$3
value=$4
[ -d /dev/snd ] && alsa=true || alsa=false
[ -d /dev/oss ] && oss=true || oss=false
amixer="amixer -q set Master"
ossmix="ossmix -- vmix0-outvol"
case $group in
ac_adapter)
case $value in
*0) log "switching to power.bat power profile"
hprofile power.bat;;
*1) log "switching to power.adp power profile"
hprofile power.adp;;
*) uhd $*;;
esac
;;
battery)
case $value in
*0) log "switching to power.adp power profile"
hprofile power.adp;;
*1) log "switching to power.adp power profile"
hprofile power.adp;;
*) uhd $*;;
esac
;;
button)
case $action in
lid)
case "$id" in
close) hibernate-ram;;
open) :;;
*) uhd $*;;
esac
;;
power) shutdown -H now;;
sleep) hibernate-ram;;
mute)
$alsa && $amixer toggle;;
volumeup)
$alsa && $amixer 3dB+
$oss && $ossmix +3;;
volumedown)
$alsa && $amixer 3dB-
$oss && $ossmix -3;;
*) uhd $*;;
esac
;;
cd)
case $action in
play) :;;
stop) :;;
prev) :;;
next) :;;
*) uhd $*;;
esac
;;
jack)
case $id in
*plug) :;;
*) uhd $*;;
esac
;;
video)
case $action in
displayoff) :;;
*) uhd $*;;
esac
;;
*) uhd $*;;
esac
unset alsa oss amixer ossmix group action device id
# vim:fenc=utf-8:ft=sh:ci:pi:sts=4:sw=4:ts=4:
Notice that the above script is compatible with ALSA and OSS, so no extra actions are needed when switching OSS from ALSA or the opposite. Do not hesitate to edit the script!
The above script also makes use of a power management profile using hprofile. Refer to the hprofile article for more information.
Userspace utilities
Many packages use ACPI functions. A few are listed here:
- sys-power/acpi: to show information from the /proc filesystem, such as battery status or thermal information
- sys-power/acpitool: a small command line application, intended to be a replacement for the apm tool
- sys-power/acpilight: replacement for xbacklight that uses the ACPI interface to set brightness
- app-laptop/laptop-mode-tools: linux kernel laptop_mode user-space utilities
- x11-misc/cbatticon: a lightweight and fast battery icon that sits in your system tray
- app-admin/conky: an advanced, highly configurable system monitor for X
See also
- ACPI/ThinkPad-special-buttons — describes how to configure ACPI events and actions for the Lenovo ThinkPad T410 laptop.
- Suspend and hibernate — describes how to suspend or hibernate a Gentoo system.
- Knowledge Base:Disabling ACPI support at boot time