• 2

MacBook Pro更換SSD固態硬碟後睡眠模式自動切換或電量不足時關機

2012/03/19修正:後來在網路上有看到使用AppleScript來關閉系統會比用HALT好,因為AppleScript會等待GUI程式儲存已開啟的內容,而HALT是讓COMMAND LINE程式進行關閉。所以我修改了後段的文章了。還有,<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">為一整行指令,請勿分段。可能因為版面顯示的關係,它被分段了。另外,再增加移除指令的方法。

個人於2011年底把原本使用的MacBook Pro 15(2011 Early)原廠內建的硬碟更換為美光M4固態硬碟後,真得感覺回不去傳統硬碟了!!!

但凡事都有一體兩面,固態硬碟也不例外。它的優點有著存取速度數倍於傳統硬碟,安靜及不怕震動;缺點,也是最大的缺點,以目前的科技,它的壽命會隨著寫入資料的頻率增多,可能掛點的時間就愈快來臨。

拜目前DRAM價格便宜之賜,新一點的機子可以花個1、2千元把記憶體加至8GB,甚至第2代的iCore機型還可以加至16GB,但是伴隨而來的是機器進入睡眠時,會寫入一個8GB或16GB的睡眠檔案,如果一天工作下來睡眠個幾次,那不就很快把寫入的quota用完了?

事實上,在OS X可以設定數種不同的睡眠模式

MODE 0: 睡眠時,僅供電給記憶體,也就是SUSPEND TO RAM。優點是睡眠速度快且可以很快速的回復,缺點是若待機到完全沒電時RAM裡的資料也就隨之消失了,下次開機時就等同於重新啟動OS X。

MODE 1: 睡眠時,把記憶體內容寫入至睡眠檔案後斷電。優點是睡眠時完全不耗電(因為斷電了...),缺點是進入睡眠及回復時間皆較久。

MODE 25: 作用似乎與MODE 1相同,但OS X 10.7使用此模式而不使用MODE 1。從man說明裡看不出這兩個不同的地方在那...

MODE 3: 睡眠時,先把記憶體內容寫入至睡眠檔案,再進入SUSPEND TO RAM。優點是可以很快速的回復,且待機到完全沒電時,下次開機時OS X會從睡眠檔案回復。缺點是進入睡眠時間會稍慢,因為要寫入與記憶體容量同樣大小的睡眠檔案。此項目為新的MacBook Pro的預設值。

所以MODE 3是混合了MODE 0與MODE 1的優點,但是如同之前說的,每次睡眠都要寫入一個睡眠檔,寫入quota就會很快速的減少。

這篇文章的目地就是要跟大家分享,如何在不同的電池剩餘時間下,使用不同的睡眠模式。
舉例來說,當電池剩餘容量在介於15%至100%時,使用MODE 0;少於10%時則使用MODE 3。
這樣一來不就可以享受快速睡眠及回復的好處,而且僅在必要時寫入睡眠檔案了嗎?

要達成睡眠模式自動切換,有2種方式可選擇:

1. 從APP STORE花USD 3.99購買SmartSleep。
2. 使用本文章的教學步驟,參考來源為http://tidbits.com/article/9115。步驟中使用了vi及sudo等指令,進行修改前建議對指令有些基本瞭解。

免責聲明:教學內容為個人經驗,請在有把握的狀況下進行修改,若修改壞了責任請自負哦~~~

修改步驟如下:

1. 開啟終端機。
2. 輸入sudo visudo
3. 找到# User privilege specification,並在該段最末處加入以下文字後存檔離開。
ALL ALL=(ALL) NOPASSWD: /usr/bin/pmset -a hibernatemode 3
ALL ALL=(ALL) NOPASSWD: /usr/bin/pmset -a hibernatemode 0
4. 輸入sudo vi /usr/bin/pmc.sh
5. 編輯pmc.sh內容如下。完成後存檔離開。其中$LEFT -lt後接的數字指的是電池容量少於該數字%時切換至MODE 3;$LEFT -gt 後的數字%則是電池容量大於時,切換至MODE 0。
MODE=`/usr/bin/pmset -g | awk '/hibernatemode/ { print $2 }'`
LEFT=`/usr/bin/pmset -g batt | grep Internal | awk '{ print $2 }' | awk -F % '{ print $1 }'`

if [ $LEFT -lt 10 ] && [ $MODE != 3 ] ; then {
sudo /usr/bin/pmset -a hibernatemode 3
}
elif [ $LEFT -gt 15 ] && [ $MODE != 0 ] ; then {
sudo /usr/bin/pmset -a hibernatemode 0
}
fi
6. 輸入sudo chmod a+x /usr/bin/pmc.sh
7. 輸入sudo vi /library/launchdaemons/app.pmc.plist
8. 編輯app.pmc.plist內容如下。完成後存檔離開。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>label</key>
<string>app.pmc</string>

<key>ProgramArguments</key>
<array>
<string>/usr/bin/pmc.sh</string>
</array>

<key>StartInterval</key>
<integer>180</integer>

<key>KeepAlive</key>
<true/>

<key>RunAtLoad</key>
<true/>
</dict>
</plist>
9. 輸入sudo launchctl load /library/launchdaemons/app.pmc.plist
10. 輸入exit結束終端機。

若要移除指令,步驟如下:
1. 開啟終端機
2. 輸入sudo launchctl unload /library/launchdaemons/app.pmc.plist
3. 輸入sudo rm /library/launchdaemons/app.pmc.plist
4. 輸入sudo rm /usr/bin/pmc.sh
5. 輸入exit結束終端機。

事實上,這個設定對使用傳統硬碟也很有幫助,因為傳統硬碟寫入慢,改成MODE 0就同樣可以享受快速的睡眠及回復。

更甚至,在OS X 10.7 LION增加了一個關機時的功能:登入後重新打開視窗,有了這個功能及固態硬碟的存取速度,睡眠的功能好似也不是完全需要了,只要設定電池容量少於5%(或更低)時進行關機,反正下次開機時,最後開啟的視窗又都回來了,而且可以少一個吃固態硬碟空間的睡眠檔案:

1. 開啟終端機
2. 輸入sudo /usr/bin/pmset -a hibernatemode 0
3. 輸入sudo rm /var/vm/sleepimage
4. 輸入sudo vi /usr/bin/pmh.sh
5. 編輯pmh.sh內容如下。完成後存檔離開。其中$LEFT -lt後接的數字指的是電池容量少於該數字%時進行關機。
MODE=`/usr/bin/pmset -g batt | grep Currently | awk '{print $4}'`
LEFT=`/usr/bin/pmset -g batt | grep Internal | awk '{ print $2 }' | awk -F % '{ print $1 }'`

if [ $LEFT -lt 5 ] && [ $MODE = "'Battery" ] ; then
{
osascript -e 'tell application "Finder" to shut down'
}
fi
6. 輸入sudo chmod a+x /usr/bin/pmh.sh
7. 輸入sudo vi /library/launchdaemons/app.pmh.plist
8. 編輯app.pmh.plist內容如下。完成後存檔離開。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

<key>label</key>
<string>app.pmh</string>

<key>ProgramArguments</key>
<array>
<string>/usr/bin/pmh.sh</string>
</array>

<key>StartInterval</key>
<integer>180</integer>

<key>KeepAlive</key>
<true/>

<key>RunAtLoad</key>
<true/>
</dict>
</plist>
9. 輸入sudo launchctl load /library/launchdaemons/app.pmh.plist
10. 輸入exit結束終端機。

若要移除指令,步驟如下:
1. 開啟終端機
2. 輸入sudo launchctl unload /library/launchdaemons/app.pmh.plist
3. 輸入sudo rm /library/launchdaemons/app.pmh.plist
4. 輸入sudo rm /usr/bin/pmh.sh
5. 輸入exit結束終端機。

注意:睡眠模式自動切換與電量不足時關機這兩種模式,請擇一使用,不可以兩個都使用。至於那一個好就看個人的使用習慣囉。
2012-03-18 18:45 發佈
感謝分享, 我將這篇收藏起來並為樓主加五分.
真專業~加分先
感覺終端機無所不能啊!
很好奇大大的「終端機」知識
是如何充實的?
charliejan wrote:
個人於2011年底把...(恕刪)
TO 無敵國 & DAVYN:謝謝加分,希望文章內容能對您們有幫助。

至於學習終端機,因為更早以前的電腦是沒有像現代的電腦有著包裝過的圖形使用者介面(GUI),要執行任何的程式都是在像終端機的畫面下,key in正確的程式名稱來執行工作。個人因為父親的關係接觸個人電腦的早,所以是從仿APPLE II開始玩到IBM的MS-DOS。只是現在新的電腦不再強調終端機,而是用圖形使用者介面讓一般的使用者也能開心且順利完成該完成的工作,漸漸的大家都不再熟悉這一塊的技巧了。

OSX的核心是Unix,所以DAYVN您想要學習如何在終端機下指令的話,可以從google"unix 指令"開始囉。

charliejan wrote:
個人於2011年底把...(恕刪)


雖然我現在可能還用不到,先收下,
感謝大大的分享!
我在方法二碰到一個問題, 我所有的程序都按版大做完後, 在launchctl指令發出後出現以下
回應:

launchctl: no plist was returned for: /library/launchdaemons/app.pmh.plist
launchctl: no plist was returned for: /library/launchdaemons/app.pmh.plist
nothing found to load

app.pmh.plist已按版大的建議編輯存檔了.

請問這個問題要如何解決?

小弟剛試了, 發現樓主有兩個小錯誤

1. 路徑大小寫需注意:
1) library => Library
2) launchdaemons => LaunchDaemons

2. 在編輯app.pmc.plist時, 在最底下請再加上 </plist>, 不然就會發生像6樓的問題


感謝樓主分享這個好用的script, 已加分並收藏..
朋友的目的是認識自己, 放下尊嚴, 不要計較, 知足得自在.

kenny.chih wrote:
小弟剛試了, 發現樓...(恕刪)


感謝Kenny大大的搭救, 加上</plist>之後果然沒問題了.

kenny.chih wrote:
小弟剛試了, 發現樓...(恕刪)


Hi Kenny, 感謝您的指正,確實是我漏了</plist>,我會再修正我的文章。
不過很奇怪的是在我的OS X上,並沒有發生錯誤。
此外,大小寫的問題在我的OS X也不存在,不知道是否Kenny您的硬碟格式為"區分大小寫"呢?
那就奇怪囉?! 在unix/linux下都有大小寫的限制.

我的HD是 Mac OS充格式(日誌式).




charliejan wrote:
Hi Kenny, ...(恕刪)
朋友的目的是認識自己, 放下尊嚴, 不要計較, 知足得自在.
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?