Dokumentacja programu TLP
Z ThinkPad-Wiki
Spis treści |
Grupa docelowa
Niniejsza instrukcja jest skierowana do programistów oraz osób tworzących pakiety, które chcą dostosować TLP i udostępnić go dla kolejnych dystrybucji Linuksa.
Jeśli chcesz tylko używać TLP, przejdź tutaj.
Wprowadzenie
TLP składa się – poza stronami podręcznika (manpages) i dokumentacją – wyłącznie ze skryptów powłoki zgodnych z POSIX (tzn. bez rozszerzeń Bash).
Pobieranie kodu źródłowego
Kod źródłowy TLP jest udostępniany na github.com. Źródła pobiera się poleceniem:
git clone git://github.com/linrunner/TLP.git git checkout 0.3.1 # bzw. aktuelle Version
Dziennik zmian (changelog) bieżącej wersji znajduje się tutaj.
Alternatywnie można pobrać źródła wersji wydań z TLP-PPA (tlp_VERSION.orig.tar.gz) – należy użyć wersji dla Lucid.
Tworzenie archiwum źródłowego
Przy tworzeniu archiwum źródłowego dla repozytoriów pakietów należy zadbać o to, aby zamiast TLP.git/ spakować katalog z numerem wersji w nazwie oraz pominąć katalogi debian/ i .git/:
ln -s TLP.git tlp-VERSION tar --exclude=debian --exclude=.git -cvz -f tlp-VERSION.tar.gz tlp-VERSION/
Składniki programu
Tabela 1 zawiera zawartość archiwum źródłowego tlp_VERSION.orig.tar.gz:
| Plik | Miejsce instalacji | Zastosowanie | |
|---|---|---|---|
| 49bay | /usr/lib/pm-utils/sleep.d/ | Skrypt do zapisywania i przywracania stanu przełączenia wnęki wymiennej (Ultrabay). Jest wywoływany przez pm-utils przed uśpieniem (suspend) lub hibernacją oraz po następującym po nich wznowieniu (resume). | |
| 49wwan | /usr/lib/pm-utils/sleep.d/ | Skrypt do zapisywania i przywracania stanu przełączenia WWAN. Jest wywoływany przez pm-utils przed uśpieniem (suspend) lub hibernacją oraz po następującym po nich wznowieniu (resume). | |
| default | /etc/default/ | Główny plik konfiguracyjny. | |
| tlp | /usr/sbin/ | Główny program TLP. | |
| tlp.desktop | /etc/xdg/autostart/ | Autostart po zalogowaniu użytkownika (obecnie bez funkcji). | |
| tlp-functions | /usr/lib/tlp-pm/ | Ogólna biblioteka funkcji. | |
| tlp-ifup | /etc/networking/if-up.d/ | Skript zum Setzen des WLAN-Power-Save-Modus:
Miejsce instalacji oraz sam skrypt muszą w razie potrzeby zostać dostosowane do danej dystrybucji. | |
| tlp.init | /etc/init.d/tlp | Skrypt startowy systemu (SysV) – wyłącza urządzenia radiowe i ustawia progi ładowania akumulatora. | |
| tlp-nop | /usr/lib/tlp-pm/ | Skrypt pusty – zwraca rc=0. | |
| tlp-rf | /usr/bin/bluetooth
| Główny program do przełączania urządzeń radiowych (3 twarde dowiązania do tego samego skryptu). | |
| tlp-rf-func | /usr/lib/tlp-pm/ | Biblioteka funkcji do przełączania urządzeń radiowych. | |
| tlp-run-on | /usr/bin/run-on-bat
| Warunkowe uruchamianie poleceń w zależności od aktywnego źródła zasilania (2 twarde dowiązania do tego samego skryptu). | |
| tlp-stat | /usr/bin/ | Raport o stanie wszystkich aktywnych ustawień. | |
| tlp.upstart | n/a | Skrypt startowy systemu dla Upstart (obecnie nieużywany). | |
| zztlp | /usr/lib/pm-utils/power.d/ | Skript zum Setzen aller Einstellungen in Abhängigkeit von der aktiven Stromquelle:
| |
man/bluetooth.1
| n/a | Strony podręcznika dla poleceń o tych samych nazwach. Instalacja zależy od dystrybucji, dlatego nie jest ujęta w pliku Makefile. | |
| Makefile | n/a | Instalacja wszystkich skryptów i pliku konfiguracyjnego w podanych miejscach instalacji. | |
| README | n/a | README do TLP. Miejsce instalacji zależy od dystrybucji, dlatego nie jest ujęte w pliku Makefile. | |
| COPYING | n/a | Informacje o prawach autorskich – licencja GPL v2. Miejsce instalacji zależy od dystrybucji, dlatego nie jest ujęte w pliku Makefile. Instalacja tego pliku w systemie docelowym (lub dołączenie go do szablonu specyficznego dla dystrybucji) służy zachowaniu zgodności z licencją. | |
| LICENSE | n/a | Informacje o autorze programu. |
Tabela 1 – Kod źródłowy
Metadane specyficzne dla Ubuntu i Debiana, wymienione w tabeli 2, mogą być przydatne jako wzór do tworzenia pakietów. Uzyskuje się je, nakładając łatkę na rozpakowane źródła za pomocą
zcat tlp_VERSION.diff.gz | patch -p1
| Plik | Zastosowanie |
|---|---|
| debian/control | Zawiera krótkie opisy TLP. |
| debian/changelog | Dziennik zmian (changelog) TLP. |
| debian/tlp.postinst | Skrypt, który należy wykonać po instalacji pakietu – zob. sekcja Skrypty instalacyjne. |
| debian/tlp.postrm | Skrypt, który należy wykonać po usunięciu pakietu – zob. sekcja Skrypty instalacyjne. |
Tabela 2 - Metadane dla Ubuntu/Debian
Zależności
TLP opiera się na następujących narzędziach, które powinny zostać dodane jako zależności przez utworzony pakiet:
pm-utils
(zawsze wymagane)
Udostępnia framework do wywoływania TLP przy każdej zmianie źródła zasilania.
Wskazówka: pm-utils oferuje za pomocą skryptów w katalogu /usr/lib/pm-utils/power.d/ różne funkcje oszczędzania energii, które zapewnia również TLP. Dlatego przy instalacji TLP skrypty pm-utils należy wyłączyć. Jak to zrobić, opisuje sekcja Skrypty instalacyjne.
on_ac_power
(zawsze wymagane)
on_ac_power to skrypt służący do sprawdzania, czy zasilacz jest podłączony. „Miejsce występowania” różni się w zależności od dystrybucji: w Debianie i pochodnych jest dostarczany z pakietem powermgmt-base, w Arch Linux jest zawarty w pm-utils.
hdparm
(zawsze wymagane)
Wymagane do funkcji oszczędzania energii (APM) dla dysków twardych oraz do wyświetlania danych w tlp-stat.
wireless-tools
(zawsze wymagane)
Wymagane do funkcji oszczędzania energii Wi-Fi (iwconfig) oraz do przełączania urządzeń radiowych (rfkill).
Wskazówka: rfkill jest w niektórych dystrybucjach dostępny jako osobny pakiet.
dmidecode
(zawsze wymagane)
Wymagane do rozpoznawania modeli ThinkPad i do wyświetlania informacji o systemie w tlp-stat.
ethtool
(opcjonalnie)
Wymagane do wyłączania Wake On LAN.
smartmontools
(opcjonalnie)
Umożliwia tlp-stat wyświetlanie wartości SMART dysków twardych (smartctl).
tp-smapi
(opcjonalnie w ThinkPadach)
Wymagane do ustawiania progów ładowania akumulatora w ThinkPadach. Są to moduły jądra, których implementacja, ze względu na zależność od wersji jądra, może się bardzo różnić w zależności od dystrybucji. Dlatego nie ma sensu wpisywać bezpośredniej zależności w pakiecie TLP.
Uruchamianie systemu
Podczas instalacji pakietu /etc/init.d/tlp musi zostać dołączony do runlevelów za pomocą metody przewidzianej w docelowej dystrybucji (w Suse np. przez chkconfig). Jeśli docelowa dystrybucja nie obsługuje skryptów SysV, należy zaimplementować własny skrypt, który przejmie odpowiednie funkcje z tlp.init.
Skrypty instalacyjne
Jak wspomniano w sekcji pm-utils, składniki pm-utils należy wyłączyć.
Odbywa się to w ten sposób, że dla każdego skryptu pm-utils z katalogu /usr/lib/pm-utils/power.d/ tworzy się w katalogu /etc/pm/power.d/ skrypt o identycznej nazwie, lecz bez funkcji. Dla uproszczenia ustawia się dowiązanie symboliczne do /usr/lib/tlp-pm/tlp-nop.
Ważne: Dowiązania należy po usunięciu pakietu TLP poprawnie usunąć.
Kod skryptu po instalacji pakietu
# Disable conflicting pm-utils hooks
for i in 95hdparm-apm disable_wol hal-cd-polling intel-audio-powersave laptop-mode \
journal-commit pcie_aspm sata_alpm sched-powersave wireless \
xfs_buffer; do
if [ -x /usr/lib/pm-utils/power.d/$i ]; then
ln -sf /usr/lib/tlp-pm/tlp-nop /etc/pm/power.d/$i
fi
done
Kod skryptu po usunięciu pakietu
# Remove pm-utils hook disablers
for i in 95hdparm-apm disable_wol hal-cd-polling intel-audio-powersave laptop-mode \
journal-commit pcie_aspm sata_alpm sched-powersave wireless \
xfs_buffer; do
if [ "$(readlink /etc/pm/power.d/$i)" = "/usr/lib/tlp-pm/tlp-nop" ]; then
rm /etc/pm/power.d/$i
fi
done
Test
Gotowy, zainstalowany pakiet najlepiej przetestować z włączonym trace:
TLP_DEBUG="run rf pm usb sysfs path"
Wykaz portów
Jak dotąd TLP został (oprócz Ubuntu / Debiana) spakowany dla następujących dystrybucji:
- Arch Linux (instrukcja instalacji w wiki) - status: zatwierdzony
- Gentoo (instrukcja instalacji w wiki) - status: zatwierdzony
- OpenSUSE – status: zatwierdzony
Dziennik zmian tej dokumentacji
- 13.06.2011 - uzupełniono dokumentację Git, lista portów
- 25.05.2011 - repozytorium Git
- 25.04.2011 - dodano zależności od dmidecode, hdparm, on_ac_power
- 20.04.2011 - wersja początkowa

