Fedoraのサスペンドとハイバネート - 現時点でのまとめ

前出の記事

その後、細かな調整を繰り返していたが、一応の目処が付いたのでメモしておく。

  1. /etc/pm/config.d/tksSuspend.cfg
    #!/bin/bash
    #For VOSTRO1400
    
    DISPLAY_QUIRK_VBE_POST="true"
    DISPLAY_QUIRK_VBESTATE_RESTORE="true"
    DISPLAY_QUIRK_VGA_MODE_3="true"
    
    exportする必要はなかった。

  2. /etc/pm/sleep.d/64hda_intel
    #!/bin/bash
    
    . /usr/lib/pm-utils/functions
    
    case "$1" in
    	hibernate|suspend)
    		;;
    	thaw|resume)
    		/sbin/modprobe -r snd_hda_intel
    		/sbin/modprobe snd_hda_intel
    		;;
    	*)
    		;;
    esac
    
    exit $?
    
    復帰後、音がならなくなることへの対処。64の部分は65より小さければ他の数字でも良いと思う。環境に応じてpulseaudioなどを止める必要がある。

  3. /etc/pm/sleep.d/94tkscpufreq
    #!/bin/bash
    
    . /usr/lib/pm-utils/functions
    
    hibernate_cpufreq()
    {
    	[ -d /sys/devices/system/cpu/ ] || return 0
    	pushd /sys/devices/system/cpu/ >/dev/null 2>&1
    	[ -d cpu0/cpufreq ] || return 0
    	[ -f cpu0/cpufreq/scaling_governor ] || return 0
    
    	savestate cpu_governor $(cat cpu0/cpufreq/scaling_governor)
    	sh -c "echo performance > cpu0/cpufreq/scaling_governor" >/dev/null 2>&1
    	popd >/dev/null 2>&1
    }
    
    thaw_cpufreq()
    {
    	gov=$(restorestate $(echo cpu_governor))
    	[ -z "$gov" ] && break
    
    	sh -c "echo \"$gov\" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" >/dev/null 2>&1
    	unset gov
    }
    
    case "$1" in
    	suspend|hibernate)
    		hibernate_cpufreq
    		;;
    	resume|thaw)
    		thaw_cpufreq
    		;;
    	*)
    		;;
    esac
    
    exit $?
    
    復帰後CPU使用率が100%になることへの対処。代わりに
    # []chmod a-x /usr/lib/pm-utils/sleep.d/94cpureq[]
    
    しておく。原因はCore 2 Duoの片方のCPUのgovernorを変更するともう一方も変更される事が考慮されていなかったため。*1ちなみにファイル名を/etc/pm/sleep.d/94cpufreqにしておくと、なんと二回実行されてしまう。

  4. /etc/pm/sleep.d/96acpi_cpufreq
    #!/bin/bash
    
    . /usr/lib/pm-utils/functions
    
    case "$1" in
    	resume)
    		/sbin/modprobe -r acpi_cpufreq
    		/sbin/modprobe acpi_cpufreq
    		;;
    	*)
    		;;
    esac
    
    exit $?
    
    サスペンドから復帰後、二個目のCPUがno or unknown cpufreq driver is active on this CPUになってしまう事への対処。

忘れずに実行属性を付けておく。


# []chmod a+x /etc/pm/sleep.d/64hda_intel[]
# []chmod a+x /etc/pm/sleep.d/94tkscpufreq[]
# []chmod a+x /etc/pm/sleep.d/96acpi_cpufreq[]

*1:追記:よく見るとcpu1/cpufreqがcpu0/cpufreqへのシンボリックリンクになっている!launchpadに立てられたバグ