「Pm-utils」の版間の差分
139行目: | 139行目: | ||
Do not set the executable bit on that dummy-hook. |
Do not set the executable bit on that dummy-hook. |
||
+ | {{Note|適当なディレクトリにダミーファイルを作成してください。例えば {{ic|/usr/lib/pm-utils/power.d}} のフックを無効化する場合、{{ic|/etc/pm/power.d}} にダミーファイルを作成する必要があります。}} |
||
− | Note: Make sure you create the dummy files in the appropriate directory. For example if you are trying to disable hooks in /usr/lib/pm-utils/power.d, you will need to place the dummy file in /etc/pm/power.d. |
||
==== 別の方法 ==== |
==== 別の方法 ==== |
||
+ | ブラックリストにしたいモジュールを {{ic|HOOK_BLACKLIST}} 変数に定義したファイルを {{ic|/etc/pm/config.d}} に作成してください。例えば、省電力機能を自分で管理したい場合、以下を使います: |
||
− | Create a file in {{ic|/etc/pm/config.d}} with the modules you want to blacklist in the {{ic|HOOK_BLACKLIST}} variable. |
||
− | For example, to manage power saving yourself, use: |
||
HOOK_BLACKLIST="hal-cd-polling intel-audio-powersave journal-commit laptop-mode pcie_aspm readahead sata_alpm sched-powersave xfs_buffer wireless" |
HOOK_BLACKLIST="hal-cd-polling intel-audio-powersave journal-commit laptop-mode pcie_aspm readahead sata_alpm sched-powersave xfs_buffer wireless" |
||
202行目: | 201行目: | ||
Hooks in {{ic|/etc/pm/}} take precedence over those in {{ic|/usr/lib/pm-utils/}}, so the system administrator can override the defaults provided by the distribution. |
Hooks in {{ic|/etc/pm/}} take precedence over those in {{ic|/usr/lib/pm-utils/}}, so the system administrator can override the defaults provided by the distribution. |
||
− | === Pm-suspend |
+ | === Pm-suspend の内部 === |
This outlines the internal actions when {{ic|pm-suspend}} is run, describing how {{ic|pm-utils}} gracefully falls back onto the kernel method if the requirements of other methods are not met. |
This outlines the internal actions when {{ic|pm-suspend}} is run, describing how {{ic|pm-utils}} gracefully falls back onto the kernel method if the requirements of other methods are not met. |
||
285行目: | 284行目: | ||
== Tips and tricks == |
== Tips and tricks == |
||
+ | === 復帰時にハードディスクの電源管理レベルを自動的に設定 === |
||
− | === Having the HD power management level automatically set again on resume === |
||
Do it like this: |
Do it like this: |
||
325行目: | 324行目: | ||
echo -n "i8042" > /sys/bus/platform/drivers/i8042/bind |
echo -n "i8042" > /sys/bus/platform/drivers/i8042/bind |
||
+ | === Openbox のメニューにスリープモードを追加 === |
||
− | === Add sleep modes to Openbox menu === |
||
Openbox users can add the new scripts as additional shutdown options within the Openbox menu by adding the items to a new or existing sub-menu in {{ic|~/.config/openbox/menu.xml}}, for example: |
Openbox users can add the new scripts as additional shutdown options within the Openbox menu by adding the items to a new or existing sub-menu in {{ic|~/.config/openbox/menu.xml}}, for example: |
||
343行目: | 342行目: | ||
[[電源管理#ACPI イベント|systemd]] は独自に電源イベントを管理しており pm-utils や {{ic|/etc/pm/*}} のスクリプトは使わないので注意してください。 |
[[電源管理#ACPI イベント|systemd]] は独自に電源イベントを管理しており pm-utils や {{ic|/etc/pm/*}} のスクリプトは使わないので注意してください。 |
||
+ | === ハイバネートやサスペンド時にスクリーンセーバーをロック === |
||
− | === Locking the screen saver on hibernate or suspend === |
||
You may wish to run a screen locking utility when the system suspends (so that a password is required after waking up). This can be done by adding a script to the {{ic|/etc/pm/sleep.d}} folder. Make sure the script is executable (chmod 755) and owned by {{ic|root:root}}. |
You may wish to run a screen locking utility when the system suspends (so that a password is required after waking up). This can be done by adding a script to the {{ic|/etc/pm/sleep.d}} folder. Make sure the script is executable (chmod 755) and owned by {{ic|root:root}}. |
||
441行目: | 440行目: | ||
この問題はサスペンド時に NVS 領域を保存するようになってから起こるようになりました (2.6.35-rc4) ([http://www.spinics.net/lists/linux-acpi/msg29521.html メーリングリストの投稿])。しかしながら、全てのマシンでこの機構が動作するとは限らないと知れ渡ってから、カーネルの開発者は {{ic|1=acpi_sleep=nonvs}} カーネルコマンドラインオプションで無効化できるようにしています ([[カーネルパラメータ]]を参照)。 |
この問題はサスペンド時に NVS 領域を保存するようになってから起こるようになりました (2.6.35-rc4) ([http://www.spinics.net/lists/linux-acpi/msg29521.html メーリングリストの投稿])。しかしながら、全てのマシンでこの機構が動作するとは限らないと知れ渡ってから、カーネルの開発者は {{ic|1=acpi_sleep=nonvs}} カーネルコマンドラインオプションで無効化できるようにしています ([[カーネルパラメータ]]を参照)。 |
||
+ | === サスペンドから復帰するとシャットダウンしてしまう === |
||
− | === Resume from suspend shuts down instead of wake up === |
||
On an Acer Aspire AS3810TG, resuming from suspend shuts down the computer instead of waking it up. If you experience a similar issue, try passing the parameter {{ic|1=i8042.reset=1}} to your kernel. In [[GRUB]], the line in {{ic|/boot/grub/grub.cfg}} should be something like this: |
On an Acer Aspire AS3810TG, resuming from suspend shuts down the computer instead of waking it up. If you experience a similar issue, try passing the parameter {{ic|1=i8042.reset=1}} to your kernel. In [[GRUB]], the line in {{ic|/boot/grub/grub.cfg}} should be something like this: |
||
449行目: | 448行目: | ||
# sysctl -e -w i8042.reset=1 |
# sysctl -e -w i8042.reset=1 |
||
+ | === サスペンドから復帰したときに画面が表示されない === |
||
− | === Blank screen when waking from suspend === |
||
Some laptops (e.g. Dell Inspiron Mini 1018) will just show a black screen with no backlight after resuming from suspend. If this happens to you, try going into the BIOS of the laptop and disabling Intel SpeedStep if it is present. |
Some laptops (e.g. Dell Inspiron Mini 1018) will just show a black screen with no backlight after resuming from suspend. If this happens to you, try going into the BIOS of the laptop and disabling Intel SpeedStep if it is present. |
||
474行目: | 473行目: | ||
Some other laptops (e.g. Toshiba Portégé R830) will just show a black screen with no backlight after resuming from suspend, with fans blowing at top speed. If this is what you're seeing, try going into the BIOS and disable the VT-d virtualization setting by switching to "VT-x only". |
Some other laptops (e.g. Toshiba Portégé R830) will just show a black screen with no backlight after resuming from suspend, with fans blowing at top speed. If this is what you're seeing, try going into the BIOS and disable the VT-d virtualization setting by switching to "VT-x only". |
||
− | === VirtualBox |
+ | === VirtualBox の問題 === |
The VirtualBox kernel modules cause {{ic|pm-suspend}} and {{ic|pm-hibernate}} to fail on some laptops. (See [https://bbs.archlinux.org/viewtopic.php?id=123354 this discussion]). Instead of suspending or hibernating, the system freezes and indicator LEDs blink (the suspend indicator in the case of ThinkPads and the Caps Lock and Scroll Lock indicators in the case of the MSI Wind U100). The {{ic|pm-suspend}} and {{ic|pm-hibernate}} logs appear normal. |
The VirtualBox kernel modules cause {{ic|pm-suspend}} and {{ic|pm-hibernate}} to fail on some laptops. (See [https://bbs.archlinux.org/viewtopic.php?id=123354 this discussion]). Instead of suspending or hibernating, the system freezes and indicator LEDs blink (the suspend indicator in the case of ThinkPads and the Caps Lock and Scroll Lock indicators in the case of the MSI Wind U100). The {{ic|pm-suspend}} and {{ic|pm-hibernate}} logs appear normal. |
||
500行目: | 499行目: | ||
タイプが {{ic|"swap"}} のパーティションがあれば大丈夫です。パーティションが存在しない場合、[[スワップ#スワップパーティション]]を見て、スワップパーティションを再作成・有効化してください。 |
タイプが {{ic|"swap"}} のパーティションがあれば大丈夫です。パーティションが存在しない場合、[[スワップ#スワップパーティション]]を見て、スワップパーティションを再作成・有効化してください。 |
||
+ | === サスペンドしようとしたときにカーソルしか表示されない黒画面になる === |
||
− | === Black screen with unblinking cursor when trying to suspend === |
||
If you get a black screen with unblinking cursor when trying to do |
If you get a black screen with unblinking cursor when trying to do |
||
510行目: | 509行目: | ||
Suspend should now be working. |
Suspend should now be working. |
||
+ | === 画面が表示されない問題 === |
||
− | === Blank screen issue === |
||
Some users have reported having issues with their laptops not resuming after a suspend or hibernate. This is due to the {{ic|autodetect}} hook in "HOOKS" array of the {{ic|/etc/mkinitcpio.conf}} file. This can be disabled using the same method for adding the {{ic|resume}} hook. Just remove {{ic|autodetect}} from the list and follow the steps to build the new image. See [[#Mkinitcpio_Resume_Hook|Resume Hook]] for more details on building the new image. |
Some users have reported having issues with their laptops not resuming after a suspend or hibernate. This is due to the {{ic|autodetect}} hook in "HOOKS" array of the {{ic|/etc/mkinitcpio.conf}} file. This can be disabled using the same method for adding the {{ic|resume}} hook. Just remove {{ic|autodetect}} from the list and follow the steps to build the new image. See [[#Mkinitcpio_Resume_Hook|Resume Hook]] for more details on building the new image. |
||
516行目: | 515行目: | ||
{{Note|If you are using [[plymouth]] it may be an other reason to this issue. Adding {{ic|resume}} before {{ic|plymouth}} in "HOOKS" array of the {{ic|/etc/mkinitcpio.conf}} file should fix this.}} |
{{Note|If you are using [[plymouth]] it may be an other reason to this issue. Adding {{ic|resume}} before {{ic|plymouth}} in "HOOKS" array of the {{ic|/etc/mkinitcpio.conf}} file should fix this.}} |
||
+ | === 64ビットの OS で復帰できない === |
||
− | === Unable to resume with 64 bit OS === |
||
Certain motherboards/BIOS combinations (specifically known are some Zotac ITX boards, perhaps others) will not resume properly from suspend if any 64 bit operating system is installed. The solution is the enter your BIOS setup and Disable the "Memory Remapping Hole" in your DRAM configuration page. This will probably fix the suspend to RAM problem but will probably result in your OS not detecting all of your RAM. |
Certain motherboards/BIOS combinations (specifically known are some Zotac ITX boards, perhaps others) will not resume properly from suspend if any 64 bit operating system is installed. The solution is the enter your BIOS setup and Disable the "Memory Remapping Hole" in your DRAM configuration page. This will probably fix the suspend to RAM problem but will probably result in your OS not detecting all of your RAM. |
||
+ | === radeon ドライバーでハイバネートから復帰した時に黒画面になる === |
||
− | === Black screen when waking from hibernate with radeon driver === |
||
When using the radeon driver and having {{ic|radeon}} in the {{ic|HOOKS}} array of the {{ic|/etc/mkinitcpio.conf}} resuming from hibernation results in the screen being black, however everything else working (testable by keeping a console open with a command to execute and starting the execution after resuming). |
When using the radeon driver and having {{ic|radeon}} in the {{ic|HOOKS}} array of the {{ic|/etc/mkinitcpio.conf}} resuming from hibernation results in the screen being black, however everything else working (testable by keeping a console open with a command to execute and starting the execution after resuming). |
||
This seems to be related to using {{ic|radeon.dpm<nowiki>=</nowiki>1}} (default since kernel 3.13) as the power management method in radeon. |
This seems to be related to using {{ic|radeon.dpm<nowiki>=</nowiki>1}} (default since kernel 3.13) as the power management method in radeon. |
||
+ | HOOKS 行から {{ic|radeon}} を削除 (そして initrd を再生成) することでこの問題は解決します ([https://bugs.freedesktop.org/show_bug.cgi?id=72716] を参照)。 |
||
− | Removing {{ic|radeon}} from the HOOKS array (and rebuiling the initrd) fixes this problem. |
||
− | (See [https://bugs.freedesktop.org/show_bug.cgi?id=72716 here].) |
||
+ | === ハイバネート時にコンピュータの電源が切れない === |
||
− | === Computer does not turn off when hibernating === |
||
+ | Linux をハイバネートしてディスクにデータが書き込まれた後、コンピュータの電源が正しく切れないことがあります。その場合、強制的に電源を切ってから再起動すると、復帰が正しく動作します。 |
||
− | It is possible that after Linux hibernates and has written the data to disk, the computer does not power off properly. If it is then forcefully powered off and later restarted, resuming will work fine. |
||
− | + | {{ic|/etc/pm/config.d/hibernate_mode}} という名前の実行可能ファイルを作成して、次の行を記述することで修正できます: {{ic|HIBERNATE_MODE<nowiki>=</nowiki>"shutdown"}}。その後 pm-hibernate でコンピュータが正しくシャットダウンされるようになります。 |
|
− | After that pm-hibernate should properly shut down the computer. |
||
− | === |
+ | === サスペンド後にディスプレイの電源が入らない (radeon) === |
+ | radeon gpu でサスペンド後にディスプレイが表示されない場合、以下の内容で {{ic|/etc/pm/config.d/radeon}} を作成してみてください: |
||
− | If you get a blank display after suspension with radeon gpu, try to create {{ic|/etc/pm/config.d/radeon}}, and add the following: |
||
{{hc|/etc/pm/config.d/radeon|2= |
{{hc|/etc/pm/config.d/radeon|2= |
2015年12月6日 (日) 00:18時点における版
pm-utils はサスペンドと電源状態を設定するフレームワークです。powersave
などのスクリプトなどを置き換えるために作られました。
pm-utils はカーネルのサスペンドと復帰を様々なハックで包み込むシェルスクリプトのコレクションです。サスペンドに対応していないドライバーやサブシステムによるバグを回避するためにハックが必要になります。カスタムフックをディレクトリに配置することで簡単に拡張することができ、システムの管理者がフックを作成するだけでなく、パッケージによってフックがインストールされることもあります。システムのサスペンドや電源状態の変化に特別注意する必要があるパッケージにフックが含まれています。
あまり知られていない機能として Laptop Mode Tools による切り替えを模倣します。
cpupower パッケージと組み合わせて使うことで、ノートパソコン (デスクトップ) のユーザーは完全な電源管理スイートとして利用できます。
目次
- 1 インストール
- 2 基本設定
- 3 高度な設定
- 4 仕組み
- 5 Tips and tricks
- 6 トラブルシューティング
- 6.1 セグメンテーション違反
- 6.2 サスペンドから復帰する代わりに再起動する
- 6.3 サスペンドから復帰するとシャットダウンしてしまう
- 6.4 サスペンドから復帰したときに画面が表示されない
- 6.5 VirtualBox の問題
- 6.6 スワップパーティションが存在しないのにハイバネート
- 6.7 サスペンドしようとしたときにカーソルしか表示されない黒画面になる
- 6.8 画面が表示されない問題
- 6.9 64ビットの OS で復帰できない
- 6.10 radeon ドライバーでハイバネートから復帰した時に黒画面になる
- 6.11 ハイバネート時にコンピュータの電源が切れない
- 6.12 サスペンド後にディスプレイの電源が入らない (radeon)
- 7 参照
インストール
公式リポジトリの pm-utils パッケージをインストールしてください。
root で pm-suspend
, pm-suspend-hybrid
, pm-hibernate
を実行すると手動でサスペンドが行われます。サスペンドスクリプトは /var/log/pm-suspend.log
にログを書き出します。
別のサスペンドバックエンドをインストール (任意)
Arch Linux のパッケージでは次のバックエンドに対応するようになっています: kernel
, tuxonice
, uswsusp
。以下のコマンドで確認できます:
pacman -Ql pm-utils | grep module.d
サスペンドバックエンドは /etc/pm/config.d
の SLEEP_MODULE
設定変数で指定することができ、デフォルトでは kernel
バックエンドが使われます。別のサスペンドバックエンドを使うには、それぞれ必要なパッケージをインストールしてください。どちらも Arch User Repository からインストールできます:
- uswsusp - uswsusp-gitAUR
- tuxonice - linux-iceAUR / linux-pf
さらに、pm-utils には独自のビデオ互換データベースが付属しており、/usr/lib/pm-utils/video-quirks/
にインストールされます。
基本設定
スタンバイ/RAM にサスペンド
理想的な状態は、root で pm-suspend
を実行することでメモリへのサスペンドが開始され、全ての動作状態が RAM に保存されて、消費電力を抑えるために RAM 以外の部品は全部シャットダウンされることです。また、電源ボタンを押すことでこの状態から復帰できなければなりません。
場合によっては、pm-suspend
を実行するとフリーズするなどの問題が発生することがあります。特定のモジュールが正しく動作しないのが原因です。問題を発生させるモジュールがわかっている場合、/etc/pm/config.d/modules
の SUSPEND_MODULES
に以下のようにモジュールを追加します:
SUSPEND_MODULES="uhci_hd button ehci_hd iwlwifi"
設定に追加されたモジュールはサスペンドが行われる前にアンロードされ、復帰後にリロードされます。
ノートパソコンのフタを閉じた時などの電源イベントによって自動的に pm-suspend
を実行するように設定したい場合は、Acpid を参照してください。
ハイバネーション (suspend2disk)
サスペンドとハイバネート#ハイバネーションの指示に従ってハイバネーションを設定してください。
もしくは、kernel
バックエンドを使わない場合、Uswsusp#設定 や TuxOnIce#ブートローダーの設定 を見て下さい。
通常ユーザーでサスペンド/ハイバネート
root パスワードを入力することなくサスペンドする方法は3つあります: Udev を使用する方法、UPower を使用する方法、visudo でユーザーに適当な権限を与える方法です。
ユーザーに権限を与える方法
pm-utils スクリプトは root で実行する必要があるため、sudo を使うことで root パスワードを入力しないで通常ユーザーでスクリプトを使えるようにすることができます。そうするには、root で visudo
を使って /etc/sudoers
ファイルを編集してください。詳しくは、sudo を参照。
以下の行を追加してください。username
はあなたのユーザー名に置き換えて、保存してから visudo
を終了します:
username ALL = NOPASSWD: /usr/sbin/pm-hibernate username ALL = NOPASSWD: /usr/sbin/pm-suspend
もしくは、グループを使うこともできます。以下の行を使って下さい。group
は置き換えて下さい:
%group ALL = NOPASSWD: /usr/sbin/pm-hibernate %group ALL = NOPASSWD: /usr/sbin/pm-suspend
上記の設定によって、パスワードを入力しなくても以下のコマンドを実行することでスクリプトが実行できます:
$ sudo pm-hibernate
もしくは:
$ sudo pm-suspend
また、ユーザーを power
グループに追加して、アプレットなどを使用してサスペンドできるようにします。グループに追加していないと、GNOME のシャットダウンアプレットなどでサスペンドしようとしたときに、耳障りなビープ音が三回鳴って画面がロックされます。ユーザーをグループに追加するには:
# gpasswd -a username power
これでデスクトップ環境の電源管理ツールを使って、ノートパソコンのフタが閉じられたとき、あるいはバッテリーの残量が少なくなったときに、自動的にサスペンドやハイバネートをすることができるようになります。
省電力機能
pm-utils ではシステムが AC アダプタに接続しているかどうかに合わせてコマンドを実行することができます。スクリプトを /etc/pm/power.d/
フォルダの中に作成してください。スクリプトの例は crunchbang フォーラム に存在します。AC 状態の変化を検出するには upower を動作させる必要があるので注意してください (詳しくは [1] を参照)。
AC 状態にあわせて明るさを変化させる
以下は AC 状態にあわせて輝度を変化させる例です。以下の内容で /etc/pm/power.d/00-brightness
というファイルを作成して、あなたのシステムに合わせて、輝度設定のパスとファイルに書き出す値を変更してください。
#!/bin/bash case $1 in true) echo "Enable screen power saving" echo 5 > /sys/class/backlight/acpi_video0/device/backlight/acpi_video0/brightness ;; false) echo "Disable screen power saving" echo 14 > /sys/class/backlight/acpi_video0/device/backlight/acpi_video0/brightness ;; esac
アイドル状態でサスペンド
xautolock プログラムを使う方法があります。xautolock -time 30 -locker "sudo pm-suspend" -detectsleep &
を ~/.xinitrc
に追加してください。30分間、何も動作がない場合に pm-suspend
を呼び出します。
通常のスワップパーティションの代わりにスワップファイルを使う
通常のスワップパーティションの代わりにスワップファイルを使いたい場合、スワップファイルを見て下さい。
高度な設定
メインの設定ファイルは /usr/lib/pm-utils/defaults
です。このファイルを編集してはいけません。パッケージのアップデートによって、デフォルト設定に書き換えられてしまう可能性があります。設定ファイルは /etc/pm/config.d/
に置くようにしてください。/etc/pm/config.d
に modules
や config
という名前で、以下の内容のシンプルなテキストファイルを作成することで、システム全体の設定ファイルの設定を上書きできます:
SUSPEND_MODULES="button uhci_hcd"
設定ファイルで利用できる変数
- SUSPEND_MODULES="button"
- サスペンドする前にアンロードするモジュールのリスト
- SLEEP_MODULE="tuxonice uswsusp kernel"
- 試行するデフォルトのスリープ/復帰システム
- HIBERNATE_MODE="shutdown"
- 再起動ではなく強制的にシャットダウンさせる
フックの無効化
If a hook is run which you do not like or which you think is not useful or even harmful, we would appreciate a bug report for that.
You can however easily disable hooks by just creating an empty file corresponding to the hook in /etc/pm/sleep.d/
. Say you want to disable the hook /usr/lib/pm-utils/sleep.d/45pcmcia
, you can do this easily by calling
# touch /etc/pm/sleep.d/45pcmcia
Do not set the executable bit on that dummy-hook.
別の方法
ブラックリストにしたいモジュールを HOOK_BLACKLIST
変数に定義したファイルを /etc/pm/config.d
に作成してください。例えば、省電力機能を自分で管理したい場合、以下を使います:
HOOK_BLACKLIST="hal-cd-polling intel-audio-powersave journal-commit laptop-mode pcie_aspm readahead sata_alpm sched-powersave xfs_buffer wireless"
フックの作成
If you want to do something specific to your setup during suspend or hibernate, then you can easily put your own hook into /etc/pm/sleep.d
. The hooks in this directory will be called in alphabetic order during suspend (that is the reason their names all start with 2 digits, to make the ordering explicit) and in the reverse order during resume. The general convention to be followed on number ordering is:.
- 00 - 49
- User and most package supplied hooks. If a hook assumes that all of the usual services and userspace infrastructure is still running, it should be here.
- 50 - 74
- Service handling hooks. Hooks that start or stop a service belong in this range. At or before 50, hooks can assume that all services are still enabled.
- 75 - 89
- Module and non-core hardware handling. If a hook needs to load/unload a module, or if it needs to place non-video hardware that would otherwise break suspend or hibernate into a safe state, it belongs in this range. At or before 75, hooks can assume all modules are still loaded.
- 90 - 99
- Reserved for critical suspend hooks.
I am showing a pretty useless demonstration hook here, that will just put some informative lines into your log file:
#!/bin/bash case $1 in hibernate) echo "Hey guy, we are going to suspend to disk!" ;; suspend) echo "Oh, this time we are doing a suspend to RAM. Cool!" ;; thaw) echo "Oh, suspend to disk is over, we are resuming..." ;; resume) echo "Hey, the suspend to RAM seems to be over..." ;; *) echo "Somebody is calling me totally wrong." ;; esac
Put this into /etc/pm/sleep.d/66dummy
, do a chmod +x /etc/pm/sleep.d/66dummy
and it will spew some useless lines during suspend and resume.
仕組み
The concept is quite easy: the main script (pm-action
, called via symlinks as either pm-suspend
, pm-hibernate
or pm-suspend-hybrid
) executes so-called "hooks", executable scripts, in the alphabetical sorted order with the parameter suspend
(suspend to RAM) or hibernate
(suspend to disk).
Once all hooks are done, it puts the machine to sleep. After the machine has woken up again, all those hooks are executed in reverse order with the parameter resume
(resume from RAM) or thaw
(resume from disk).
The hooks perform various tasks, such as preparing the bootloader, stopping the Bluetooth subsystem, or unloading of critical modules.
Both pm-suspend
and pm-hibernate
are usually called from Udev, initiated by desktop applets like gnome-power-manager or kpowersave
.
There is also the possibility to set the machine into high-power and low-power mode, the command pm-powersave
is used with an additional parameter of true
or false
. It works basically the same as the suspend framework.
The hooks for suspend are placed in
/usr/lib/pm-utils/sleep.d
- distribution / package provided hooks
/etc/pm/sleep.d
- hooks added by the system administrator
The hooks for the power state are placed in
/usr/lib/pm-utils/power.d
- distribution / package provided hooks
/etc/pm/power.d
- hooks added by the system administrator
Hooks in /etc/pm/
take precedence over those in /usr/lib/pm-utils/
, so the system administrator can override the defaults provided by the distribution.
Pm-suspend の内部
This outlines the internal actions when pm-suspend
is run, describing how pm-utils
gracefully falls back onto the kernel method if the requirements of other methods are not met.
$ pm-suspend
The first step is set-up preliminary variables and source parent scripts:
export STASHNAME=pm-suspend export METHOD="$(echo ${0##*pm-} |tr - _)" . "/usr/lib/pm-utils/pm-functions"
The variable METHOD
is extracted from the executable name, suspend from pm-suspend
and hibernate from pm-hibernate
.
The location of runtime configuration parameters is defined in /usr/lib/pm-utils/pm-functions
as PM_UTILS_RUNDIR="/var/run/pm-utils" and STORAGEDIR="${PM_UTILS_RUNDIR}/${STASHNAME}/storage". Therefore STORAGEDIR="/var/run/pm-utils/pm-suspend/storage"; this is where pm-suspend
will cache its configuration. Disabled hooks are stored as plain text files with the hook name prefixed by "disable_hook:". Configuration parameters are appended to the parameters file:
$ ls -lah /var/run/pm-utils/pm-suspend/storage/
-rw-r--r-- 1 root root 20 May 19 09:57 disable_hook:99video -rw-r--r-- 1 root root 0 May 19 02:59 parameters -rw-r--r-- 1 root root 247 May 19 02:59 parameters.rm -rw-r--r-- 1 root root 9 May 19 02:59 state:cpu0_governor -rw-r--r-- 1 root root 9 May 19 02:59 state:cpu1_governor
Then pm-functions
will source the files located in /etc/pm/config.d/
in addition to /usr/lib/pm-utils/defaults
. Upon returning, pm-functions
will proceed to source the files specified by $SLEEP_METHOD as /usr/lib/pm-utils/module.d/$SLEEP_METHOD[...]
if they exist:
for mod in $SLEEP_MODULE; do mod="${PM_UTILS_LIBDIR}/module.d/${mod}" [ -f "$mod" ] || continue . "$mod" done
Otherwise, if $SLEEP_MODULE is empty, do_suspend()
will be set to the kernel backend as described above:
if [ -z "$SUSPEND_MODULE" ]; then if grep -q mem /sys/power/state; then SUSPEND_MODULE="kernel" do_suspend() { echo -n "mem" >/sys/power/state; } elif [ -c /dev/pmu ] && pm-pmu --check; then SUSPEND_MODULE="kernel" do_suspend() { pm-pmu --suspend; } elif grep -q standby /sys/power/state; then SUSPEND_MODULE="kernel" do_suspend() { echo -n "standby" >/sys/power/state; } fi fi
Assuming $SLEEP_MODULE is not empty and uswsusp
is specified, /usr/lib/pm-utils/module.d/uswsusp
is executed. This script checks several requirements (these are the requirements for being able to use uswsusp):
- [ -z $SUSPEND_MODULE ]
- command_exists s2ram
- grep -q mem /sys/power/state || ( [ -c /dev/pmu ] && pm-pmu --check; );
If these requirements are met, do_suspend() is defined as:
do_suspend() { uswsusp_get_quirks s2ram --force $OPTS }
Most importantly, the uswsusp
module runs:
add_before_hooks uswsusp_hooks add_module_help uswsusp_help
The first function, add_before_hook disables the pm-utils hooks 99video since this functionality is subsumed by s2ram. The second function, add_module_help, adds uswsusp-module-specific help, which in essence replaces the help function provided by 99video.
Back to pm-suspend
:
command_exists "check_$METHOD" && command_exists "do_$METHOD" "check_$METHOD"
This verifies that the check_suspend and do_suspend methods have been defined. The check_suspend method simply verifies that $SUSPEND_MODULE is not empty:
check_suspend() { [ -n "$SUSPEND_MODULE" ]; }
Lastly, pm-suspend
must run all hooks that have not been disabled, sync file-system buffers, and run do_suspend:
if run_hooks sleep "$ACTION $METHOD"; then # Sleep only if we know how and if a hook did not inhibit us. log "$(date): performing $METHOD" sync "do_$METHOD" || r=128 log "$(date): Awake."
The method run_hooks is a wrapper for _run_hooks, which the case of pm-suspend
is called as run_hooks sleep "suspend suspend". Given that:
PARAMETERS="${STORAGEDIR}/parameters" PM_UTILS_LIBDIR="/usr/lib/pm-utils" PM_UTILS_ETCDIR="/etc/pm"
The method _run_hooks, will for each hook in "${PM_UTILS_LIBDIR}/$1.d" and "${PM_UTILS_ETCDIR}/$1.d", check that sleep has not been inhibited and update the runtime parameters stored in $PARAMETERS before running each hook via run_hook $hook $2. In the case of Suspend-to-RAM, all the hooks in {/usr/lib/pm-utils/sleep.d/,/etc/pm/sleep.d/} will be enumerated, and run_hook will be passed the parameters $hook and "suspend suspend". The method run_hook uses the hook_ok function to verify that the hook has not been disabled before executing the hook with the "suspend suspend" parameters.
Tips and tricks
復帰時にハードディスクの電源管理レベルを自動的に設定
Do it like this:
/etc/pm/sleep.d/50-hdparm_pm
#!/bin/dash if [ -n "$1" ] && ([ "$1" = "resume" ] || [ "$1" = "thaw" ]); then hdparm -B 254 /dev/sda > /dev/null fi
Then run:
# chmod +x /etc/pm/sleep.d/50-hdparm_pm
If the above Bash script fails the work, the following may work instead:
/etc/pm/sleep.d/50-hdparm_pm
#!/bin/sh . "${PM_FUNCTIONS}" case "$1" in thaw|resume) sleep 6 hdparm -B 254 /dev/sda ;; *) ;; esac exit $NA
Lower -B
switch values may be effective. See hdparm.
マウスの再起動
On some laptops the mouse will hang after an otherwise successful suspend. One way to remedy this is to force a re-initialization of the PS/2 driver (here i8042
) through a hook in /etc/pm/hooks
(see hooks)
#!/bin/sh echo -n "i8042" > /sys/bus/platform/drivers/i8042/unbind echo -n "i8042" > /sys/bus/platform/drivers/i8042/bind
Openbox のメニューにスリープモードを追加
Openbox users can add the new scripts as additional shutdown options within the Openbox menu by adding the items to a new or existing sub-menu in ~/.config/openbox/menu.xml
, for example:
<menu id="64" label="Shutdown"> <item label="Lock"> <action name="Execute"> <execute>xscreensaver-command -lock</execute> </action> </item> <item label="Logout"> <action name="Exit"/> </item> <item label="Reboot"> <action name="Execute"> <execute>sudo shutdown -r now</execute> </action> </item> <item label="Poweroff"> <action name="Execute"> <execute>sudo shutdown -h now </execute> </action> </item> <item label="Hibernate"> <action name="Execute"> <execute>sudo pm-hibernate</execute> </action> </item> <item label="Suspend"> <action name="Execute"> <execute>sudo pm-suspend</execute> </action> </item> </menu>
"sleep" と "power" ボタンの処理
"Sleep" と "power" ボタンは acpid
の /etc/acpi/handler.sh
で処理されます ("button/power" と "power/sleep" エントリを見て下さい)。pm-suspend
や pm-hibernate
を呼び出すようにデフォルトのアクションを置き換えることができます。
systemd は独自に電源イベントを管理しており pm-utils や /etc/pm/*
のスクリプトは使わないので注意してください。
ハイバネートやサスペンド時にスクリーンセーバーをロック
You may wish to run a screen locking utility when the system suspends (so that a password is required after waking up). This can be done by adding a script to the /etc/pm/sleep.d
folder. Make sure the script is executable (chmod 755) and owned by root:root
.
A simple example script is:
/etc/pm/sleep.d/00screensaver-lock
#!/bin/sh # # 00screensaver-lock: lock workstation on hibernate or suspend username= # add username here; i.e.: username=foobar userhome=/home/$username export XAUTHORITY="$userhome/.Xauthority" export DISPLAY=":0" case "$1" in hibernate|suspend) su $username -c "/usr/bin/slimlock" & # or any other such as /usr/bin/xscreensaver-command -lock ;; thaw|resume) ;; *) exit $NA ;; esac
Replace /usr/bin/slimlock
with the path to your screen locking utility of choice.
If you do not wish to hard-code your username (e.g., if you have multiple users), then it is necessary to determine the current X11 username and display number. For systems using systemd, you can use xuserrun and the following sleep.d script (be sure to modify the path to xuserrun and your desired screen locker):
/etc/pm/sleep.d/00screensaver-lock
#!/bin/sh # # 00screensaver-lock: lock workstation on hibernate or suspend case "$1" in hibernate|suspend) /path/to/xuserrun /usr/bin/slimlock & # or any other such as /usr/bin/xscreensaver-command -lock ;; thaw|resume) ;; *) exit $NA ;; esac
If you have problems using xuserrun, you can instead try having loginctl do this directly. This script will lock all active sessions before going into hibernation:
/etc/pm/sleep.d/00screensaver-lock
#!/bin/sh # # 00screensaver-lock: lock workstation on hibernate or suspend case "$1" in hibernate|suspend) loginctl lock-sessions ;; thaw|resume) ;; *) exit $NA ;; esac
polkit でハイバネーションを無効化
ハイバネーションを無効化するには、/etc/polkit-1/
に 99-disable-hibernate.rules
という名前の新しいファイルを作成してください。そして、以下の内容を記述します:
99-disable-hibernate.rules
polkit.addRule(function(action, subject) { if ((action.id == "org.freedesktop.login1.hibernate")) { return polkit.Result.NO; } }); polkit.addRule(function(action, subject) { if ((action.id == "org.freedesktop.login1.hibernate-multiple-sessions")) { return polkit.Result.NO; } });
KDE を使っている場合、一度ログオフすればハイバネーションオプションが消えます。
トラブルシューティング
サスペンドやハイバネートが正しく動作しない場合、ログファイル /var/log/pm-suspend.log
に何らかの情報を見つけられる可能性があります。例えば、動作したフックやフックの出力などがログファイルで確認できます。
Also, check the output of the pm-is-supported
command. This command (with the --hibernate
or --suspend
flag) will do some sanity checking and report any errors it finds in your configuration. It will not detect all possible errors, but may still be useful.
セグメンテーション違反
セグメンテーション違反が発生してシステムが反応しなくなったりする場合、上で説明しているように /boot/grub/menu.lst
の resume-path に UUID を設定してみてください。
サスペンドから復帰する代わりに再起動する
この問題はサスペンド時に NVS 領域を保存するようになってから起こるようになりました (2.6.35-rc4) (メーリングリストの投稿)。しかしながら、全てのマシンでこの機構が動作するとは限らないと知れ渡ってから、カーネルの開発者は acpi_sleep=nonvs
カーネルコマンドラインオプションで無効化できるようにしています (カーネルパラメータを参照)。
サスペンドから復帰するとシャットダウンしてしまう
On an Acer Aspire AS3810TG, resuming from suspend shuts down the computer instead of waking it up. If you experience a similar issue, try passing the parameter i8042.reset=1
to your kernel. In GRUB, the line in /boot/grub/grub.cfg
should be something like this:
linux /vmlinuz-linux root=/dev/vg00/root resume=/dev/vg00/swap i8042.reset=1 ro
Although I have not tested this, you could also set this parameter live without having to restart by doing:
# sysctl -e -w i8042.reset=1
サスペンドから復帰したときに画面が表示されない
Some laptops (e.g. Dell Inspiron Mini 1018) will just show a black screen with no backlight after resuming from suspend. If this happens to you, try going into the BIOS of the laptop and disabling Intel SpeedStep if it is present.
You could also try, without disabling SpeedStep, creating a quirk in /etc/pm/sleep.d/
with this content (requires vbetool):
#!/bin/sh # case "$1" in suspend) ;; resume) sleep 5 vbetool dpms off vbetool dpms on ;; *) exit $NA ;; esac
save it as you want but with a 00
in front of the name so this is called last when resuming; remember to chmod +x
the script.
Try adjusting the sleep
time if the other commands are called too soon, or if it works well, you can also try removing that line.
Some other laptops (e.g. Toshiba Portégé R830) will just show a black screen with no backlight after resuming from suspend, with fans blowing at top speed. If this is what you're seeing, try going into the BIOS and disable the VT-d virtualization setting by switching to "VT-x only".
VirtualBox の問題
The VirtualBox kernel modules cause pm-suspend
and pm-hibernate
to fail on some laptops. (See this discussion). Instead of suspending or hibernating, the system freezes and indicator LEDs blink (the suspend indicator in the case of ThinkPads and the Caps Lock and Scroll Lock indicators in the case of the MSI Wind U100). The pm-suspend
and pm-hibernate
logs appear normal.
The problem can be fixed by removing the modules before suspension or hibernation and reloading them afterwards. That can be accomplished through a script:
#!/bin/sh rmmod vboxdrv pm-hibernate modprobe vboxdrv
スワップパーティションが存在しないのにハイバネート
有効なスワップパーティションが存在しないのにハイバネートしようとすると、ハイバネートが開始されるようにみえて、すぐに復帰してしまいます。たとえ、ログ出力を詳細にするように指定していても、スワップパーティションが存在しないことに関するエラーメッセージが全く表示されません。そのため、この問題をデバッグするのは大変です。スワップパーティションが何らかの理由で破損していて無効になっていると、インストール時にスワップパーティションを設定していてもこの問題が発生することがあります。ハイバネートですぐ復帰するようならば、使用しているスワップパーティションが本当に有効になっているか確認してください。blkid
コマンドの出力が以下のようになっている場合:
# blkid
/dev/sda1: UUID="00000-000-000-0000000" TYPE="ext2" /dev/sda2: UUID="00000-000-000-0000000" TYPE="ext4" /dev/sda3: UUID="00000-000-000-0000000" TYPE="ext4" /dev/sda4: UUID="00000-000-000-0000000" TYPE="swap"
タイプが "swap"
のパーティションがあれば大丈夫です。パーティションが存在しない場合、スワップ#スワップパーティションを見て、スワップパーティションを再作成・有効化してください。
サスペンドしようとしたときにカーソルしか表示されない黒画面になる
If you get a black screen with unblinking cursor when trying to do
$ sudo pm-suspend
have a look at /var/log/pm-suspend.log
and search for "ehci" or "xhci". Some of the names you could find may be "ehci_hd", "xhci_hd" or "ehci_hcd".
Then as root create the file /etc/pm/config.d/modules
and include this code with the exact name of the ehci or xhci module you found. For example:
SUSPEND_MODULES="ehci_hcd"
Suspend should now be working.
画面が表示されない問題
Some users have reported having issues with their laptops not resuming after a suspend or hibernate. This is due to the autodetect
hook in "HOOKS" array of the /etc/mkinitcpio.conf
file. This can be disabled using the same method for adding the resume
hook. Just remove autodetect
from the list and follow the steps to build the new image. See Resume Hook for more details on building the new image.
64ビットの OS で復帰できない
Certain motherboards/BIOS combinations (specifically known are some Zotac ITX boards, perhaps others) will not resume properly from suspend if any 64 bit operating system is installed. The solution is the enter your BIOS setup and Disable the "Memory Remapping Hole" in your DRAM configuration page. This will probably fix the suspend to RAM problem but will probably result in your OS not detecting all of your RAM.
radeon ドライバーでハイバネートから復帰した時に黒画面になる
When using the radeon driver and having radeon
in the HOOKS
array of the /etc/mkinitcpio.conf
resuming from hibernation results in the screen being black, however everything else working (testable by keeping a console open with a command to execute and starting the execution after resuming).
This seems to be related to using radeon.dpm=1
(default since kernel 3.13) as the power management method in radeon.
HOOKS 行から radeon
を削除 (そして initrd を再生成) することでこの問題は解決します ([2] を参照)。
ハイバネート時にコンピュータの電源が切れない
Linux をハイバネートしてディスクにデータが書き込まれた後、コンピュータの電源が正しく切れないことがあります。その場合、強制的に電源を切ってから再起動すると、復帰が正しく動作します。
/etc/pm/config.d/hibernate_mode
という名前の実行可能ファイルを作成して、次の行を記述することで修正できます: HIBERNATE_MODE="shutdown"
。その後 pm-hibernate でコンピュータが正しくシャットダウンされるようになります。
サスペンド後にディスプレイの電源が入らない (radeon)
radeon gpu でサスペンド後にディスプレイが表示されない場合、以下の内容で /etc/pm/config.d/radeon
を作成してみてください:
/etc/pm/config.d/radeon
QUIRK_S3_BIOS="true" QUIRK_S3_MODE="true"
参照
- OpenSUSE Wiki - The article from where this was originally sourced (Licensed under GPL)
- Understanding Suspend - Ubuntu article explaining how suspending to RAM works
- PM Debugging - Basic PM debugging
- Cpufrequtils - CPU 周波数スケーリングと CPU 電源スキーム
- Acpid - ACPI イベントを通知するデーモン
- Hibernate after sleep - An example of a custom pm-utils hook where hibernation is triggered after a period of time in suspension