terça-feira, novembro 04, 2014

Configurando Linux Mint para aumentar duração da bateria do notebook

Essa dica servirá para aqueles que possuem ultrabooks com baterias que duram seis, às vezes até sete horas, de uso sem precisar de carga.

Estive analisando por alguns dias o comportamento do consumo da bateria do meu Ultrabook Samsung Serie 9 NP900x4C após a instalação do Linux Mint 17 Qiana.

Percebi que o kernel traz, nativamente configurado, algumas opções para reduzir o consumo de energia quando o notebook não está conectado na energia. Entre essas opções uma que desliga as portas USB quando elas estão ociosas.

Após algumas pesquisas encontrei os sites abaixo listados e dele extraí informações para criação de um script que ao ser executado configura um conjunto de opções para reduzir ainda mais o consumo de energia quando o ultrabook está usando a bateria.

Após a leitura desses artigos criei o script abaixo com duas opções: max_battery e max_performance.

#!/bin/bash -e

setting_max_performance() {
  # Temp disable ethernet port
  sudo modprobe r8169

  # Disable wake up on lan if I do use ethernet port
  # ethtool -s eth2 wol d;

  # Temp disable bluetooth
  # modprobe -r btusb
  samsung-tools -q -B on

  # Adjust backlight to start much lower
  echo 25 | sudo tee /sys/class/backlight/acpi_video0/brightness > /dev/null

  # - NMI Watchdog (turned off)
  echo 1 | sudo tee /proc/sys/kernel/nmi_watchdog > /dev/null;

  # - SATA Active Link Powermanagement
  echo 'max_performance' | sudo tee /sys/class/scsi_host/host0/link_power_management_policy > /dev/null;

  # - USB Autosuspend (after 2 secs of inactivity)
  #for i in `find /sys/bus/usb/devices/*/power/control`; do echo auto | sudo tee $i > /dev/null; done;
  #for i in `find /sys/bus/usb/devices/*/power/autosuspend`; do echo 2 | sudo tee $i > /dev/null; done;

  # - Device Power Management
  #echo auto | sudo tee /sys/bus/i2c/devices/*/power/control > /dev/null;
  #echo auto | sudo tee /sys/bus/pci/devices/*/power/control > /dev/null;

  # - CPU Scaling (on demand scaling governor for all CPU's
  #for i in `find /sys/devices/system/cpu/*/cpufreq/scaling_governor`; do echo ondemand | sudo tee $i > /dev/null; done;
}

setting_max_battery() {
  # Temp disable ethernet port
  sudo modprobe -r r8169

  # Disable wake up on lan if I do use ethernet port
  # ethtool -s eth2 wol d;

  # Temp disable bluetooth
  # modprobe -r btusb
  samsung-tools -q -B off

  # Adjust backlight to start much lower
  echo 0 | sudo tee /sys/class/backlight/acpi_video0/brightness > /dev/null

  # - NMI Watchdog (turned off)
  echo 0 | sudo tee /proc/sys/kernel/nmi_watchdog > /dev/null;

  # - SATA Active Link Powermanagement
  echo 'min_power' | sudo tee /sys/class/scsi_host/host0/link_power_management_policy > /dev/null;

  # - USB Autosuspend (after 2 secs of inactivity)
  #for i in `find /sys/bus/usb/devices/*/power/control`; do echo auto | sudo tee $i > /dev/null; done;
  #for i in `find /sys/bus/usb/devices/*/power/autosuspend`; do echo 2 | sudo tee $i > /dev/null; done;

  # - Device Power Management
  #echo auto | sudo tee /sys/bus/i2c/devices/*/power/control > /dev/null;
  #echo auto | sudo tee /sys/bus/pci/devices/*/power/control > /dev/null;

  # - CPU Scaling (on demand scaling governor for all CPU's
  #for i in `find /sys/devices/system/cpu/*/cpufreq/scaling_governor`; do echo ondemand | sudo tee $i > /dev/null; done;
}

print_values() {
  echo -n "Brightness: "; 
  cat /sys/class/backlight/acpi_video0/brightness

  echo -n "NMI Watchdog: "; 
  cat /proc/sys/kernel/nmi_watchdog

  echo -n "SATA Active Link Power Management: "; 
  cat /sys/class/scsi_host/host0/link_power_management_policy

  echo "USB Autosuspend: "; 
  for i in `find /sys/bus/usb/devices/*/power/control`; do echo -n $i": "; cat $i; done; 
  for i in `find /sys/bus/usb/devices/*/power/autosuspend`; do echo -n $i": "; cat $i; done;

  #echo "Device Power Management: "; 
  #for i in `find /sys/bus/i2c/devices/*/power/control`; do echo -n $i": "; cat $i; done; 
  #for i in `find /sys/bus/pci/devices/*/power/control`; do echo -n $i": "; cat $i; done;

  echo "CPU Scaling: "; 
  for i in `find /sys/devices/system/cpu/*/cpufreq/scaling_governor`; do echo -n $i": "; cat $i; done;

  echo "Devices: "; 
  /usr/bin/samsung-tools -a
}

print_info() {
  echo "usage: np900x4c [max_performance|max_battery|show]"
}

case $1 in
  max_performance )
      setting_max_performance
      print_values
    ;;
  max_battery )
      setting_max_battery
      print_values
    ;;
  show )
      print_values
    ;;
  * )
      print_info
      print_values
    ;;
esac

exit $?