「電源管理」の版間の差分
→トラブルシューティング: 同期 |
同期:マウスとキーボード以外のUSB デバイス→USB の自動サスペンド |
||
| (2人の利用者による、間の28版が非表示) | |||
| 2行目: | 2行目: | ||
[[en:Power management]] |
[[en:Power management]] |
||
[[es:Power management]] |
[[es:Power management]] |
||
[[pt:Power management]] |
|||
[[ru:Power management]] |
[[ru:Power management]] |
||
[[zh-hans:Power management]] |
[[zh-hans:Power management]] |
||
| 7行目: | 8行目: | ||
{{Related|電源管理/サスペンドとハイバネート}} |
{{Related|電源管理/サスペンドとハイバネート}} |
||
{{Related|電源管理/復帰トリガー}} |
{{Related|電源管理/復帰トリガー}} |
||
{{Related|Display Power Management Signaling}} |
|||
{{Related|CPU 周波数スケーリング}} |
{{Related|CPU 周波数スケーリング}} |
||
{{Related|Display Power Management Signaling}} |
|||
{{Related|ハイブリッドグラフィック}} |
{{Related|ハイブリッドグラフィック}} |
||
{{Related|カーネルモジュール}} |
|||
{{Related|sysctl}} |
{{Related|sysctl}} |
||
{{Related|udev}} |
|||
{{Related articles end}} |
{{Related articles end}} |
||
[[Wikipedia:Power management|電源管理]]とは、アクティブでない時に電源を切ったりシステムのコンポーネントを低電力状態にする機能です。 |
[[Wikipedia:Power management|電源管理]]とは、アクティブでない時に電源を切ったりシステムのコンポーネントを低電力状態に切り替えたりする機能です。 |
||
Arch Linux では、電源管理は主に2つの部分からなります: |
Arch Linux では、電源管理は主に2つの部分からなります: |
||
# Linux カーネルの設定。ハードウェアと対話します。 |
# Linux [[カーネル]]の設定。ハードウェアと対話します。 |
||
#* [[カーネルパラメータ]] |
#* [[カーネルパラメータ]] |
||
#* [[カーネルモジュール]] |
#* [[カーネルモジュール]] |
||
| 26行目: | 25行目: | ||
== ユーザースペースツール == |
== ユーザースペースツール == |
||
以下のツールを使うことで、 |
以下のツールを使うことで、設定ファイルを手動で編集せずに多くの設定を変更できます。どのツールも多かれ少なかれ同じような動作をするので、衝突を避けるためにツールはどれか'''一つだけ'''を実行してください。[[:Category:電源管理|電源管理カテゴリ]]を見れば、Arch Linux にどんな電源管理の選択肢が存在するかわかります。 |
||
以下は省電力設定をするために作られた人気のあるスクリプトやツールです: |
以下は省電力設定をするために作られた人気のあるスクリプトやツールです: |
||
| 35行目: | 34行目: | ||
* {{App|[[Laptop Mode Tools]]|ノートパソコンの省電力設定をするユーティリティ。多少設定が要りますが省電力設定ユーティリティのデファクトスタンダードとされています。|https://github.com/rickysarraf/laptop-mode-tools|{{AUR|laptop-mode-tools}}}} |
* {{App|[[Laptop Mode Tools]]|ノートパソコンの省電力設定をするユーティリティ。多少設定が要りますが省電力設定ユーティリティのデファクトスタンダードとされています。|https://github.com/rickysarraf/laptop-mode-tools|{{AUR|laptop-mode-tools}}}} |
||
* {{App|libsmbios|Dell SMBIOS テーブルと対話するためのライブラリおよびツール。|https://github.com/dell/libsmbios|{{Pkg|libsmbios}}}} |
* {{App|libsmbios|Dell SMBIOS テーブルと対話するためのライブラリおよびツール。|https://github.com/dell/libsmbios|{{Pkg|libsmbios}}}} |
||
* {{App|[[powertop]]|消費電力や電源管理の問題を診断して省電力設定を補助するツール。|https:// |
* {{App|[[powertop]]|消費電力や電源管理の問題を診断して省電力設定を補助するツール。|https://github.com/fenrus75/powertop|{{Pkg|powertop}}}} |
||
* {{App|powerstat|ACPI や Intel RAPL インターフェイスを使用して電力消費量を測定するツール。|https://github.com/ColinIanKing/powerstat|{{AUR|powerstat}}}} |
|||
* {{App|[[systemd]]|システムおよびサービスマネージャ。|https://freedesktop.org/wiki/Software/systemd/|{{Pkg|systemd}}}} |
|||
* {{App|[[systemd]]|システムおよびサービスマネージャ。|https://systemd.io/|{{Pkg|systemd}}}} |
|||
* {{App|[[TLP]]|Linux 向けの先進的な電源管理。|https://linrunner.de/tlp|{{Pkg|tlp}}}} |
* {{App|[[TLP]]|Linux 向けの先進的な電源管理。|https://linrunner.de/tlp|{{Pkg|tlp}}}} |
||
* {{App|TuneD|システム上のデバイスの監視と状況に応じた設定を行うデーモン。|https://tuned-project.org|{{Pkg|tuned}}}} |
|||
* {{App|[[Wikipedia:UPower|UPower]]|電源デバイスの列挙、デバイスイベントの監視、履歴と統計のクエリを行う抽象化レイヤー。|https://upower.freedesktop.org|{{Pkg|upower}}}} |
|||
* {{App|[[power-profiles-daemon]]|D-Bus 経由での電源プロファイルの管理を可能にします。|https://gitlab.freedesktop.org/upower/power-profiles-daemon|{{Pkg|power-profiles-daemon}}}} |
|||
=== グラフィカル === |
=== グラフィカル === |
||
* {{App|batsignal|libnotify を使用してバッテリレベルの低下を警告する軽量バッテリモニタ。|https://github.com/electrickite/batsignal|{{ |
* {{App|batsignal|libnotify を使用してバッテリレベルの低下を警告する軽量バッテリモニタ。|https://github.com/electrickite/batsignal|{{Pkg|batsignal}}}} |
||
* {{App|cbatticon|軽量で高速なバッテリアイコンをシステムトレイに表示。|https://github.com/valr/cbatticon|{{Pkg|cbatticon}}}} |
* {{App|cbatticon|軽量で高速なバッテリアイコンをシステムトレイに表示。|https://github.com/valr/cbatticon|{{Pkg|cbatticon}}}} |
||
* {{App|GNOME Power Statistics|GNOME のシステム電力情報および統計。|https://gitlab.gnome.org/GNOME/gnome-power-manager|{{Pkg|gnome-power-manager}}}} |
* {{App|GNOME Power Statistics|GNOME のシステム電力情報および統計。|https://gitlab.gnome.org/GNOME/gnome-power-manager|{{Pkg|gnome-power-manager}}}} |
||
| 53行目: | 56行目: | ||
* {{App|vattery|システムトレイ内のラップトップバッテリのステータスを表示する、 Vala で書かれたバッテリ監視アプリケーション。|https://www.jezra.net/projects/vattery.html|{{AUR|vattery}}}} |
* {{App|vattery|システムトレイ内のラップトップバッテリのステータスを表示する、 Vala で書かれたバッテリ監視アプリケーション。|https://www.jezra.net/projects/vattery.html|{{AUR|vattery}}}} |
||
== |
== ACPI イベント == |
||
=== ACPI イベント === |
|||
''systemd'' は一部の電源関連の [[Wikipedia:ja:Advanced Configuration and Power Interface|ACPI]] イベントを処理します。これらのイベントの動作は {{ic|/etc/systemd/logind.conf}} や {{ic|/etc/systemd/logind.conf.d/*.conf}} で設定できます ({{man|5|logind.conf}} を参照)。専用の電源マネージャを持たないシステムでは、この方法は [[acpid]] デーモンの代わりになりえます。ちなみに、[[acpid]] は通常、ACPI イベントに対応するために使われるデーモンです。 |
''systemd'' は一部の電源関連の [[Wikipedia:ja:Advanced Configuration and Power Interface|ACPI]] イベントを処理します。これらのイベントの動作は {{ic|/etc/systemd/logind.conf}} や {{ic|/etc/systemd/logind.conf.d/*.conf}} で設定できます ({{man|5|logind.conf}} を参照)。専用の電源マネージャを持たないシステムでは、この方法は [[acpid]] デーモンの代わりになりえます。ちなみに、[[acpid]] は通常、ACPI イベントに対応するために使われるデーモンです。 |
||
| 91行目: | 92行目: | ||
|} |
|} |
||
変更を適用するには |
変更を適用するには、{{ic|systemd-logind.service}} を[[リロード|再読み込み]]してください。 |
||
{{Note| |
|||
# systemctl kill -s HUP systemd-logind |
|||
* ''systemd'' は AC とバッテリの ACPI イベントを処理することができません。なので、[[Laptop Mode Tools]] や他の似たようなツールを使用している場合、[[acpid]] が依然として必要です。 |
|||
* 蓋のスイッチを短い間隔で動作させると、''logind'' は、ドックが存在するかどうかを検出するために 90 秒までサスペンドアクションを遅らせます。[https://lists.freedesktop.org/archives/systemd-devel/2015-January/027131.html] この遅延は systemd v220 で設定可能になりました。[https://github.com/systemd/systemd/commit/9d10cbee89ca7f82d29b9cb27bef11e23e3803ba] {{ic|logind.conf}} か、このファイルのドロップインファイルで {{ic|1=HoldoffTimeoutSec=30s}} のように設定できます。 |
|||
{{Note|''systemd'' は AC とバッテリの ACPI イベントを処理することができません。なので、[[Laptop Mode Tools]] や他の似たようなツールを使用している場合、[[acpid]] が依然として必要です。}} |
|||
}} |
|||
=== 電源マネージャ === |
|||
一部の[[デスクトップ環境]]には、''systemd'' の ACPI 設定の一部あるいは全てを [https:// |
一部の[[デスクトップ環境]]には、''systemd'' の ACPI 設定の一部あるいは全てを [https://systemd.io/INHIBITOR_LOCKS/ inhibit] する (一時的にオフにする) 電源マネージャが含まれています。そのような電源マネージャが実行されている場合、電源マネージャだけで ACPI イベントに対する動作を設定することができます。{{ic|/etc/systemd/logind.conf}} や {{ic|/etc/systemd/logind.conf.d/*.conf}} を変更する必要があるのは、電源マネージャによって inhibit されていないイベントに対する挙動を設定したい場合のみです。 |
||
注意点として、電源マネージャが適切なイベントに対して ''systemd'' を inhibit しないと、''systemd'' がシステムをサスペンドし、その後サスペンドから復帰すると今度は電源マネージャがシステムを再びサスペンドしてしまうという状況に陥る可能性があります。[[ |
注意点として、電源マネージャが適切なイベントに対して ''systemd'' を inhibit しないと、''systemd'' がシステムをサスペンドし、その後サスペンドから復帰すると今度は電源マネージャがシステムを再びサスペンドしてしまうという状況に陥る可能性があります。[[GNOME]]、[[MATE]]、[[Plasma]]、そして [[Xfce]] の電源マネージャは、必要な ''inhibited'' コマンドを発行します。''inhibited'' コマンドが発行されない場合 ([[acpid]] などを使って ACPI イベントを処理している場合)、{{ic|Handle}} オプションを {{ic|ignore}} に設定してください。{{man|1|systemd-inhibit}} も参照してください。 |
||
=== xss-lock === |
|||
{{pkg|xss-lock}} は systemd の {{ic|suspend}}、{{ic|hibernate}}、{{ic|lock-session}}、{{ic|unlock-session}} イベントで適切なアクションを実行します (ロッカーを実行し、ユーザがロッカーをアンロックまたは kill するまで待機する)。''xss-lock'' は [[DPMS]] イベントにも反応し、それに応じてロッカーを実行したり kill したりします。 |
{{pkg|xss-lock}} は systemd の {{ic|suspend}}、{{ic|hibernate}}、{{ic|lock-session}}、{{ic|unlock-session}} イベントで適切なアクションを実行します (ロッカーを実行し、ユーザがロッカーをアンロックまたは kill するまで待機する)。''xss-lock'' は [[DPMS]] イベントにも反応し、それに応じてロッカーを実行したり kill したりします。 |
||
| 111行目: | 113行目: | ||
$ xss-lock -- i3lock -n -i ''background_image.png'' & |
$ xss-lock -- i3lock -n -i ''background_image.png'' & |
||
== 省電力 == |
|||
=== サスペンドとハイバネート === |
|||
{{Note|ノート PC 固有の電源管理 (バッテリーモニタリングなど) については [[ノートパソコン#電源管理]] を参照してください。また、使用している CPU と GPU に関するページも参照してください (例: [[Ryzen]]、[[AMDGPU]])。}} |
|||
''systemd'' は、カーネルのネイティブなサスペンド/レジューム機能を使用して、サスペンド (suspend to RAM) を行うコマンドや、ハイバネートを行うコマンドを提供しています。また、サスペンド前や後の動作をカスタマイズするためのフックを追加する機構も存在しています。 |
|||
このセクションは、カスタムスクリプトや udev ルールなどの省電力設定をの作成するためのリファレンスです。競合を避けるために、設定が[[#ユーザースペースツール|他のユーティリティ]]によって管理されていないことを確認してください。 |
|||
{{ic|systemctl suspend}} は何も設定しなくても動くはずですが、あなたの環境で {{ic|systemctl hibernate}} を使うには [[電源管理/サスペンドとハイバネート#ハイバネーション]] の指示に従う必要があります。 |
|||
コンピュータが AC 電源またはバッテリーで動作しているかに関わらず、ここに記載されているほとんど全ての機能には使用する価値があります。ここで挙げている機能のほとんどは、パフォーマンスへの影響は無視できるレベルであり、大抵、壊れているハードウェアやドライバのせいでデフォルトで有効化されていないだけです。電力の使用量を減らすことは発熱を減らすことでもあり、[[Wikipedia:ja:インテル ターボ・ブースト・テクノロジー|動的なオーバークロック]]によって、最近の Intel や AMD の CPU ではパフォーマンスの向上につながることもあります。 |
|||
また、サスペンドとハイバネートを組み合わせたモードが 2 つ存在します: |
|||
=== Intel Hardware P-state をサポートする CPU === |
|||
* {{ic|systemctl hybrid-sleep}} は、システムを RAM とディスクの両方にサスペンドします。なので、電源が完全に失われても、データ損失が発生しません。このモードは [[電源管理/サスペンドとハイバネート|suspend to both]] とも呼ばれています。 |
|||
* {{ic|systemctl suspend-then-hibernate}} は、最初は可能な限り長くシステムを RAM にサスペンドし、RTC アラームで復帰し、そしてハイバネートします。RTC アラームは {{man|5|systemd-sleep.conf}} 内の {{ic|HibernateDelaySec}} で設定します。デフォルトの値は、システムのバッテリーレベルが 5% に下がるまでの推定された時間に設定されます。システムにバッテリーが存在しない場合は、デフォルトで2時間に設定されます。推定時間は、{{man|5|systemd-sleep.conf}} 内の {{ic|SuspendEstimationSec}} によって指定された時間後のバッテリーレベルの変化から計算されます。{{ic|SuspendEstimationSec}} の時間後、システムは短い間サスペンドから復帰し、計測を行います (システムが手動でサスペンドから復帰された場合も、計測が行われます)。 |
|||
Intel Hardware P-state (HWP) 対応プロセッサで利用可能なエネルギー設定は、{{ic|default}}、{{ic|performance}}、{{ic|balance_performance}}、{{ic|balance_power}}、{{ic|power}} です。 |
|||
{{Note|''systemd'' は、コンピュータをスリープまたはハイバネート状態に置くために、デフォルトの''カーネル''サスペンドバックエンドに加えて、他のサスペンドバックエンドを使用することもできます (例えば [[Uswsusp]])。例は [[Uswsusp#systemd を使う]] を参照してください。}} |
|||
以下を実行することで、利用可能な設定を確認できます: |
|||
==== サスペンドやハイバネートのリクエスト時にハイブリッドスリープを行う ==== |
|||
$ cat /sys/devices/system/cpu/cpufreq/policy*/energy_performance_available_preferences |
|||
''サスペンド''や''ハイバネート''のリクエスト時にも、''ハイブリッドスリープ''を常に行うように systemd を設定することができます。 |
|||
以下のファイルを作成することで、より多くのエネルギーを節約するように設定できます: |
|||
''サスペンド''と''ハイバネート''のデフォルトの動作は、{{ic|/etc/systemd/sleep.conf.d/}} 内の ''.conf'' ファイルで設定することができます。両方の動作を ''ハイブリッドスリープ'' に設定するには: |
|||
{{hc|/etc/ |
{{hc|/etc/tmpfiles.d/energy_performance_preference.conf| |
||
w /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference - - - - balance_power |
|||
[Sleep] |
|||
# suspend=hybrid-sleep |
|||
SuspendMode=suspend |
|||
SuspendState=disk |
|||
# hibernate=hybrid-sleep |
|||
HibernateMode=suspend |
|||
HibernateState=disk |
|||
}} |
}} |
||
Intel プロセッサの電力とパフォーマンスのポリシーに関する詳細は {{man|8|x86_energy_perf_policy}} man ページを参照してください。一時ファイル/ディレクトリに関する詳細は man ページ {{man|8|systemd-tmpfiles}} や {{man|5|tmpfiles.d}} も参照してください。 |
|||
詳細は {{man|5|sleep.conf.d}} man ページと [https://docs.kernel.org/admin-guide/pm/sleep-states.html#basic-sysfs-interfaces-for-system-suspend-and-hibernation linux カーネルの電源状態に関するドキュメント]を参照してください。 |
|||
=== オーディオ === |
|||
==== サスペンドを無効化する ==== |
|||
省電力がデフォルトでオンになっているかどうかは、ドライバによります (例えば HD Audio ではオンです)。使用しているモジュールを[[Advanced Linux Sound Architecture#ロードされているモジュールの特定|特定]]し、{{ic|modinfo ''module_name''}} を実行して、省電力機能を調整あるいは無効化する ({{ic|power_save}} のような) [[カーネルモジュールパラメータ]] を探してください。 |
|||
デバイスをサーバなどとして使用している場合、サスペンドは必要ないかもしれませんし、かえって望ましくない可能性もあります。 |
|||
任意のスリープ状態を設定することができます: |
|||
{{Note|省電力機能はクリックノイズ (ポップ音) や他の問題を引き起こすかもしれません。それらの解決策は専用のページを参照してください: |
|||
{{hc|/etc/systemd/sleep.conf.d/disable-suspend.conf|2= |
|||
[Sleep] |
|||
AllowSuspend=no |
|||
AllowHibernation=no |
|||
AllowSuspendThenHibernate=no |
|||
AllowHybridSleep=no |
|||
}} |
|||
* [[Advanced Linux Sound Architecture/トラブルシューティング#省電力]] |
|||
=== スリープフック === |
|||
* [[PipeWire#再生開始時に明らかな音声の遅延やポップノイズ/音割れが発生する]] |
|||
* [[PulseAudio/トラブルシューティング#音声の再生時と停止時に破裂音]] |
|||
==== サスペンド/リジュームのサービスファイル ==== |
|||
サービスファイルを ''suspend.target''、''hibernate.target''、''sleep.target''、''hybrid-sleep.target''、そして ''suspend-then-hibernate.target'' にフックすることで、サスペンド/ハイバネート前や後に行うアクションを設定できます。ユーザのアクションと root/システムのアクションを設定するには、別々のファイルを作成する必要があります。{{ic|suspend@''user''}} と {{ic|resume@''user''}} サービスを[[有効化]]してこれらをブート時に起動させてください。例: |
|||
{{hc|/etc/systemd/system/suspend@.service|2= |
|||
[Unit] |
|||
Description=User suspend actions |
|||
Before=sleep.target |
|||
[Service] |
|||
User=%I |
|||
Type=forking |
|||
Environment=DISPLAY=:0 |
|||
ExecStartPre= -/usr/bin/pkill -u %u unison ; /usr/local/bin/music.sh stop |
|||
ExecStart=/usr/bin/sflock |
|||
ExecStartPost=/usr/bin/sleep 1 |
|||
[Install] |
|||
WantedBy=sleep.target |
|||
}} |
}} |
||
=== バックライト === |
|||
{{hc|/etc/systemd/system/resume@.service|2= |
|||
[Unit] |
|||
Description=User resume actions |
|||
After=suspend.target |
|||
[[バックライト]]を見て下さい。 |
|||
[Service] |
|||
User=%I |
|||
Type=simple |
|||
ExecStart=/usr/local/bin/ssh-connect.sh |
|||
=== Bluetooth === |
|||
[Install] |
|||
WantedBy=suspend.target |
|||
}} |
|||
[[Bluetooth]] を完全に無効化するには、{{ic|btusb}} と {{ic|bluetooth}} モジュールを[[ブラックリスト]]に入れてください。 |
|||
{{Note|スクリーンが"ロックされる"前にスクリーンロックが返ってきてしまい、サスペンドから復帰するときに画面が点滅することがあります。{{ic|1=ExecStartPost=/usr/bin/sleep 1}} で小さな遅延を追加することでこれを防止できます。}} |
|||
あるいは、以下の udev ルールを作成してください: |
|||
root/システムのアクションの場合 ({{ic|root-resume}} と {{ic|root-suspend}} を[[有効化]]してこれらをブート時に起動させてください): |
|||
{{hc|/etc/ |
{{hc|/etc/udev/rules.d/50-bluetooth.rules|2= |
||
# disable bluetooth |
|||
[Unit] |
|||
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="0" |
|||
Description=Local system suspend actions |
|||
Before=sleep.target |
|||
[Service] |
|||
Type=simple |
|||
ExecStart=-/usr/bin/pkill sshfs |
|||
[Install] |
|||
WantedBy=sleep.target |
|||
}} |
}} |
||
Bluetooth を一時的にオフにしたい場合は、{{man|8|rfkill}} を使ってください: |
|||
{{hc|/etc/systemd/system/root-resume.service|2= |
|||
[Unit] |
|||
Description=Local system resume actions |
|||
After=suspend.target |
|||
# rfkill block bluetooth |
|||
[Service] |
|||
Type=simple |
|||
ExecStart=/usr/bin/systemctl restart mnt-media.automount |
|||
=== ウェブカメラ === |
|||
[Install] |
|||
WantedBy=suspend.target |
|||
}} |
|||
内蔵のウェブカメラを使わない場合、{{ic|uvcvideo}} モジュールを[[ブラックリスト]]に入れてください。 |
|||
{{Tip|サービスファイルについてのヒント (詳しくは {{man|5|systemd.service}}): |
|||
* {{ic|1=Type=oneshot}} の場合、複数の {{ic|1=ExecStart=}} 行を使うことができます。それ以外の場合は使える {{ic|ExecStart}} は一行だけです。{{ic|ExecStartPre}} を使ったりコマンドをセミコロンで分割することでコマンドを追加することができます (最初の例を見て下さい -- セミコロンの前後にはスペースが''必要''です)。 |
|||
* コマンドの前に {{ic|-}} を付けると、0以外の終了ステータスは無視され、コマンドは成功したとして扱われます。 |
|||
* サービスファイルのトラブルシューティングのときにエラーを見つけるには [[journalctl]] を使うのがベストです。 |
|||
}} |
|||
=== カーネルパラメータ === |
|||
==== サスペンド/レジュームのサービスファイルの統合 ==== |
|||
このセクションでは {{ic|/etc/sysctl.d/}} 内の設定を使います。このディレクトリは、''"カーネルの sysctl パラメータ用のドロップインディレクトリです"''。詳細は、[http://0pointer.de/blog/projects/the-new-configuration-files The New Configuration Files] や、より詳しい {{man|5|sysctl.d}} を見てください。 |
|||
サスペンド/レジュームのサービスファイルを統合すれば、様々なフェイズ (スリープ/レジューム) やターゲット (サスペンド/ハイバネート/ハイブリッドスリープ) でやることをひとつのフックで行うことができます。 |
|||
==== NMI watchdog の無効化 ==== |
|||
例と説明: |
|||
[[Wikipedia:Non-maskable interrupt|NMI]] watchdog は、カーネルパニックを引き起こすハードウェアのハングアップをキャッチするデバッグ機能です。システムによっては大量の割り込みが発生するため、消費電力の増加につながっていることがあります: |
|||
{{hc|/etc/systemd/system/wicd-sleep.service|2= |
|||
[Unit] |
|||
Description=Wicd sleep hook |
|||
Before=sleep.target |
|||
StopWhenUnneeded=yes |
|||
{{hc|/etc/sysctl.d/disable_watchdog.conf|2= |
|||
[Service] |
|||
kernel.nmi_watchdog = 0 |
|||
Type=oneshot |
|||
RemainAfterExit=yes |
|||
ExecStart=-/usr/share/wicd/daemon/suspend.py |
|||
ExecStop=-/usr/share/wicd/daemon/autoconnect.py |
|||
[Install] |
|||
WantedBy=sleep.target |
|||
}} |
}} |
||
もしくは起動の初期で完全に無効化するには[[カーネルパラメータ|カーネルライン]]に {{ic|1=nmi_watchdog=0}} を追加してください。 |
|||
* {{ic|1=RemainAfterExit=yes}}: 起動後、明示的に止められるまでサービスは常時 active とみなされます。 |
|||
* {{ic|1=StopWhenUnneeded=yes}}: active 時、他のサービスから必要とされなくなった場合、サービスは停止されます。この例では、''sleep.target'' が停止されるとこのサービスは停止されます。 |
|||
* ''sleep.target'' は ''suspend.target''、''hibernate.target''、''hybrid-sleep.target'' から呼ばれ、''sleep.target'' 自身は ''StopWhenUnneeded'' サービスなので、タスクごとにフックが正しく起動・停止することが保証されています。 |
|||
==== ライトバック時間 ==== |
|||
===== 汎用のサービステンプレート ===== |
|||
仮想メモリのダーティライトバック時間を増やすことでディスク I/O がまとめられて、断続的なディスクの書き込みが減って、消費電力が抑えられます。この値を60秒に設定するには (デフォルトは5秒です): |
|||
この例では、既存の systemd サービスを電源イベントにフックさせるために使用できる[http://0pointer.net/blog/projects/instances.html テンプレートサービス]を作ります:[https://narkive.com/mYzxSIDN.6] |
|||
{{hc|/etc/ |
{{hc|/etc/sysctl.d/dirty.conf|2= |
||
vm.dirty_writeback_centisecs = 6000 |
|||
[Unit] |
|||
Description=%I sleep hook |
|||
Before=sleep.target |
|||
StopWhenUnneeded=yes |
|||
[Service] |
|||
Type=oneshot |
|||
RemainAfterExit=yes |
|||
ExecStart=-/usr/bin/systemctl stop %i |
|||
ExecStop=-/usr/bin/systemctl start %i |
|||
[Install] |
|||
WantedBy=sleep.target |
|||
}} |
}} |
||
ジャーナルをサポートしているファイルシステム (ext4 や btrfs など) でジャーナルコミットでも同じことをするには、[[fstab]] でオプションとして {{ic|1=commit=60}} を使用します。 |
|||
次に、{{ic|@}} の後に既存の systemd サービスの basename を指定して、このテンプレートのインスタンスを[[有効化]]してください (つまり、{{ic|sleep@'''''service-file-basename'''''.service}})。テンプレートに関する詳細は {{man|5|systemd.unit|DESCRIPTION}} を参照してください。 |
|||
この値は、以下の Laptop Mode 設定の副作用として変更されてしまうことに注意してください。また、I/O パフォーマンスと省電力に影響を与える他のパラメータは [[sysctl#仮想メモリ]] を参照してください。 |
|||
{{Tip|テンプレートは systemd サービスに限らず、他のプログラムと一緒に使うこともできます。例は [https://fedoramagazine.org/systemd-template-unit-files/] を見てください。}} |
|||
==== |
==== Laptop Mode ==== |
||
ラップトップモードの"ノブ"については[https://docs.kernel.org/admin-guide/laptops/laptop-mode.html カーネルドキュメント]を見て下さい。''"このノブの妥当な値は5秒です。"'' |
|||
''systemd'' は {{ic|/usr/lib/systemd/system-sleep/}} 内の全ての実行可能ファイルを実行するときに、2つの引数を渡します: |
|||
{{hc|/etc/sysctl.d/laptop.conf|2= |
|||
* 引数 1: {{ic|pre}} か {{ic|post}}。マシンがスリープしようとしているのか、復帰しようとしているのかによります。 |
|||
vm.laptop_mode = 5 |
|||
* 引数 2: {{ic|suspend}} か {{ic|hibernate}} か {{ic|hybrid-sleep}}。どれが行われようとしているのかによります。 |
|||
''systemd'' はスクリプトを (ひとつずつではなく) 並行に実行します。 |
|||
カスタムスクリプトの出力は ''systemd-suspend.service'' か ''systemd-hibernate.service'' か ''systemd-hybrid-sleep.service'' によって記録されます。出力を見るには ''systemd'' の [[journalctl]] を使って下さい: |
|||
# journalctl -b -u systemd-suspend.service |
|||
{{Note|カスタムスクリプトを使うかわりに ''sleep.target''、''suspend.target''、''hibernate.target''、''hybrid-sleep.target'' を使ってユニットをスリープステートロジックにフックさせることもできます。}} |
|||
カスタムスリープスクリプトの例: |
|||
{{hc|/usr/lib/systemd/system-sleep/example.sh| |
|||
#!/bin/sh |
|||
case $1/$2 in |
|||
pre/*) |
|||
echo "Going to $2..." |
|||
;; |
|||
post/*) |
|||
echo "Waking up from $2..." |
|||
;; |
|||
esac |
|||
}} |
}} |
||
{{Note|この設定は主に回転ディスクドライブに関連しています。}} |
|||
スクリプトを[[実行可能属性|実行可能]]にするのを忘れないで下さい。 |
|||
=== ネットワークインターフェイス === |
|||
詳しくは {{man|7|systemd.special}} や {{man|8|systemd-sleep}} を見てください。 |
|||
[[Wake-on-LAN]] は便利な機能ですが、利用しない場合はサスペンド中にマジックパケットが来るのを待つのに無駄な電力を消耗するだけです。[[Wake-on-LAN#udev]] ルールを調整することで、全てのイーサネットインターフェイスに対してこの機能を無効化することができます。{{Pkg|iw}} を使って全てのワイヤレスインターフェイスで省電力を有効化するには: |
|||
=== トラブルシューティング === |
|||
{{hc|/etc/udev/rules.d/'''81'''-wifi-powersave.rules|2= |
|||
==== フタのスイッチのアクションの遅延 ==== |
|||
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wl*", RUN+="/usr/bin/iw dev $name set power_save on" |
|||
短期間に連続してフタのスイッチが反応した場合、''logind'' はドッキングを検出するために90秒までサスペンドを遅延します。[https://lists.freedesktop.org/archives/systemd-devel/2015-January/027131.html] この遅延時間は systemd v220 から設定できるようになりました:[https://github.com/systemd/systemd/commit/9d10cbee89ca7f82d29b9cb27bef11e23e3803ba] |
|||
{{hc|/etc/systemd/logind.conf|2= |
|||
... |
|||
HoldoffTimeoutSec=30s |
|||
... |
|||
}} |
}} |
||
この設定ファイルの名前は重要です。Systemd の[[ネットワーク設定#インターフェイス名の変更|永続的なデバイス名]]を使用することで、上記のネットワークルールは、辞書順で {{ic|80-net-setup-link.rules}} の'''後'''に来るので、ネットワークデバイスの名前が永続的な名前に変更 (例: {{ic|wlan0}} から {{ic|wlp3s0}}) された後で適用されます。{{ic|RUN}} のコマンドは、全てのルールが処理された後で実行され、永続的な名前 (マッチするデバイスは {{ic|$name}} で利用できます) を使用する必要があることに注意してください。 |
|||
==== ノートパソコンをサスペンドする Fn キーが動作しない ==== |
|||
==== Intel ワイヤレスカード (iwlwifi) ==== |
|||
{{ic|logind.conf}} をどう設定してもスリープボタンが動作しない場合 (ボタンを押しても syslog にメッセージすら表示されない)、おそらく logind がキーボードデバイスを監視していません。[https://lists.freedesktop.org/archives/systemd-devel/2015-February/028325.html] 次のコマンドを実行してください: |
|||
{{ic|iwlwifi}} ドライバによる Intel ワイヤレスカードの追加の省電力機能は、適切なパラメータをカーネルモジュールに渡すことで有効化できます。{{ic|/etc/modprobe.d/iwlwifi.conf}} ファイルに以下の記述を追加することで、パラメータを永続化させることができます: |
|||
# journalctl --grep="Watching system buttons" |
|||
options iwlwifi power_save=1 |
|||
すると以下のような表示がされます: |
|||
以下のオプションは、レイテンシの中央値を増加させる可能性があります: |
|||
May 25 21:28:19 vmarch.lan systemd-logind[210]: Watching system buttons on /dev/input/event2 (Power Button) |
|||
May 25 21:28:19 vmarch.lan systemd-logind[210]: Watching system buttons on /dev/input/event3 (Sleep Button) |
|||
May 25 21:28:19 vmarch.lan systemd-logind[210]: Watching system buttons on /dev/input/event4 (Video Bus) |
|||
options iwlwifi uapsd_disable=0 |
|||
キーボードデバイスがないことに気づいて下さい。したがってキーボードデバイスの ATTRS{name} を取得します [https://systemd-devel.freedesktop.narkive.com/Rbi3rjNN/patch-1-2-logind-add-support-for-tps65217-power-button]: |
|||
5.4 より前のカーネルでは、以下のオプションを使用できますが、スループットの最大値を減少させる可能性があります: |
|||
{{hc|# udevadm info -a /dev/input/by-path/*-kbd|2= |
|||
... |
|||
KERNEL=="event0" |
|||
... |
|||
ATTRS{name}=="AT Translated Set 2 keyboard" |
|||
}} |
|||
options iwlwifi d0i3_disable=0 |
|||
カスタムの udev ルールを作成して、"power-switch" タグを追加してください: |
|||
ワイヤレスカードによっては、以下の2つのオプションのうちいずれかが適用されます: |
|||
{{hc|/etc/udev/rules.d/70-power-switch-my.rules|2= |
|||
ACTION=="remove", GOTO="power_switch_my_end" |
|||
SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="AT Translated Set 2 keyboard", TAG+="power-switch" |
|||
LABEL="power_switch_my_end" |
|||
}} |
|||
options iwlmvm power_scheme=3 |
|||
{{ic|systemd-udevd.service}} を[[再起動]]し、{{ic|udevadm trigger}} を root として実行してルールを再読み込みし、そして {{ic|systemd-logind.service}} を[[再起動]]してください。 |
|||
options iwldvm force_cam=0 |
|||
これで、syslog に {{ic|Watching system buttons on /dev/input/event0}} と表示されるようになるはずです。 |
|||
以下のコマンドで、どちらのモジュールが動作しているかを確認することで、どちらが関連しているかを確認できます: |
|||
==== A520I および B550I マザーボードで PC がスリープから復帰しない ==== |
|||
# lsmod | grep '^iwl.vm' |
|||
A520i および B550i チップセットを搭載した一部のマザーボードでは、システムが完全にスリープ状態に入らない、またはスリープ状態から復帰しないことがあります。症状は、システムがスリープ状態に入り、マザーボード上の内部 LED または電源 LED が点灯したまま、モニターの電源が切れるというものです。その後、システムはこの状態から復帰することができず、ハードパワーオフが必要となります。AMD で同様の問題が発生した場合、まずシステムが完全にアップデートされていることを確認し、AMD [[マイクロコード]] パッケージがインストールされているかどうかをチェックしてください。 |
|||
これらの省電力オプションは実験的であり、システムを不安定にする可能性があることに注意してください。 |
|||
{{ic|GPP0}} で始まる行のステータスが有効になっていることを確認します: |
|||
=== バスパワーの管理 === |
|||
{{hc|$ cat /proc/acpi/wakeup| |
|||
Device S-state Status Sysfs node |
|||
GP12 S4 *enabled pci:0000:00:07.1 |
|||
GP13 S4 *enabled pci:0000:00:08.1 |
|||
XHC0 S4 *enabled pci:0000:0b:00.3 |
|||
GP30 S4 *disabled |
|||
GP31 S4 *disabled |
|||
PS2K S3 *disabled |
|||
'''GPP0''' S4 '''*enabled''' pci:0000:00:01.1 |
|||
GPP8 S4 *enabled pci:0000:00:03.1 |
|||
PTXH S4 *enabled pci:0000:05:00.0 |
|||
PT20 S4 *disabled |
|||
PT24 S4 *disabled |
|||
PT26 S4 *disabled |
|||
PT27 S4 *disabled |
|||
PT28 S4 *enabled pci:0000:06:08.0 |
|||
PT29 S4 *enabled pci:0000:06:09.0 |
|||
}} |
|||
==== Active State Power Management ==== |
|||
これが有効になっている場合は、次のコマンドを実行できます: |
|||
[[Wikipedia:Active State Power Management|Wikipedia]] から: |
|||
# echo GPP0 > /proc/acpi/wakeup |
|||
: '''Active-state power management''' ('''ASPM''') とは、PCI Express デバイスが完全にアクティブな状態にある時に電力を節約するための電源管理メカニズムです。主に、active-state link power management を介して行われます。つまり、PCI Express シリアルリンクは、トラフィックが存在しない時にパワーダウンされます。これは通常、ノート PC や他のモバイルインターネットデバイスでバッテリーの寿命を伸ばすために使用されます。 |
|||
{{ic|systemctl suspend}} を実行してテストし、システムをスリープ状態にします。次に、数秒後にシステムを起動してみてください。うまくいく場合は、回避策を永続的にすることができます。systemd [[systemd#ユニットファイル|ユニットファイル]]を[[作成]]します。: |
|||
ブート時に BIOS は、ハードウェアのサポートが存在するかどうかに応じて ASPM を有効化または無効化します。サポートの有無を確認するには以下を実行してください: |
|||
{{hc|/etc/systemd/system/toggle-gpp0-to-fix-wakeup.service|2= |
|||
[Unit] |
|||
Description="Disable GPP0 to fix suspend issue" |
|||
# lspci -vv | grep 'ASPM.*abled;' |
|||
[Service] |
|||
ExecStart=/bin/sh -c "/bin/echo GPP0 > /proc/acpi/wakeup" |
|||
利用可能な ASPM ポリシーと、現在のデフォルトのポリシーを調べるには、以下を実行してください: |
|||
[Install] |
|||
WantedBy=multi-user.target |
|||
}} |
|||
{{hc|$ cat /sys/module/pcie_aspm/parameters/policy| |
|||
新しく作成したユニットを [[daemon-reload]] および[[起動/有効化]]します。 |
|||
[default] performance powersave powersupersave |
|||
== 省電力設定 == |
|||
{{Note|[[ノートパソコン#電源管理]]ではノートパソコンでの電源管理(特にバッテリー状態の監視)を説明しています。}} |
|||
このセクションでは省電力機能を使用するのに必要な設定を扱います。コンピュータが AC 電源またはバッテリーで動作しているかに関わらず、ここに記載されているほとんど全ての機能には使用する価値があります。パフォーマンスへの影響は軽微ですが、大抵壊れているハードウェアやドライバーのためにデフォルトでは有効になっていません。電力の使用量を減らすことは熱を減らすことでもあり、[[Wikipedia:ja:インテル ターボ・ブースト・テクノロジー|動的なオーバークロック]]によって、最近の Intel や AMD の CPU ではパフォーマンスの向上につながることもあります。 |
|||
udev ルールなどを使ってスクリプトや省電力設定を自分で作成したい場合は以下の設定を参考にすることができます。 |
|||
{{Note|以下で記述しているルールのほとんどは [[TLP]] などのツールで管理することもでき、ツールを使いながら自分でも管理するのは不得策です。}} |
|||
=== Intel HWP (Intel Hardware P-state) をサポートする CPU === |
|||
HWP 対応プロセッサで利用可能なエネルギー設定は、{{ic|default}}, {{ic|performance}}, {{ic|balance_performance}}, {{ic|balance_power}}}, {{ic|power}} です。 |
|||
実行することで検証することができます。 |
|||
$ cat /sys/devices/system/cpu/cpufreq/policy?/energy_performance_available_preferences |
|||
より多くのエネルギーを節約するには、次のファイルを作成して設定できます。 |
|||
{{hc|/etc/tmpfiles.d/energy_performance_preference.conf| |
|||
w /sys/devices/system/cpu/cpufreq/policy?/energy_performance_preference - - - - balance_power |
|||
}} |
}} |
||
ASPM は、しばしば以下の理由によって無効化されることがあります [https://wireless.wiki.kernel.org/en/users/documentation/ASPM]{{Dead link|2024|10|12|status=404}}: |
|||
詳細については、{{man|8|systemd-tmpfiles}} および {{man|5|tmpfiles.d}} の man ページを参照してください。 |
|||
=== オーディオ === |
|||
==== カーネル ==== |
|||
デフォルトでは、オーディオの省電力機能はほとんどのドライバーで無効になっています。{{ic|power_save}} パラメータを設定することで有効にすることができます。アイドルモードに移行するまでの時間を秒数で指定します。1秒後にサウンドカードをアイドル状態にするには、Intel の場合、以下を作成: |
|||
{{hc|/etc/modprobe.d/audio_powersave.conf|2=options snd_hda_intel power_save=1}} |
|||
ac97 の場合は以下を使って下さい: |
|||
options snd_ac97_codec power_save=1 |
|||
{{Note| |
|||
* サウンドカードの製造者や使われているカーネルドライバーの情報を取得するには、{{ic|lspci -k}} を実行してください。 |
|||
* サウンドカードの電源状態を変更すると壊れたハードウェアでポップノイズがまじったり著しい遅延が発生することがあります。 |
|||
}} |
|||
HDMI の音声出力を無効化することで消費電力を下げることもできます。適切なカーネルモジュールを [[ブラックリスト]] に追加してください (例: {{ic|snd_hda_codec_hdmi}}) |
|||
==== PulseAudio ==== |
|||
PulseAudio はデフォルトで、長時間アイドル状態になったオーディオソースを一時停止します。外部 USB マイクを使用する場合、録音がポップ音で開始されることがあります。回避策として、{{ic|/etc/pulse/default.pa}} の次の行をコメントアウトしてください。 |
|||
load-module module-suspend-on-idle |
|||
その後、{{ic|systemctl restart --user pulseaudio}} で PulseAudio を再起動させてください。 |
|||
=== バックライト === |
|||
[[バックライト]]を見て下さい。 |
|||
=== Bluetooth === |
|||
[[Bluetooth]] を完全に無効化するには、{{ic|btusb}} と {{ic|bluetooth}} モジュールを[[カーネルモジュール#ブラックリスト|ブラックリスト]]に入れてください。 |
|||
一時的にだけ bluetooth をオフにするには、''rfkill'' を使用します: |
|||
# rfkill block bluetooth |
|||
もしくは udev ルールを使って: |
|||
{{hc|/etc/udev/rules.d/50-bluetooth.rules|<nowiki> |
|||
# disable bluetooth |
|||
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="0" |
|||
</nowiki>}} |
|||
=== ウェブカメラ === |
|||
内蔵のウェブカメラを使わない場合、{{ic|uvcvideo}} モジュールを[[カーネルモジュール#ブラックリスト|ブラックリスト]]に入れてください。 |
|||
=== カーネルパラメータ === |
|||
このセクションでは {{ic|/etc/sysctl.d/}} の設定を使います。このディレクトリはカーネルの sysctl パラメータと対応するディレクトリです。詳しくは [http://0pointer.de/blog/projects/the-new-configuration-files The New Configuration Files] や、より正確な {{man|5|sysctl.d}} を見てください。 |
|||
==== NMI watchdog の無効化 ==== |
|||
[[Wikipedia:Non-maskable interrupt|NMI]] watchdog はカーネルパニックを引き起こすハードウェアのハングアップをキャッチするデバッグ機能です。システムによっては大量の割り込みが発生するため、消費電力の増加につながっていることがあります: |
|||
{{hc|/etc/sysctl.d/disable_watchdog.conf|2=kernel.nmi_watchdog = 0}} |
|||
もしくは起動の初期で完全に無効化するには[[カーネルパラメータ|カーネル行]]に {{ic|1=nmi_watchdog=0}} を追加してください。 |
|||
==== ライトバック時間 ==== |
|||
仮想メモリのダーティなライトバック時間を増やすことでディスク I/O がまとめられて、断続的なディスクの書き込みが減って、消費電力が抑えられます。この値を60秒に設定するには (デフォルトは5秒です): |
|||
{{hc|/etc/sysctl.d/dirty.conf|2=vm.dirty_writeback_centisecs = 6000}} |
|||
ジャーナルをサポートしているファイルシステム (ext4 や btrfs など) でジャーナルコミットでも同じことをするには、[[fstab]] でオプションとして {{ic|1=commit=60}} を使用します。 |
|||
I/O パフォーマンスや省電力に影響する他のパラメータは [[sysctl#仮想メモリ]] を参照。 |
|||
==== Laptop Mode ==== |
|||
ラップトップモードの'ノブ'については[https://www.kernel.org/doc/Documentation/laptops/laptop-mode.txt カーネルドキュメント]を見て下さい。''"このノブの適切な値は5秒です。"'' |
|||
{{hc|/etc/sysctl.d/laptop.conf|2=vm.laptop_mode = 5}} |
|||
=== ネットワークインターフェイス === |
|||
[[Wake-on-LAN]] は便利な機能ですが、利用しない場合はサスペンド中にマジックパケットが来るのを待つのに無駄な電力を消耗するだけです。全ての Ethernet インターフェイスで Wake-on-LAN を無効化: |
|||
{{hc|/etc/udev/rules.d/70-disable_wol.rules|2=ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*", RUN+="/usr/bin/ethtool -s %k wol d"}} |
|||
全ての無線インターフェイスで省電力機能を有効にするには: |
|||
{{hc|/etc/udev/rules.d/70-wifi-powersave.rules|2=ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan*", RUN+="/usr/bin/iw dev %k set power_save on"}} |
|||
上記の例では、{{ic|%k}} がマッチするデバイスのカーネル名を示します。例えば、ルールが {{ic|wlan0}} に適用可能とわかった場合、{{ic|%k}} は {{ic|wlan0}} に置き換えられます。特定のインターフェイスにだけルールを適用するには、パターン {{ic|eth*}} と修飾子 {{ic|%k}} を適当なインターフェイスの名前に置き換えて下さい。詳しくは、[http://www.reactivated.net/writing_udev_rules.html Writing udev rules] を参照。 |
|||
{{Note|ここで、設定ファイルの名前は重要です。systemd v197 から {{ic|80-net-setup-link.rules}} によって[[ネットワーク設定#デバイス名|永続的なデバイス名]]が導入されたため、デバイスに {{ic|enp2s0}} というような名前で呼ばれるようになる前に適用されるように、ネットワークの powersave ファイルは辞書順で {{ic|80-net-setup-link.rules}} よりも前に来る名前を付けなくてはなりません。}} |
|||
==== Intel ワイヤレスカード (iwlwifi) ==== |
|||
Intel 製ワイヤレスカードの省電力機能は {{ic|iwlwifi}} ドライバーに適切なパラメータを渡すことで有効にできます。{{ic|/etc/modprobe.d/iwlwifi.conf}} ファイルに以下の行を追加することで永続的に有効にできます: |
|||
options iwlwifi power_save=1 d0i3_disable=0 uapsd_disable=0 |
|||
options iwldvm force_cam=0 |
|||
上記の省電力オプションは実験的であり、システムが不安定になる可能性があります。 |
|||
=== バスパワーの管理 === |
|||
==== Active State Power Management ==== |
|||
コンピュータが [[Wikipedia:Active State Power Management|ASPM]] をサポートしているという信頼が得られなかった場合、起動時に無効化されます: |
|||
$ lspci -vv | grep ASPM.*abled\; |
|||
ASPM は BIOS によって扱われるため、ASPM が無効化される理由は以下の通りです [https://wireless.kernel.org/en/users/Documentation/ASPM]: |
|||
# BIOS が何らかの理由で ASPM を無効化した (コンフリクトが起こるから?)。 |
# BIOS が何らかの理由で ASPM を無効化した (コンフリクトが起こるから?)。 |
||
# PCIE が |
# PCIE が ASPM を必要とするが、L0s は任意である (なので、L0s は無効化され、L1 だけが有効化されるかもしれません)。 |
||
# ASPM に |
# ASPM 用に BIOS がプログラムされていないか、BIOS にバグが存在する。 |
||
# BIOS にバグが存在する。 |
|||
上記で ASPM がサポートされていないと報告されたが、ハードウェアが ASPM をサポートしていると思われる場合は、カーネルが ASPM を管理できるようにするために {{ic|1=pcie_aspm=force}} [[カーネルパラメータ]]で ASPM を強制的に有効化できます。 |
|||
{{Warning| |
{{Warning| |
||
* ASPM を強制するとフリーズやパニック |
* ASPM を、サポートされていないシステム上で強制的に有効化すると、電力消費量が増加する場合があります。さらに、システムのフリーズやカーネルパニックの危険性もあります。なので、そのような場合に備えてこのオプションをもとに戻す手段を確保しておくべきです。 |
||
* ASPM の強制はカーネル内で行われます。なので、ハードウェアで無効化されている場合には、有効化できません。ハードウェアで ASPM が無効化されているかどうか確認するには、root として {{ic|dmesg {{!}} grep ASPM}} と実行してください。あなたのハードウェア固有の情報については、対応する Wiki の記事を参照してください (もし存在すれば)。 |
|||
* ASPM をサポートしていないシステムで強制させると消費電力が逆に上昇することがあります。 |
|||
}} |
}} |
||
ASPM がサポートされており、かつ、有効化されていれば、現在のセッションに対して任意のポリシーを選択することができます。例えば、現在のセッションに対して {{ic|powersupersave}} を設定するには、以下を実行してください: |
|||
{{ic|powersave}} に調整するには次を実行 (以下のコマンドは ASPM が有効になっていないと機能しません): |
|||
# echo powersupersave > /sys/module/pcie_aspm/parameters/policy |
|||
システムのブート時に特定の ASPM 状態 (例として {{ic|powersupersave}}) を有効化させるには、{{ic|1=pcie_aspm.policy=powersupersave}} を[[カーネルパラメータ]]に追加してください。 |
|||
デフォルトでは以下のようになります: |
|||
{{hc|$ cat /sys/module/pcie_aspm/parameters/policy|[default] performance powersave}} |
|||
==== PCI Runtime Power Management ==== |
==== PCI Runtime Power Management ==== |
||
{{hc|/etc/udev/rules.d/pci_pm.rules|2= |
{{hc|/etc/udev/rules.d/pci_pm.rules|2= |
||
SUBSYSTEM=="pci", ATTR{power/control}="auto" |
|||
SUBSYSTEM=="ata_port", KERNEL=="ata*", ATTR{device/power/control}="auto" |
|||
}} |
|||
上記のルールは未使用のデバイスを全てパワーダウンしますが、一部のデバイスが復帰しなくなってしまいます。サポートしていることが分かっているデバイスのみに対して Runtime Power Management を有効化するには、ベンダ ID とデバイス ID を使って、特定のデバイスにだけマッチするようにしてください (ID を入手するには {{ic|lspci -nn}} を使ってください): |
|||
==== デバイスの電源管理 ==== |
|||
{{hc|/etc/udev/rules.d/pci_pm.rules|2= |
|||
''USB を含む''、(ほぼ) 全てのデバイスの電源管理を有効化: |
|||
# whitelist for pci autosuspend |
|||
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="auto" |
|||
}} |
|||
または、PCI Runtime Power Management が機能しないデバイスを除外して、その他の全てのデバイスに対して有効化するには: |
|||
{{hc|/etc/udev/rules.d/dev_power_save.rules|<nowiki> |
|||
# Various subsystems runtime power management (by bus or class) |
|||
ACTION=="add", SUBSYSTEMS=="*", TEST=="power/control", ATTR{power/control}="auto" |
|||
{{hc|/etc/udev/rules.d/pci_pm.rules|2= |
|||
# Various subsystems power saving (by module) |
|||
# blacklist for pci runtime power management |
|||
ACTION=="add", SUBSYSTEMS=="*", TEST=="parameters/power_save", ATTR{parameters/power_save}="1" </nowiki>}} |
|||
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="on", GOTO="pci_pm_end" |
|||
SUBSYSTEM=="pci", ATTR{power/control}="auto" |
|||
影響を受けるデバイスを表示するには: |
|||
LABEL="pci_pm_end" |
|||
ls /sys/bus/*/devices/*/power/control |
|||
}} |
|||
ls /sys/class/*/*/power/control |
|||
ls /sys/module/*/parameters/power_save |
|||
''USB を除く''全てのシステムで電源管理を有効にするには、最初のルールをサブシステムごとのルールに置き換えます (/sys/bus/''some_subsystem'', /sys/class/''some_subsystem''): |
|||
ACTION=="add", SUBSYSTEM=="some_subsystem", TEST=="power/control", ATTR{power/control}="auto" |
|||
==== USB の自動サスペンド ==== |
==== USB の自動サスペンド ==== |
||
| 584行目: | 308行目: | ||
Linux カーネルは USB デバイスが使用されていないときに USB デバイスを自動的にサスペンドさせることができます。これによって電力を相当カットできるときもありますが、USB の省電力機能に対応していない USB デバイスではおかしな挙動が起こる可能性もあります (特に USB マウスやキーボード)。ホワイトリストとブラックリストでフィルタリングする [[udev]] ルールを使うことで問題は軽減されます。 |
Linux カーネルは USB デバイスが使用されていないときに USB デバイスを自動的にサスペンドさせることができます。これによって電力を相当カットできるときもありますが、USB の省電力機能に対応していない USB デバイスではおかしな挙動が起こる可能性もあります (特に USB マウスやキーボード)。ホワイトリストとブラックリストでフィルタリングする [[udev]] ルールを使うことで問題は軽減されます。 |
||
マウスとキーボード以外のUSB デバイスで自動サスペンドを有効にする例: |
|||
{{hc|/etc/udev/rules.d/50-usb_power_save.rules| |
{{hc|/etc/udev/rules.d/50-usb_power_save.rules|2= |
||
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto" |
ACTION=="add", SUBSYSTEM=="usb", ATTR{product}!="*Mouse", ATTR{product}!="*Keyboard", TEST=="power/control", ATTR{power/control}="auto" |
||
}} |
|||
</nowiki>}} |
|||
自動サスペンドが動作するデバイスにだけ自動サスペンドを有効にするには、ベンダーとプロダクト ID でマッチングを行います (''lsusb'' を使って |
自動サスペンドが動作するデバイスにだけ自動サスペンドを有効にするには、ベンダー ID とプロダクト ID でマッチングを行います (これらの ID を入手するには ''lsusb'' を使ってください): |
||
{{hc|/etc/udev/rules.d/50-usb_power_save.rules| |
{{hc|/etc/udev/rules.d/50-usb_power_save.rules|2= |
||
# whitelist for usb autosuspend |
# whitelist for usb autosuspend |
||
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", ATTR{power/control}="auto" |
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", ATTR{power/control}="auto" |
||
}} |
|||
</nowiki>}} |
|||
もしくは、USB 自動サスペンドが使えないデバイスをブラックリストに入れて、他の全てのデバイスで自動サスペンドを有効にするには: |
もしくは、USB 自動サスペンドが使えないデバイスをブラックリストに入れて、他の全てのデバイスで自動サスペンドを有効にするには: |
||
{{hc|/etc/udev/rules.d/50-usb_power_save.rules| |
{{hc|/etc/udev/rules.d/50-usb_power_save.rules|2= |
||
# blacklist for usb autosuspend |
# blacklist for usb autosuspend |
||
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", GOTO="power_usb_rules_end" |
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", GOTO="power_usb_rules_end" |
||
| 605行目: | 329行目: | ||
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto" |
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto" |
||
LABEL="power_usb_rules_end" |
LABEL="power_usb_rules_end" |
||
}} |
|||
</nowiki>}} |
|||
自動サスペンドに入るデフォルトのアイドル遅延時間は {{ic|usbcore}} [[カーネルモジュール]]の {{ic|autosuspend}} パラメータによって制御されています。遅延時間をデフォルトの2秒から5秒に設定するには: |
自動サスペンドに入るデフォルトのアイドル遅延時間は {{ic|usbcore}} 組み込み[[カーネルモジュール]]の {{ic|autosuspend}} パラメータによって制御されています。遅延時間をデフォルトの2秒から5秒に設定するには、以下の[[カーネルパラメータ]]を追加してください: |
||
{{ |
{{bc|1=usbcore.autosuspend=5}} |
||
options usbcore autosuspend=5 |
|||
</nowiki>}} |
|||
{{ic|power/control}} と同じように、{{ic|power/autosuspend}} 属性を設定することで遅延時間はデバイスごとに細かく設定することができます。 |
{{ic|power/control}} と同じように、{{ic|power/autosuspend}} 属性を設定することで遅延時間はデバイスごとに細かく設定することができます。また、{{ic|power/autosuspend}} を -1 (つまり、自動サスペンドしない) に設定することで、自動サスペンドを無効化することができます: |
||
{{hc|/etc/udev/rules.d/50-usb_power_save.rules|2= |
|||
USB の電源管理に関する詳細は [https://www.kernel.org/doc/Documentation/usb/power-management.txt Linux カーネルドキュメント]を見て下さい。 |
|||
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", ATTR{power/autosuspend}="-1" |
|||
}} |
|||
USB の電源管理に関する詳細は [https://docs.kernel.org/driver-api/usb/power-management.html Linux カーネルドキュメント]を見て下さい。 |
|||
==== SATA Active Link Power Management ==== |
==== SATA Active Link Power Management ==== |
||
現在の設定は {{ic|/sys/class/scsi_host/host*/link_power_management_policy}} で確認したり設定したりできます: |
|||
{{Note|以下の設定を行うとアイドル状態になっているドライブにアクセスするときに遅延が発生するようになります。AC 電源を使用するかどうかによって変えるべき設定です。}} |
|||
$ grep . /sys/class/scsi_host/host*/link_power_management_policy |
|||
$ echo "med_power_with_dipm" >/sys/class/scsi_host/host''N''/link_power_management_policy |
|||
{| class="wikitable" |
|||
{{Warning|デバイスによっては SATA Active Link Power Management でデータが消失する可能性があります (例: [[Lenovo ThinkPad T440s|Lenovo T440s]] はこの問題を抱えていることが[http://lkml.indiana.edu/hypermail/linux/kernel/1401.2/02171.html 知られています])。バックアップを取っていない場合は設定を有効にしないでください。}} |
|||
|+ 利用可能な ALPM 設定 |
|||
! 設定 |
|||
! 説明 |
|||
! 省電力効果 |
|||
|- |
|||
| max_performance |
|||
| 現在のデフォルト |
|||
| 無し |
|||
|- |
|||
| medium_power |
|||
| - |
|||
| 約 1.0 ワット |
|||
|- |
|||
| med_power_with_dipm |
|||
| 推奨される設定<sup>1</sup> |
|||
| 約 1.5 ワット |
|||
|- |
|||
| min_power |
|||
| '''警告: データ損失の可能性あり'''<sup>2</sup> |
|||
| 約 1.5 ワット |
|||
|} |
|||
# Linux 4.15 から、{{ic|med_power_with_dipm}} と呼ばれる[https://hansdegoede.livejournal.com/18412.html 設定]が存在しています。これは、Windows IRST ドライバ設定の動作と一致するものであり、最近の SSD や HDD ではデータの損失は発生しないはずです。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ebb82e3c79d2a956366d0848304a53648bd6350b (アイドル状態で) 1.0 から 1.5 ワット]の節約になることもあります。これは、Linux 4.16 から Intel ベースのノート PC でデフォルトの設定となっています [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ebb82e3c79d2a956366d0848304a53648bd6350b]。 |
|||
# {{Warning|{{ic|min_power}} SATA Active Link Power Management 設定は一部のデバイスでデータ損失が発生する可能性があります。バックアップを頻繁に取っていない限り、この設定を有効化しないでください。}} |
|||
[[udev]] ルールファイルを作成することで link_power_management_policy の設定を永続化させることができます。例えば: |
|||
{{hc|/etc/udev/rules.d/hd_power_save.rules|2= |
|||
ACTION=="add", SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="med_power_with_dipm" |
|||
}} |
|||
{{Note| |
|||
* この設定を行うとアイドル状態になっているドライブにアクセスするときに遅延が発生するようになります。AC 電源を使用するかどうかによって変えるべき設定です。 |
|||
* SATA ホストコントローラとストレージデバイスの組み合わせによっては、デフォルト設定の {{ic|med_power_with_dipm}} ではうまく動作しません。例えば: |
|||
** linux-6.8.1 の時点では、Intel 7 Series Chipset コントローラから Crucial M550 SSD に (MU02 ファームウェアで) アクセスするとタイムアウトとリンク速度の低下が発生します。 |
|||
** linux-6.9.6 の時点では、AMD 600 Series Chipset SATA コントローラを HL-DT-ST BDDVDRW GGC-H20L 光学ディスクドライブに使用した際に、数分おきに再初期化して ROM ドライブが音を立てる問題が発生します。 |
|||
::このような場合には、{{ic|medium_power}} に設定すると解決します。 |
|||
}} |
|||
=== ハードディスクドライブ === |
=== ハードディスクドライブ === |
||
設定できるドライブのパラメータについては [[hdparm]] を見て下さい。 |
設定できるドライブのパラメータについては [[hdparm#電源管理の設定]] を見て下さい。 |
||
多数のプログラムがディスクに頻繁に書き込みをおこなう場合は省電力は効率的ではありません。全てのプログラムを調査して、いつどのようにプログラムがディスクに書き込むを行うのか調べるのがディスクの使用量を減らす道です。{{Pkg|iotop}} を使えばどのプログラムがディスクに頻繁に書き込みしているかわかります。他のヒントは[[ |
多数のプログラムがディスクに頻繁に書き込みをおこなう場合は省電力は効率的ではありません。全てのプログラムを調査して、いつどのようにプログラムがディスクに書き込むを行うのか調べるのがディスクの使用量を減らす道です。{{Pkg|iotop}} を使えばどのプログラムがディスクに頻繁に書き込みしているかわかります。他のヒントは [[パフォーマンスの向上#ストレージデバイス]] を見て下さい。 |
||
[[Fstab#atime オプション|noatime]] オプションを設定するなどの小さなことも馬鹿にできません。十分な RAM がある場合、[[スワップ#Swappiness|swappiness]] を無効化したり制限することでディスクへの書き込みが減る可能性があります。 |
[[Fstab#atime オプション|noatime]] オプションを設定するなどの小さなことも馬鹿にできません。十分な RAM がある場合、[[スワップ#Swappiness|swappiness]] を無効化したり制限することでディスクへの書き込みが減る可能性があります。 |
||
[https://www.seagate.com/files/docs/pdf/en-GB/whitepaper/tp608-powerchoice-tech-provides-gb.pdf PowerChoice] テクノロジーを搭載した Seagate ドライブの場合、''EPC'' (Extended Power Conditions) 機能により [[hdparm]] から APM を設定するテクニックはうまく行きません。APM を設定する代わりに、{{AUR|openseachest}} パッケージを[[インストール]]し、ドライブの EPC を完全に無効化することができます (''X'' は実際のドライブレターに置き換えてください): |
|||
=== CD/DVD のスピンダウン === |
|||
# openSeaChest_PowerControl --scan |
|||
[[udisks]] を使用してしばらくしてから CD/DVD ロムをスピンダウンさせるには: |
|||
# openSeaChest_PowerControl -d /dev/sd''X'' -i |
|||
# openSeaChest_PowerControl -d /dev/sd''X'' --showEPCSettings |
|||
# openSeaChest_PowerControl -d /dev/sd''X'' --EPCfeature disable |
|||
# openSeaChest_PowerControl -d /dev/sd''X'' --showEPCSettings |
|||
最後のコマンドでは、以下が出力されます: |
|||
# udisks --inhibit-polling /dev/sr0 |
|||
========================================================================================== |
|||
openSeaChest_PowerControl - openSeaChest drive utilities - NVMe Enabled |
|||
Copyright (c) 2014-2023 Seagate Technology LLC and/or its Affiliates, All Rights Reserved |
|||
openSeaChest_PowerControl Version: 3.3.1-4_1_1 X86_64 |
|||
Build Date: Jul 4 2023 |
|||
Today: Tue Jul 4 17:49:36 2023 User: root |
|||
========================================================================================== |
|||
/dev/sd''X'' - ST1000NM0008-2F2100 - ZFA19JG2 - SN02 - ATA |
|||
===EPC Settings=== |
|||
* = timer is enabled |
|||
C column = Changeable |
|||
S column = Savable |
|||
All times are in 100 milliseconds |
|||
Name Current Timer Default Timer Saved Timer Recovery Time C S |
|||
Idle A 0 *10 *10 1 Y Y |
|||
Idle B 0 *1200 *1200 3 Y Y |
|||
Idle C 0 6000 6000 16 Y Y |
|||
Standby Z 0 9000 9000 46 Y Y |
|||
最初の列の 0 は、パーキングとスピンダウンが正常に無効化されたことを意味します。 |
|||
== ツールとスクリプト == |
== ツールとスクリプト == |
||
| 643行目: | 436行目: | ||
=== スクリプトと udev ルールを使う === |
=== スクリプトと udev ルールを使う === |
||
systemd ユーザーは {{ic|systemctl suspend}} や {{ic|systemctl hibernate}} でサスペンドとハイバネートを行うことができ、{{ic|/etc/systemd/logind.conf}} で acpi イベントを処理することができるので、[[pm-utils]] と [[acpid]] を削除するということに興味を引かれるかもしれません。systemd が行えないことがたったひとつだけ存在します (systemd-204 現在): システムが AC 電源 |
systemd ユーザーは {{ic|systemctl suspend}} や {{ic|systemctl hibernate}} でサスペンドとハイバネートを行うことができ、{{ic|/etc/systemd/logind.conf}} で acpi イベントを処理することができるので、[[pm-utils]] と [[acpid]] を削除するということに興味を引かれるかもしれません。systemd が行えないことがたったひとつだけ存在します (systemd-204 現在): システムが AC 電源で動作しているのか、バッテリーで動作しているのかで条件分岐を行う電源管理です。このギャップをなくすには、AC アダプタが抜き差しされたときにスクリプトを実行する [[udev]] ルールを作成します: |
||
{{hc|/etc/udev/rules.d/powersave.rules|2= |
{{hc|/etc/udev/rules.d/powersave.rules|2= |
||
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/path/to/your/script true" |
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/path/to/your/script true" |
||
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/path/to/your/script false" |
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/path/to/your/script false" |
||
}} |
|||
</nowiki>}} |
|||
{{Note|''pm-powersave'' が使用しているのと同じスクリプトを使うことができます。実行可能属性を付与して別の所に保存する必要があります (例えば {{ic|/usr/local/bin/}})。}} |
{{Note|''pm-powersave'' が使用しているのと同じスクリプトを使うことができます。[[実行可能属性]]を付与して別の所に保存する必要があります (例えば {{ic|/usr/local/bin/}})。}} |
||
powersave スクリプトのサンプル: |
powersave スクリプトのサンプル: |
||
* [https://github.com/supplantr/ftw ftw] (パッケージ: {{AUR|ftw-git}}) |
|||
* [https://github.com/Unia/powersave powersave] |
|||
* [https://bbs.archlinux.org/viewtopic.php?id=180762 throttlectl] ({{AUR|throttlectl}}) |
|||
上記の udev ルールはちゃんと動作するはずですが、電源設定がサスペンドやハイバネートをした後に更新されない場合、以下の内容で {{ic|/usr/lib/systemd/system-sleep/}} にスクリプトを追加してください: |
上記の udev ルールはちゃんと動作するはずですが、電源設定がサスペンドやハイバネートをした後に更新されない場合、以下の内容で {{ic|/usr/lib/systemd/system-sleep/}} にスクリプトを追加してください: |
||
{{hc|/usr/lib/systemd/system-sleep/00powersave| |
{{hc|/usr/lib/systemd/system-sleep/00powersave| |
||
#!/bin/sh |
#!/bin/sh |
||
case $1 in |
case $1 in |
||
pre) /path/to/your/script false ;; |
pre) /path/to/your/script false ;; |
||
post) |
post) |
||
if cat /sys/class/power_supply/AC0/online |
if cat /sys/class/power_supply/AC0/online {{!}} grep 0 > /dev/null 2>&1 |
||
then |
then |
||
/path/to/your/script true |
/path/to/your/script true |
||
else |
else |
||
/path/to/your/script false |
/path/to/your/script false |
||
| 671行目: | 468行目: | ||
esac |
esac |
||
exit 0 |
exit 0 |
||
}} |
|||
</nowiki>}} |
|||
忘れずに実行可能属性を付与してください。 |
忘れずに実行可能属性を付与してください。 |
||
{{Note| |
{{Note|ノートパソコンによっては AC0 が異なっている可能性があります。その場合は変更してください。}} |
||
=== 電源設定の表示 === |
=== 電源設定の表示 === |
||
| 681行目: | 478行目: | ||
以下のスクリプトは USB や PCI デバイスの電源設定などのプロパティを表示します。全ての設定を見るには root 権限が必要なので注意して下さい。 |
以下のスクリプトは USB や PCI デバイスの電源設定などのプロパティを表示します。全ての設定を見るには root 権限が必要なので注意して下さい。 |
||
{{bc| |
{{bc|1= |
||
#!/bin/bash |
#!/bin/bash |
||
| 695行目: | 492行目: | ||
for ff in $(find $busdir/power -type f ! -empty 2>/dev/null) |
for ff in $(find $busdir/power -type f ! -empty 2>/dev/null) |
||
do |
do |
||
v=$(cat $ff 2>/dev/null |
v=$(cat $ff 2>/dev/null{{!}}tr -d "\n") |
||
[[ ${#v} -gt 0 ]] && echo -e " ${ff##*/}=$v"; |
[[ ${#v} -gt 0 ]] && echo -e " ${ff##*/}=$v"; |
||
v=; |
v=; |
||
done |
done {{!}} sort -g; |
||
done; |
done; |
||
printf "\n\n\n+++ %s\n" "Kernel Modules" |
printf "\n\n\n+++ %s\n" "Kernel Modules" |
||
for mod in $(lspci -k |
for mod in $(lspci -k {{!}} sed -n '/in use:/s,^.*: ,,p' {{!}} sort -u) |
||
do |
do |
||
echo "+ $mod"; |
echo "+ $mod"; |
||
systool -v -m $mod 2> /dev/null |
systool -v -m $mod 2> /dev/null {{!}} sed -n "/Parameters:/,/^$/p"; |
||
done |
done |
||
}} |
|||
</nowiki>}} |
|||
== ユーザにシャットダウンを許可する == |
|||
=== ボタンと蓋スイッチのイベント === |
|||
サスペンド、電源オフ、そしてハイバネートのボタンのイベントと、蓋を閉じた時のイベントは、[[#ACPI イベント]] で説明されているように ''logind'' によって処理されます。 |
|||
=== systemd-logind を使う === |
|||
{{Pkg|polkit}} を使用している場合、非リモートセッションのユーザは、[[一般的なトラブルシューティング#セッションのパーミッション|セッションが壊れていない]]限り、電源関連のコマンドを発行することができます。 |
|||
セッションがアクティブであることを確認するには: |
|||
$ loginctl show-session $XDG_SESSION_ID --property=Active |
|||
アクティブであるならば、ユーザはコマンドラインで ''systemctl'' のコマンドを使用したり、メニューに追加したりできます: |
|||
$ systemctl poweroff |
|||
$ systemctl reboot |
|||
{{ic|systemctl suspend}} や {{ic|systemctl hibernate}} といった他のコマンドも使用できます。{{man|1|systemctl}} の ''System Commands'' セクションを参照してください。 |
|||
=== sudo を使う === |
|||
{{Pkg|sudo}} を[[インストール]]し、[[sudo|sudo 権限]]をユーザに与えてください。sudo 権限が与えられたユーザは、{{ic|sudo systemctl}} コマンド (例: {{ic|sudo systemctl poweroff}}、{{ic|sudo systemctl reboot}}、{{ic|sudo systemctl suspend}}、{{ic|sudo systemctl hibernate}}) を使用できるようになります。{{man|1|systemctl}} の ''System Commands'' セクションを参照してください。 |
|||
==== sudo 権限の無いユーザ ==== |
|||
ユーザにシャットダウンコマンドのみを使用できるようにし、sudo 権限を与えないようにする必要がある場合、{{ic|visudo}} コマンドを root として使って {{ic|/etc/sudoers}} の末尾に以下を追加してください。''user'' の部分は適切なユーザ名に、''hostname'' の部分はマシンのホスト名に置き換えてください。 |
|||
''user'' ''hostname'' =NOPASSWD: /usr/bin/systemctl poweroff,/usr/bin/systemctl halt,/usr/bin/systemctl reboot |
|||
ここで設定したユーザは、{{ic|sudo systemctl poweroff}} でシャットダウンを、{{ic|sudo systemctl reboot}} で再起動を行うことができるようになります。システムをシャットダウンしたいユーザは、{{ic|sudo systemctl halt}} も使用できます。パスワードのプロンプトを表示させたくない場合は、{{ic|NOPASSWD:}} タグを使用してください。 |
|||
== 参照 == |
== 参照 == |
||
* [https://www.thinkwiki.org/wiki/How_to_reduce_power_consumption ThinkWiki:How to reduce power consumption] |
* [https://www.thinkwiki.org/wiki/How_to_reduce_power_consumption ThinkWiki:How to reduce power consumption] |
||
* [ |
* [https://ivanvojtko.blogspot.sk/2016/04/how-to-get-longer-battery-life-on-linux.html How to get longer battery life on Linux] |
||
{{TranslationStatus|Power management|2024-12-27|823979}} |
|||
2025年4月6日 (日) 02:07時点における最新版
関連記事
電源管理とは、アクティブでない時に電源を切ったりシステムのコンポーネントを低電力状態に切り替えたりする機能です。
Arch Linux では、電源管理は主に2つの部分からなります:
- Linux カーネルの設定。ハードウェアと対話します。
- ユーザスペースのツールの設定。カーネルと対話し、カーネルのイベントに応答します。ユーザスペースのツールの多くは、"ユーザフレンドリー"な方法でカーネルの設定を変更することもできます。利用可能なツールは #ユーザースペースツール を参照してください。
ユーザースペースツール
以下のツールを使うことで、設定ファイルを手動で編集せずに多くの設定を変更できます。どのツールも多かれ少なかれ同じような動作をするので、衝突を避けるためにツールはどれか一つだけを実行してください。電源管理カテゴリを見れば、Arch Linux にどんな電源管理の選択肢が存在するかわかります。
以下は省電力設定をするために作られた人気のあるスクリプトやツールです:
コンソール
- acpid — ACPI の電源管理イベントを届けるデーモン。netlink をサポート。
- Laptop Mode Tools — ノートパソコンの省電力設定をするユーティリティ。多少設定が要りますが省電力設定ユーティリティのデファクトスタンダードとされています。
- libsmbios — Dell SMBIOS テーブルと対話するためのライブラリおよびツール。
- powertop — 消費電力や電源管理の問題を診断して省電力設定を補助するツール。
- powerstat — ACPI や Intel RAPL インターフェイスを使用して電力消費量を測定するツール。
- systemd — システムおよびサービスマネージャ。
- TLP — Linux 向けの先進的な電源管理。
- TuneD — システム上のデバイスの監視と状況に応じた設定を行うデーモン。
- UPower — 電源デバイスの列挙、デバイスイベントの監視、履歴と統計のクエリを行う抽象化レイヤー。
- power-profiles-daemon — D-Bus 経由での電源プロファイルの管理を可能にします。
グラフィカル
- batsignal — libnotify を使用してバッテリレベルの低下を警告する軽量バッテリモニタ。
- cbatticon — 軽量で高速なバッテリアイコンをシステムトレイに表示。
- GNOME Power Statistics — GNOME のシステム電力情報および統計。
- KDE Power Devil — Plasma 用の電源管理モジュール。
- LXQt Power Management — LXQt 用の電源管理モジュール。
- MATE Power Management — MATE 用電源管理ツール。
- MATE Power Statistics — MATE のシステム電力情報と統計。
- poweralertd — UPower 通知を伝播するデーモン。
- powerkit — デスクトップに依存しない電源マネージャー。
- Xfce Power Manager — Xfce 用の電源マネージャ。
- vattery — システムトレイ内のラップトップバッテリのステータスを表示する、 Vala で書かれたバッテリ監視アプリケーション。
ACPI イベント
systemd は一部の電源関連の ACPI イベントを処理します。これらのイベントの動作は /etc/systemd/logind.conf や /etc/systemd/logind.conf.d/*.conf で設定できます (logind.conf(5) を参照)。専用の電源マネージャを持たないシステムでは、この方法は acpid デーモンの代わりになりえます。ちなみに、acpid は通常、ACPI イベントに対応するために使われるデーモンです。
イベントの動作には、ignore、poweroff、reboot、halt、suspend、hibernate、hybrid-sleep、suspend-then-hibernate、lock、kexec のいずれかを指定することができます。ハイバーネートとサスペンドの場合は、適切にセットアップしなければなりません。イベントが設定されていない場合、systemd はデフォルトの動作を使用します。
| イベントハンドラ | 説明 | デフォルトの動作 |
|---|---|---|
HandlePowerKey
|
電源キー/ボタンが押された時にトリガされます。 | poweroff
|
HandleSuspendKey
|
サスペンドキー/ボタンが押された時にトリガされます。 | suspend
|
HandleHibernateKey
|
ハイバネートキー/ボタンが押された時にトリガされます。 | hibernate
|
HandleLidSwitch
|
ラップトップPCなどの蓋が閉じられた時に (以下のケースを除いて) トリガされます。 | suspend
|
HandleLidSwitchDocked
|
システムがドッキングステーションに繋がれている場合や、複数のディスプレイに繋がれている場合に蓋が閉じられるとトリガされます。 | ignore
|
HandleLidSwitchExternalPower
|
システムが外部電源に接続されている状況で蓋が閉じられた時にトリガされます。 | HandleLidSwitch に対して設定されている動作
|
変更を適用するには、systemd-logind.service を再読み込みしてください。
- systemd は AC とバッテリの ACPI イベントを処理することができません。なので、Laptop Mode Tools や他の似たようなツールを使用している場合、acpid が依然として必要です。
- 蓋のスイッチを短い間隔で動作させると、logind は、ドックが存在するかどうかを検出するために 90 秒までサスペンドアクションを遅らせます。[1] この遅延は systemd v220 で設定可能になりました。[2]
logind.confか、このファイルのドロップインファイルでHoldoffTimeoutSec=30sのように設定できます。
電源マネージャ
一部のデスクトップ環境には、systemd の ACPI 設定の一部あるいは全てを inhibit する (一時的にオフにする) 電源マネージャが含まれています。そのような電源マネージャが実行されている場合、電源マネージャだけで ACPI イベントに対する動作を設定することができます。/etc/systemd/logind.conf や /etc/systemd/logind.conf.d/*.conf を変更する必要があるのは、電源マネージャによって inhibit されていないイベントに対する挙動を設定したい場合のみです。
注意点として、電源マネージャが適切なイベントに対して systemd を inhibit しないと、systemd がシステムをサスペンドし、その後サスペンドから復帰すると今度は電源マネージャがシステムを再びサスペンドしてしまうという状況に陥る可能性があります。GNOME、MATE、Plasma、そして Xfce の電源マネージャは、必要な inhibited コマンドを発行します。inhibited コマンドが発行されない場合 (acpid などを使って ACPI イベントを処理している場合)、Handle オプションを ignore に設定してください。systemd-inhibit(1) も参照してください。
xss-lock
xss-lock は systemd の suspend、hibernate、lock-session、unlock-session イベントで適切なアクションを実行します (ロッカーを実行し、ユーザがロッカーをアンロックまたは kill するまで待機する)。xss-lock は DPMS イベントにも反応し、それに応じてロッカーを実行したり kill したりします。
例えば、以下のコマンドを自動起動します:
$ xss-lock -- i3lock -n -i background_image.png &
省電力
このセクションは、カスタムスクリプトや udev ルールなどの省電力設定をの作成するためのリファレンスです。競合を避けるために、設定が他のユーティリティによって管理されていないことを確認してください。
コンピュータが AC 電源またはバッテリーで動作しているかに関わらず、ここに記載されているほとんど全ての機能には使用する価値があります。ここで挙げている機能のほとんどは、パフォーマンスへの影響は無視できるレベルであり、大抵、壊れているハードウェアやドライバのせいでデフォルトで有効化されていないだけです。電力の使用量を減らすことは発熱を減らすことでもあり、動的なオーバークロックによって、最近の Intel や AMD の CPU ではパフォーマンスの向上につながることもあります。
Intel Hardware P-state をサポートする CPU
Intel Hardware P-state (HWP) 対応プロセッサで利用可能なエネルギー設定は、default、performance、balance_performance、balance_power、power です。
以下を実行することで、利用可能な設定を確認できます:
$ cat /sys/devices/system/cpu/cpufreq/policy*/energy_performance_available_preferences
以下のファイルを作成することで、より多くのエネルギーを節約するように設定できます:
/etc/tmpfiles.d/energy_performance_preference.conf
w /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference - - - - balance_power
Intel プロセッサの電力とパフォーマンスのポリシーに関する詳細は x86_energy_perf_policy(8) man ページを参照してください。一時ファイル/ディレクトリに関する詳細は man ページ systemd-tmpfiles(8) や tmpfiles.d(5) も参照してください。
オーディオ
省電力がデフォルトでオンになっているかどうかは、ドライバによります (例えば HD Audio ではオンです)。使用しているモジュールを特定し、modinfo module_name を実行して、省電力機能を調整あるいは無効化する (power_save のような) カーネルモジュールパラメータ を探してください。
バックライト
バックライトを見て下さい。
Bluetooth
Bluetooth を完全に無効化するには、btusb と bluetooth モジュールをブラックリストに入れてください。
あるいは、以下の udev ルールを作成してください:
/etc/udev/rules.d/50-bluetooth.rules
# disable bluetooth
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="0"
Bluetooth を一時的にオフにしたい場合は、rfkill(8) を使ってください:
# rfkill block bluetooth
ウェブカメラ
内蔵のウェブカメラを使わない場合、uvcvideo モジュールをブラックリストに入れてください。
カーネルパラメータ
このセクションでは /etc/sysctl.d/ 内の設定を使います。このディレクトリは、"カーネルの sysctl パラメータ用のドロップインディレクトリです"。詳細は、The New Configuration Files や、より詳しい sysctl.d(5) を見てください。
NMI watchdog の無効化
NMI watchdog は、カーネルパニックを引き起こすハードウェアのハングアップをキャッチするデバッグ機能です。システムによっては大量の割り込みが発生するため、消費電力の増加につながっていることがあります:
/etc/sysctl.d/disable_watchdog.conf
kernel.nmi_watchdog = 0
もしくは起動の初期で完全に無効化するにはカーネルラインに nmi_watchdog=0 を追加してください。
ライトバック時間
仮想メモリのダーティライトバック時間を増やすことでディスク I/O がまとめられて、断続的なディスクの書き込みが減って、消費電力が抑えられます。この値を60秒に設定するには (デフォルトは5秒です):
/etc/sysctl.d/dirty.conf
vm.dirty_writeback_centisecs = 6000
ジャーナルをサポートしているファイルシステム (ext4 や btrfs など) でジャーナルコミットでも同じことをするには、fstab でオプションとして commit=60 を使用します。
この値は、以下の Laptop Mode 設定の副作用として変更されてしまうことに注意してください。また、I/O パフォーマンスと省電力に影響を与える他のパラメータは sysctl#仮想メモリ を参照してください。
Laptop Mode
ラップトップモードの"ノブ"についてはカーネルドキュメントを見て下さい。"このノブの妥当な値は5秒です。"
/etc/sysctl.d/laptop.conf
vm.laptop_mode = 5
ネットワークインターフェイス
Wake-on-LAN は便利な機能ですが、利用しない場合はサスペンド中にマジックパケットが来るのを待つのに無駄な電力を消耗するだけです。Wake-on-LAN#udev ルールを調整することで、全てのイーサネットインターフェイスに対してこの機能を無効化することができます。iw を使って全てのワイヤレスインターフェイスで省電力を有効化するには:
/etc/udev/rules.d/81-wifi-powersave.rules
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wl*", RUN+="/usr/bin/iw dev $name set power_save on"
この設定ファイルの名前は重要です。Systemd の永続的なデバイス名を使用することで、上記のネットワークルールは、辞書順で 80-net-setup-link.rules の後に来るので、ネットワークデバイスの名前が永続的な名前に変更 (例: wlan0 から wlp3s0) された後で適用されます。RUN のコマンドは、全てのルールが処理された後で実行され、永続的な名前 (マッチするデバイスは $name で利用できます) を使用する必要があることに注意してください。
Intel ワイヤレスカード (iwlwifi)
iwlwifi ドライバによる Intel ワイヤレスカードの追加の省電力機能は、適切なパラメータをカーネルモジュールに渡すことで有効化できます。/etc/modprobe.d/iwlwifi.conf ファイルに以下の記述を追加することで、パラメータを永続化させることができます:
options iwlwifi power_save=1
以下のオプションは、レイテンシの中央値を増加させる可能性があります:
options iwlwifi uapsd_disable=0
5.4 より前のカーネルでは、以下のオプションを使用できますが、スループットの最大値を減少させる可能性があります:
options iwlwifi d0i3_disable=0
ワイヤレスカードによっては、以下の2つのオプションのうちいずれかが適用されます:
options iwlmvm power_scheme=3
options iwldvm force_cam=0
以下のコマンドで、どちらのモジュールが動作しているかを確認することで、どちらが関連しているかを確認できます:
# lsmod | grep '^iwl.vm'
これらの省電力オプションは実験的であり、システムを不安定にする可能性があることに注意してください。
バスパワーの管理
Active State Power Management
Wikipedia から:
- Active-state power management (ASPM) とは、PCI Express デバイスが完全にアクティブな状態にある時に電力を節約するための電源管理メカニズムです。主に、active-state link power management を介して行われます。つまり、PCI Express シリアルリンクは、トラフィックが存在しない時にパワーダウンされます。これは通常、ノート PC や他のモバイルインターネットデバイスでバッテリーの寿命を伸ばすために使用されます。
ブート時に BIOS は、ハードウェアのサポートが存在するかどうかに応じて ASPM を有効化または無効化します。サポートの有無を確認するには以下を実行してください:
# lspci -vv | grep 'ASPM.*abled;'
利用可能な ASPM ポリシーと、現在のデフォルトのポリシーを調べるには、以下を実行してください:
$ cat /sys/module/pcie_aspm/parameters/policy
[default] performance powersave powersupersave
ASPM は、しばしば以下の理由によって無効化されることがあります [3][リンク切れ 2024-10-12]:
- BIOS が何らかの理由で ASPM を無効化した (コンフリクトが起こるから?)。
- PCIE が ASPM を必要とするが、L0s は任意である (なので、L0s は無効化され、L1 だけが有効化されるかもしれません)。
- ASPM 用に BIOS がプログラムされていないか、BIOS にバグが存在する。
上記で ASPM がサポートされていないと報告されたが、ハードウェアが ASPM をサポートしていると思われる場合は、カーネルが ASPM を管理できるようにするために pcie_aspm=force カーネルパラメータで ASPM を強制的に有効化できます。
- ASPM を、サポートされていないシステム上で強制的に有効化すると、電力消費量が増加する場合があります。さらに、システムのフリーズやカーネルパニックの危険性もあります。なので、そのような場合に備えてこのオプションをもとに戻す手段を確保しておくべきです。
- ASPM の強制はカーネル内で行われます。なので、ハードウェアで無効化されている場合には、有効化できません。ハードウェアで ASPM が無効化されているかどうか確認するには、root として
dmesg | grep ASPMと実行してください。あなたのハードウェア固有の情報については、対応する Wiki の記事を参照してください (もし存在すれば)。
ASPM がサポートされており、かつ、有効化されていれば、現在のセッションに対して任意のポリシーを選択することができます。例えば、現在のセッションに対して powersupersave を設定するには、以下を実行してください:
# echo powersupersave > /sys/module/pcie_aspm/parameters/policy
システムのブート時に特定の ASPM 状態 (例として powersupersave) を有効化させるには、pcie_aspm.policy=powersupersave をカーネルパラメータに追加してください。
PCI Runtime Power Management
/etc/udev/rules.d/pci_pm.rules
SUBSYSTEM=="pci", ATTR{power/control}="auto"
SUBSYSTEM=="ata_port", KERNEL=="ata*", ATTR{device/power/control}="auto"
上記のルールは未使用のデバイスを全てパワーダウンしますが、一部のデバイスが復帰しなくなってしまいます。サポートしていることが分かっているデバイスのみに対して Runtime Power Management を有効化するには、ベンダ ID とデバイス ID を使って、特定のデバイスにだけマッチするようにしてください (ID を入手するには lspci -nn を使ってください):
/etc/udev/rules.d/pci_pm.rules
# whitelist for pci autosuspend
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="auto"
または、PCI Runtime Power Management が機能しないデバイスを除外して、その他の全てのデバイスに対して有効化するには:
/etc/udev/rules.d/pci_pm.rules
# blacklist for pci runtime power management
SUBSYSTEM=="pci", ATTR{vendor}=="0x1234", ATTR{device}=="0x1234", ATTR{power/control}="on", GOTO="pci_pm_end"
SUBSYSTEM=="pci", ATTR{power/control}="auto"
LABEL="pci_pm_end"
USB の自動サスペンド
Linux カーネルは USB デバイスが使用されていないときに USB デバイスを自動的にサスペンドさせることができます。これによって電力を相当カットできるときもありますが、USB の省電力機能に対応していない USB デバイスではおかしな挙動が起こる可能性もあります (特に USB マウスやキーボード)。ホワイトリストとブラックリストでフィルタリングする udev ルールを使うことで問題は軽減されます。
マウスとキーボード以外のUSB デバイスで自動サスペンドを有効にする例:
/etc/udev/rules.d/50-usb_power_save.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{product}!="*Mouse", ATTR{product}!="*Keyboard", TEST=="power/control", ATTR{power/control}="auto"
自動サスペンドが動作するデバイスにだけ自動サスペンドを有効にするには、ベンダー ID とプロダクト ID でマッチングを行います (これらの ID を入手するには lsusb を使ってください):
/etc/udev/rules.d/50-usb_power_save.rules
# whitelist for usb autosuspend
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", ATTR{power/control}="auto"
もしくは、USB 自動サスペンドが使えないデバイスをブラックリストに入れて、他の全てのデバイスで自動サスペンドを有効にするには:
/etc/udev/rules.d/50-usb_power_save.rules
# blacklist for usb autosuspend
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", GOTO="power_usb_rules_end"
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="auto"
LABEL="power_usb_rules_end"
自動サスペンドに入るデフォルトのアイドル遅延時間は usbcore 組み込みカーネルモジュールの autosuspend パラメータによって制御されています。遅延時間をデフォルトの2秒から5秒に設定するには、以下のカーネルパラメータを追加してください:
usbcore.autosuspend=5
power/control と同じように、power/autosuspend 属性を設定することで遅延時間はデバイスごとに細かく設定することができます。また、power/autosuspend を -1 (つまり、自動サスペンドしない) に設定することで、自動サスペンドを無効化することができます:
/etc/udev/rules.d/50-usb_power_save.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", ATTR{idProduct}=="9205", ATTR{power/autosuspend}="-1"
USB の電源管理に関する詳細は Linux カーネルドキュメントを見て下さい。
SATA Active Link Power Management
現在の設定は /sys/class/scsi_host/host*/link_power_management_policy で確認したり設定したりできます:
$ grep . /sys/class/scsi_host/host*/link_power_management_policy $ echo "med_power_with_dipm" >/sys/class/scsi_host/hostN/link_power_management_policy
| 設定 | 説明 | 省電力効果 |
|---|---|---|
| max_performance | 現在のデフォルト | 無し |
| medium_power | - | 約 1.0 ワット |
| med_power_with_dipm | 推奨される設定1 | 約 1.5 ワット |
| min_power | 警告: データ損失の可能性あり2 | 約 1.5 ワット |
- Linux 4.15 から、
med_power_with_dipmと呼ばれる設定が存在しています。これは、Windows IRST ドライバ設定の動作と一致するものであり、最近の SSD や HDD ではデータの損失は発生しないはずです。(アイドル状態で) 1.0 から 1.5 ワットの節約になることもあります。これは、Linux 4.16 から Intel ベースのノート PC でデフォルトの設定となっています [4]。 - 警告
min_powerSATA Active Link Power Management 設定は一部のデバイスでデータ損失が発生する可能性があります。バックアップを頻繁に取っていない限り、この設定を有効化しないでください。
udev ルールファイルを作成することで link_power_management_policy の設定を永続化させることができます。例えば:
/etc/udev/rules.d/hd_power_save.rules
ACTION=="add", SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="med_power_with_dipm"
- この設定を行うとアイドル状態になっているドライブにアクセスするときに遅延が発生するようになります。AC 電源を使用するかどうかによって変えるべき設定です。
- SATA ホストコントローラとストレージデバイスの組み合わせによっては、デフォルト設定の
med_power_with_dipmではうまく動作しません。例えば:- linux-6.8.1 の時点では、Intel 7 Series Chipset コントローラから Crucial M550 SSD に (MU02 ファームウェアで) アクセスするとタイムアウトとリンク速度の低下が発生します。
- linux-6.9.6 の時点では、AMD 600 Series Chipset SATA コントローラを HL-DT-ST BDDVDRW GGC-H20L 光学ディスクドライブに使用した際に、数分おきに再初期化して ROM ドライブが音を立てる問題が発生します。
- このような場合には、
medium_powerに設定すると解決します。
- このような場合には、
ハードディスクドライブ
設定できるドライブのパラメータについては hdparm#電源管理の設定 を見て下さい。
多数のプログラムがディスクに頻繁に書き込みをおこなう場合は省電力は効率的ではありません。全てのプログラムを調査して、いつどのようにプログラムがディスクに書き込むを行うのか調べるのがディスクの使用量を減らす道です。iotop を使えばどのプログラムがディスクに頻繁に書き込みしているかわかります。他のヒントは パフォーマンスの向上#ストレージデバイス を見て下さい。
noatime オプションを設定するなどの小さなことも馬鹿にできません。十分な RAM がある場合、swappiness を無効化したり制限することでディスクへの書き込みが減る可能性があります。
PowerChoice テクノロジーを搭載した Seagate ドライブの場合、EPC (Extended Power Conditions) 機能により hdparm から APM を設定するテクニックはうまく行きません。APM を設定する代わりに、openseachestAUR パッケージをインストールし、ドライブの EPC を完全に無効化することができます (X は実際のドライブレターに置き換えてください):
# openSeaChest_PowerControl --scan # openSeaChest_PowerControl -d /dev/sdX -i # openSeaChest_PowerControl -d /dev/sdX --showEPCSettings # openSeaChest_PowerControl -d /dev/sdX --EPCfeature disable # openSeaChest_PowerControl -d /dev/sdX --showEPCSettings
最後のコマンドでは、以下が出力されます:
==========================================================================================
openSeaChest_PowerControl - openSeaChest drive utilities - NVMe Enabled
Copyright (c) 2014-2023 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
openSeaChest_PowerControl Version: 3.3.1-4_1_1 X86_64
Build Date: Jul 4 2023
Today: Tue Jul 4 17:49:36 2023 User: root
==========================================================================================
/dev/sdX - ST1000NM0008-2F2100 - ZFA19JG2 - SN02 - ATA
===EPC Settings===
* = timer is enabled
C column = Changeable
S column = Savable
All times are in 100 milliseconds
Name Current Timer Default Timer Saved Timer Recovery Time C S
Idle A 0 *10 *10 1 Y Y
Idle B 0 *1200 *1200 3 Y Y
Idle C 0 6000 6000 16 Y Y
Standby Z 0 9000 9000 46 Y Y
最初の列の 0 は、パーキングとスピンダウンが正常に無効化されたことを意味します。
ツールとスクリプト
スクリプトと udev ルールを使う
systemd ユーザーは systemctl suspend や systemctl hibernate でサスペンドとハイバネートを行うことができ、/etc/systemd/logind.conf で acpi イベントを処理することができるので、pm-utils と acpid を削除するということに興味を引かれるかもしれません。systemd が行えないことがたったひとつだけ存在します (systemd-204 現在): システムが AC 電源で動作しているのか、バッテリーで動作しているのかで条件分岐を行う電源管理です。このギャップをなくすには、AC アダプタが抜き差しされたときにスクリプトを実行する udev ルールを作成します:
/etc/udev/rules.d/powersave.rules
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/path/to/your/script true"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/path/to/your/script false"
/usr/local/bin/)。powersave スクリプトのサンプル:
- ftw (パッケージ: ftw-gitAUR)
- powersave
- throttlectl (throttlectlAUR)
上記の udev ルールはちゃんと動作するはずですが、電源設定がサスペンドやハイバネートをした後に更新されない場合、以下の内容で /usr/lib/systemd/system-sleep/ にスクリプトを追加してください:
/usr/lib/systemd/system-sleep/00powersave
#!/bin/sh
case $1 in
pre) /path/to/your/script false ;;
post)
if cat /sys/class/power_supply/AC0/online | grep 0 > /dev/null 2>&1
then
/path/to/your/script true
else
/path/to/your/script false
fi
;;
esac
exit 0
忘れずに実行可能属性を付与してください。
電源設定の表示
以下のスクリプトは USB や PCI デバイスの電源設定などのプロパティを表示します。全ての設定を見るには root 権限が必要なので注意して下さい。
#!/bin/bash
for i in $(find /sys/devices -name "bMaxPower")
do
busdir=${i%/*}
busnum=$(<$busdir/busnum)
devnum=$(<$busdir/devnum)
title=$(lsusb -s $busnum:$devnum)
printf "\n\n+++ %s\n -%s\n" "$title" "$busdir"
for ff in $(find $busdir/power -type f ! -empty 2>/dev/null)
do
v=$(cat $ff 2>/dev/null|tr -d "\n")
[[ ${#v} -gt 0 ]] && echo -e " ${ff##*/}=$v";
v=;
done | sort -g;
done;
printf "\n\n\n+++ %s\n" "Kernel Modules"
for mod in $(lspci -k | sed -n '/in use:/s,^.*: ,,p' | sort -u)
do
echo "+ $mod";
systool -v -m $mod 2> /dev/null | sed -n "/Parameters:/,/^$/p";
done
ユーザにシャットダウンを許可する
ボタンと蓋スイッチのイベント
サスペンド、電源オフ、そしてハイバネートのボタンのイベントと、蓋を閉じた時のイベントは、#ACPI イベント で説明されているように logind によって処理されます。
systemd-logind を使う
polkit を使用している場合、非リモートセッションのユーザは、セッションが壊れていない限り、電源関連のコマンドを発行することができます。
セッションがアクティブであることを確認するには:
$ loginctl show-session $XDG_SESSION_ID --property=Active
アクティブであるならば、ユーザはコマンドラインで systemctl のコマンドを使用したり、メニューに追加したりできます:
$ systemctl poweroff $ systemctl reboot
systemctl suspend や systemctl hibernate といった他のコマンドも使用できます。systemctl(1) の System Commands セクションを参照してください。
sudo を使う
sudo をインストールし、sudo 権限をユーザに与えてください。sudo 権限が与えられたユーザは、sudo systemctl コマンド (例: sudo systemctl poweroff、sudo systemctl reboot、sudo systemctl suspend、sudo systemctl hibernate) を使用できるようになります。systemctl(1) の System Commands セクションを参照してください。
sudo 権限の無いユーザ
ユーザにシャットダウンコマンドのみを使用できるようにし、sudo 権限を与えないようにする必要がある場合、visudo コマンドを root として使って /etc/sudoers の末尾に以下を追加してください。user の部分は適切なユーザ名に、hostname の部分はマシンのホスト名に置き換えてください。
user hostname =NOPASSWD: /usr/bin/systemctl poweroff,/usr/bin/systemctl halt,/usr/bin/systemctl reboot
ここで設定したユーザは、sudo systemctl poweroff でシャットダウンを、sudo systemctl reboot で再起動を行うことができるようになります。システムをシャットダウンしたいユーザは、sudo systemctl halt も使用できます。パスワードのプロンプトを表示させたくない場合は、NOPASSWD: タグを使用してください。