Asus P31SDの形で新しいアップデートを購入し、それにLinuxをインストールした後、希望の10-12ではなく6時間しかバッテリー寿命が表示されないのは非常に残念でした。 Windowsに戻ることはできなかったので(ここではcywginも役に立たなかったので)、コーヒーを用意して次の週末にこれらの問題を解決することにしました。
Ubuntu 11.10を使用したソリューションを例として検討します。
PS理論的には、このガイドはSandybridgeおよびNvidia Optimusを搭載したすべてのラップトップに適しています。
私たちにとってラップトップ構成の重要な部分:
プロセッサー :Intel Core i3-2310M( Sandybridge )
ビデオアダプター :Nvidia Geforce 520M( Nvidia Optimus )
そのため、Linuxをインストールした直後に、次の問題が発生します。
- クレイジーな明るさ。
- エネルギー消費の増加が私たちの主な目標です。
- スリープモードが機能しない-生活を楽にするために、機能する
明るさ
症状:ハードウェアモジュールとDEのソフトウェアモジュールが同時にバックライトを制御しようとしています。その結果、ランダムな方向にジャンプが発生します。
ラップトップの明るさの問題は非常に一般的でさまざまですが、ほとんどすべてが1つの方法で解決されます
acpi_backlight=vendor
をブートパラメーターに追加します。
/etc/default/grub
を
GRUB_CMDLINE_LINUX
にパラメーターを入力すると、次のようになります。
GRUB_CMDLINE_LINUX="acpi_backlight=vendor"
保存して、grub構成を更新し(
sudo update-grub
)、再起動し、適切なバックライト動作を楽しみます。
スリープモード
症状:ラップトップをスリープ状態にすると、デバイスは激しく抵抗し、最終的にフリーズします。
簡単な検索の後、犯人を見つけました:眠りに落ちたUSBハブ。 次に、
pm-utils
フックである解決策を見つけます。
/etc/pm/sleep.d/20_custom-asus-u31sd:
#!/bin/sh BUSES="0000:00:1a.0 0000:00:1d.0" case "${1}" in hibernate|suspend) # Switch USB buses off for bus in $BUSES; do echo -n $bus | tee /sys/bus/pci/drivers/ehci_hcd/unbind done ;; resume|thaw) # Switch USB buses back on for bus in $BUSES; do echo -n $bus | tee /sys/bus/pci/drivers/ehci_hcd/bind done ;; esac
保存し、実行可能にします(
sudo chmod +x /etc/pm/sleep.d/20_custom-asus-u31sd
)、確認します。
動作しますか? ほぼ。 スリープ状態から抜けると、ディスプレイの明るさは最小限に低下します...同じフックで見落としを修正できます。 どこか/ sysから輝度値を取得できます。 ほとんどのドライバーはパラメーターを角質と呼ぶため、そこでバックライトを探すだけです。
$ find /sys -name backlight /sys/devices/platform/asus-nb-wmi/backlight
見つかった! 内部を調べた後、輝度値は
/sys/devices/platform/asus-nb-wmi/backlight/asus-nb-wmi/brightness
。 前のフックに保存と復元を追加しましょう。
#!/bin/sh BUSES="0000:00:1a.0 0000:00:1d.0" case "${1}" in hibernate|suspend) # Switch USB buses off for bus in $BUSES; do echo -n $bus | tee /sys/bus/pci/drivers/ehci_hcd/unbind done # Saving brightness to /tmp/br cat /sys/devices/platform/asus-nb-wmi/backlight/asus-nb-wmi/brightness > /tmp/br ;; resume|thaw) # Switch USB buses back on for bus in $BUSES; do echo -n $bus | tee /sys/bus/pci/drivers/ehci_hcd/bind done # Restoring brightness from /tmp/br cat /tmp/br > /sys/devices/platform/asus-nb-wmi/backlight/asus-nb-wmi/brightness ;; esac
もう一度確認します...動作します! それでは、主要な敵であるエネルギー消費を始めましょう。
エネルギー消費の増加
すでに3段階でLinuxの欲求を打ち破ります。
1.個別のグラフィックス
ラップトップには、統合(Intel)およびディスクリート(Nvidia)の2つのビデオアダプターが装備されています。 しかし、Nvidiaだけでなく、Nvidia Optimusテクノロジーも。 同じOptimus、Linuxの予見可能な将来のサポートは期待されていません。
しかし、オープンソースへの栄光、世界は愛好家でいっぱいです。 Optimusとの闘争(そして時には友情)はBumblebeeです。 彼らは良い進歩を遂げました:
- バンブルビーは、ニーズに応じて個別のカードを有効/無効にすることができます
- バンブルビーは、アプリケーションに個別のカードを使用させることができます
当然、プロジェクトは松葉杖でいっぱいですが、それは何もないよりはましです。
インストールしましょう:
$ sudo add-apt-repository ppa:bumblebee/stable $ sudo apt-get update $ sudo apt-get install bumblebee
残念ながら、ほとんどすべてのラップトップにはビデオカードをオン/オフするための異なるACPIコマンドがあります( ここで大きなテーブルが収集されています )。 上記の表からコマンドを取得し、
/etc/bumblebee/cardoff
および
/etc/bumblebee/cardon
/etc/bumblebee/cardoff
それぞれ書き込みます。
/etc/bumblebee/cardoff:
\_SB.PCI0.PEG0.GFX0.DOFF
/etc/bumblebee/cardon:
\_SB.PCI0.PEG0.GFX0.DON
次に、
/etc/bumblebee/bumblebee.conf
で電源管理
/etc/bumblebee/bumblebee.conf
オンにします。
ENABLE_POWER_MANAGEMENT=Y
誰も使用しない場合は、サービスを終了します(それに応じて個別のグラフィックカードをオフにします)。
STOP_SERVICE_ON_EXIT=Y
保存し、再起動し、エネルギー消費を確認します-大幅に減少しました。
先に進む前に、待機モードを再度修正します。実際には、スリープ状態になると、アクティブなビデオドライバー(nvidiaまたはnouveau)がカードの準備を試みますが、カードはオフになります。 それを簡単に解決して「額に」しましょう。上記のフックに2つのコマンドを追加します。
- 眠りにつく前に地図を含めます。
- 目覚めた後、カードをオフにします。
フックは次の形式を取ります。
#!/bin/sh BUSES="0000:00:1a.0 0000:00:1d.0" case "${1}" in hibernate|suspend) # Switch USB buses off for bus in $BUSES; do echo -n $bus | tee /sys/bus/pci/drivers/ehci_hcd/unbind done cat /sys/devices/platform/asus-nb-wmi/backlight/asus-nb-wmi/brightness > /tmp/br # Switch optimus back on before going to sleep, avoids the "constant on" # bug that occurs after 2 suspend/resume cycles (thanks kos888) echo `cat /etc/bumblebee/cardon` | tee /proc/acpi/call ;; resume|thaw) # Switch USB buses back on for bus in $BUSES; do echo -n $bus | tee /sys/bus/pci/drivers/ehci_hcd/bind done cat /tmp/br > /sys/devices/platform/asus-nb-wmi/backlight/asus-nb-wmi/brightness # Switch optimus off before resuming, avoids unneccessary power draw echo `cat /etc/bumblebee/cardoff` | tee /proc/acpi/call ;; esac
2.統合グラフィックスカード
異なるバージョンのコアで遊んでいると、最大2.6.39までのバージョンで消費電力が削減されていることに誤って気付きました。 これらのパラメータの検索に急いで、私は自分の勘に惑わされていませんでした。
問題が発見されました。3.0コアのi915ドライバーで受け入れられたパッチが原因です。 しかし、幸いなことに、結果なしで回避することができます。
既知の
/etc/default/grub
、パラメーター
i915.i915_enable_rc6=1
追加します。 文字列は次のように展開されます。
GRUB_CMDLINE_LINUX="acpi_backlight=vendor i915.i915_enable_rc6=1"
GRUB設定を更新し、再起動して、バッテリーの測定値を確認します。 今、あなたは生きることができます。 そして、あなたはまだそれを減らすことができます!
3.その他の微調整
powertopを実行し、推奨されるすべての調整を適用することにより、さらに0.5〜1 Whを絞ることができます。このハードウェアでは、さらに最大1時間のバッテリー寿命が得られます。 しかし、毎回powertopで遊んでみませんか? このすべてをpm-utilsを介して自動化します。 4つの個別のスクリプトを取得します。
1.理由は不明ですが、標準パッケージには含まれていない主要な調整の1つ。 プロセッサー周波数制御モードを変更します。
/etc/pm/power.d/cpu-governor
#!/bin/bash cpu_powersave() { for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo $1 > $i && echo Done. || echo Failed. done } case $1 in true) cpu_powersave "ondemand" ;; false) cpu_powersave "performance" ;; *) exit $NA esac exit 0
2. USBデバイスの電源管理モードを変更します。
/etc/pm/power.d/usb-autosuspend
#!/usr/bin/env python from os import listdir, path from sys import argv status = argv[1] USB_PATH = '/sys/bus/usb/devices/' def powersave(status): devices = listdir(USB_PATH) devices = filter(lambda x: ':' not in x, devices) for device in devices: b = listdir(path.join(USB_PATH, device)) b = filter(lambda x: ':' in x, b) is_mouse = False for i in b: if open(path.join(USB_PATH, device, i, 'bInterfaceProtocol')).read().strip() == '02': is_mouse = True break if not is_mouse: open(path.join(USB_PATH, device, 'power/control'), 'w').write(status) if status == 'true': powersave('auto') elif status == 'false': powersave('on')
スクリプトはマウスを検出でき、消すことはありません。
3、4。他のデバイスの電源管理モードを変更します。
/etc/pm/power.d/scsi_host-link_power_management
#!/bin/bash powersave() { for i in /sys/class/scsi_host/host?/link_power_management_policy; do echo $1 > $i && echo Done. || echo Failed. done } case $1 in true) powersave "min_power" ;; false) powersave "max_performance" ;; *) exit $NA esac exit 0
/etc/pm/power.d/pci-power-control
#!/bin/bash powersave() { for i in /sys/bus/pci/devices/*/power/control; do echo $1 > $i && echo Done. || echo Failed. done } case $1 in true) powersave "auto" ;; false) powersave "on" ;; *) exit $NA esac exit 0
これらのファイルを実行可能にし、一挙に使用します:
sudo pm-powersave true
。
セットアップは終了しました。 公式証明:
そして結果は図式化されています: