Skip to content

Instantly share code, notes, and snippets.

@kawashirov
Last active December 17, 2016 22:19
Show Gist options
  • Save kawashirov/7d7b6f6cf4c347e5625169ac53d774b9 to your computer and use it in GitHub Desktop.
Save kawashirov/7d7b6f6cf4c347e5625169ac53d774b9 to your computer and use it in GitHub Desktop.
event=ac_adapter
action=/root/power-loss.sh "%e"
#!/bin/bash
TIMEOUT=5
echo "$(date +%s) Catch event: $@" >> /var/log/power-loss.log
function set_scsi_host_power () {
for host in $(find /sys/class/scsi_host/ -maxdepth 1 -name 'host[0-9]'); do
f="$host/link_power_management_policy"
[[ -f $f ]] && echo "$1" > "$f"
done
}
function set_cpu_governor () {
for cpu in $(find /sys/devices/system/cpu/ -maxdepth 1 -name 'cpu[0-9]'); do
f="$cpu/cpufreq/scaling_governor"
[[ -f $f ]] && echo "$1" > "$f"
done
}
function set_sched_mc_power_savings () {
if [[ -f /sys/devices/system/cpu/sched_mc_power_savings ]]; then
echo "$1" > /sys/devices/system/cpu/sched_mc_power_savings
fi
}
function set_snd_hda_intel_power_save () {
if [[ -f /sys/module/snd_hda_intel/parameters/power_save ]]; then
echo "$1" > /sys/module/snd_hda_intel/parameters/power_save
fi
}
function set_pcie_aspm_policy () {
if [[ -f /sys/module/pcie_aspm/parameters/policy ]]; then
echo "$1" > /sys/module/pcie_aspm/parameters/policy
fi
}
function set_acpi_video0_brightness () {
if [[ -f /sys/class/backlight/acpi_video0/brightness ]]; then
if [[ $1 == max ]] && [[ -f /sys/class/backlight/acpi_video0/max_brightness ]]; then
brightness="$(cat /sys/class/backlight/acpi_video0/max_brightness)"
else
brightness="$1"
fi
echo "$brightness" > /sys/class/backlight/acpi_video0/brightness
fi
}
if on_ac_power; then
echo "$(date +%s) AC power is ON." >> /var/log/power-loss.log
echo 0 > /proc/sys/vm/laptop_mode
set_scsi_host_power max_performance
set_cpu_governor conservative
set_sched_mc_power_savings 0
set_snd_hda_intel_power_save 0
modprobe uvcvideo
set_pcie_aspm_policy performance
set_acpi_video0_brightness max
# Disabled due to waking up alredy sleeping HDD.
#hdparm -B 127 -S 240 /dev/sdb
else
echo "$(date +%s) AC power is OFF." >> /var/log/power-loss.log
echo 5 > /proc/sys/vm/laptop_mode
set_scsi_host_power min_power
set_cpu_governor powersave
set_sched_mc_power_savings 1
set_snd_hda_intel_power_save 10
modprobe -r uvcvideo
set_pcie_aspm_policy powersave
set_acpi_video0_brightness 0
# Disabled due to waking up alredy sleeping HDD.
#hdparm -B 1 -S 1 /dev/sdb
sleep $TIMEOUT
# if still no power -> suspend
if ! on_ac_power; then
echo "$(date +%s) No AC power in $TIMEOUT sec! Suspending..." >> /var/log/power-loss.log
loginctl lock-sessions >> /var/log/power-loss.log &
pm-suspend >> /var/log/power-loss.log &
else
echo "$(date +%s) AC power back in $TIMEOUT sec! Not suspending." >> /var/log/power-loss.log
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment