Last active
December 17, 2016 22:19
-
-
Save kawashirov/7d7b6f6cf4c347e5625169ac53d774b9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
event=ac_adapter | |
action=/root/power-loss.sh "%e" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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