Pm-utils

Jump to: navigation, search

◄設定

Susemini.png
Version:
10.3+
這裡的資訊是給 openSUSE 10.3 以及上以版本。關於 10.2 的版本,請參考 Pm-utils_10.2

pm-utils – 下一代休眠功能的基礎架構

pm-utils 是新的休眠功能與電源狀態的設定框架。它通常會使用 HAL 當中的設定值去處理驅動程式中需要進行的問題,以及處理還不知道要進入休眠的子系統。 在目錄中擴展一些自訂的搭載設定是很容易的事,這可以由系統管理員或套件中的一些掛載呼叫來做到。如果這個套件需要在系統休眠或電源轉換時需要特別的注意。

儘管 pm-utils 在未來將是可以在所有 Linux distribution 互相溝通的框架,但是仍然有一些 SUSE 專屬的功能與一些尚未來到官方系統的程式修補。我將會把一些像是 SUSE 的專屬功能加上標記。

基本功能 (或 "它是如何運作")

這是個簡單的概念: 以一個主要的 script (pm-action, 經由符號標記來呼叫 pm-suspendpm-hibernatepm-suspend-hybrid) 來執行我們所說的 "掛載呼叫",在字母的次序排列參數為 suspend (suspend to RAM) 或 hibernate (suspend to disk)。

一開始所有的掛載呼叫都能完成,讓機器進入了睡眠中。之後機器再次醒來了,所有的掛載呼叫開始進行反向傳遞參數 resume (從RAM喚醒) 或 thaw (從磁碟喚醒)。 注意 suspend-hybrid 目前只是預留的,它還不能夠完全的實現。這個掛載呼叫能做許多事情,例如幫你準備好 bootloader ,停止藍芽功能或卸載一些必要的模組。

pm-suspend 與 pm-hibernate 這兩個通常都被 HAL 所呼叫,然後才被像 gnome-power-manager 或 kpowersave 這般的桌面元件定義功能使用。

這裡還可以把機器設定成 high-power 與 low-power 模式,用指令 pm-powersave 使用增加參數 truefalse。它的運作方式基本上和休眠框架是一樣的。

休眠功能的掛載呼叫是放在

  • /usr/lib/pm-utils/sleep.d (distribution 的套件提供的掛載呼叫)
  • /etc/pm/sleep.d (系統管理者增加的掛載呼叫)

電源狀態的掛載呼叫是放在

  • /usr/lib/pm-utils/power.d (distribution 的套件提供的掛載呼叫)
  • /etc/pm/power.d (系統管理者增加的掛載呼叫)

/etc/pm/ 的掛載呼叫設定比在 /usr/lib/pm-utils/ 有更高的優先權,所以系統管理者可以不管原本 distribution 預設提供的東西。

設定

其主要的設定檔是 /usr/lib/pm-utils/defaults。你不應該去編輯這個檔案,自從套件昇級之後可能會覆蓋掉這個預設的檔案設定。應該把你的設定檔放在 /etc/pm/config.d/ 。 你可以放一個簡單的文字檔如下

SUSPEND_MODULES="button uhci_hcd"

檔案命名為 "modules" 或 "config" 放進 /etc/pm/config.d 這樣它將會取代系統原本的預設內容。

設定檔案中的變數名稱

在休眠之前會被卸載的模組

SUSPEND_MODULES="button" # 這就是在休眠之前會被卸載的模組

SUSE 特有的變數名稱

HIBERNATE_METHOD={userspace,kernel} # 選擇休眠於磁碟的方式,預設是 userspace 。
S2RAM_OPTS="" # 要傳給 s2ram 的參數項目。可以看看 s2ram 有更多的資訊。

問題排除

如果 suspend(休眠) 或 hibernate 不能正常運作, 你將會在 logfile 找到一些資訊 /var/log/pm-suspend.log,例如顯示出哪一個掛載呼叫的執行。

建立自己的功能鍵

如果你想要在 suspend / hibernate 做一些你自己特別的設定,你可以很簡單的把你的掛載呼叫檔案放在 /etc/pm/sleep.d。目錄中的掛載呼叫會在休眠時按照字母順序執行 (這就是為什麼這裡的檔名開始都有兩個數字,是為了讓過程更明確) 而且在喚醒時會在反過來執行。

我在這裡做一個完全沒有用處的展示掛載呼叫,它會把一些訊息列送到你的 logfile :

#!/bin/bash
case $1 in
    hibernate)
        echo "Hey guy, we are going to suspend to disk!"
        ;;
    suspend)
        echo "Oh, this time we're 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

把這個放進 /etc/pm/sleep.d/66dummy ,再執行 chmod +x /etc/pm/sleep.d/66dummy 這樣它就會在休眠或喚醒之後送那一些沒有用的訊息列進去了。

警告 所有的掛載呼叫都是以 root 身份執行的。這表示當暫存檔產生時就需要注意,確認您的 PATH 變數名稱的內容是否設定是正確的之類。要避免安全性問題。


各種提示與技巧 / FAQ

手動的觸發休眠功能

如果你要手動觸發休眠來除錯,不要使用 HAL 以及其他的框架,要以 root 的身份來呼叫 pm-suspendpm-hibernate

Attention: 這只有在用來除錯的時候是有用的,如果你知道你在做什麼,那這的確很好用。

s2ram 白名單的機器上使用休眠到 RAM 的功能

如果你想要強制休眠到RAM,你需要增加 -fS2RAM_OPTS-變數項目的設定檔是在 /etc/pm/config.d/,請參考 Configuration 。你還會需要增加其他的項目在變數內容之中。舉例可能是:

S2RAM_OPTS="-f -a 3"

把你的機器像報告描述到 s2ram 網頁中可能是個好主意,這樣你未來使用的作業系統就不需要改那麼多就能使用了。

關閉功能鍵

如果你不喜歡哪一個掛載呼叫功能,或者你覺得哪一個不好用或甚至是有害的,我們會很感謝你給我們錯誤報告。 你可以用任何方式很簡單的關閉某個掛載呼叫功能,你只要對映好 /usr/lib/pm-utils/sleep.d/ 之中的檔案名稱並且在 /etc/pm/sleep.d/ 之下建立相同的空白檔案即可。如果說你想要關閉 /usr/lib/pm-utils/sleep.d/45pcmcia ,你可以簡單的這麼做:

touch /etc/pm/sleep.d/45pcmcia

也不需要像原目錄之下的檔案給他執行權限。

重新啟動滑鼠

在某些看似成功的進行休眠之後,有些筆記型電腦的滑鼠會懸而不動。其中一種補救的辦法,就是強制重新定義 PS/2 驅動程式 (i8042),要透過 /etc/pm/hooks 這個掛載呼叫 (請參考hooks)

#!/bin/sh  
echo -n "i8042" > /sys/bus/platform/drivers/i8042/unbind
echo -n "i8042" > /sys/bus/platform/drivers/i8042/bind

--Esox81 20:30, 22 August 2007 (UTC)

它看起來沒有做任何事 / 記錄檔存在哪裡

如果它透過桌面應用程式執行休眠,看起來卻沒有做任何事情,那麼 試著從 root 的終端機手動呼叫 pm-suspendpm-hibernate 。或許你可以取得一些資料來指出你的問題。 休眠功能的 scripts 會將記錄寫在 /var/log/pm-suspend.log

翻譯註釋: hook 原意為「掛勾」,這裡我統一稱為「掛載呼叫」; suspend 原意「暫停」,此譯「休眠」