„Prawie” idealny Linux na ThinkPadzie
25.05.2016 | aktual.: 25.05.2016 20:43
Jako że w końcu udało mi się doprowadzić do (prawie) idealnej konfiguracji Linuxa pod moim ThinkPadem W530 chciałbym się pochwalić, jak do tego doszedłem, bo droga była kręta i wyboista :) Wymienione tricki powinny mieć także zastosowanie dla platform mobilnych od Ivy Bridge w górę. Jako, że korzystam z Ubuntu 16.04, opis będzie na jego podstawie, ale wszystkie wymienione czynności można bez problemu wykonać na innych dystrybucjach. Tak więc do dzieła :)
Kilka słów wstępu
Ogólnie od dłuższego czasu chciałem przenieść mojego laptopa na Linuxa (stacjonarka już chodzi na nim od lat), ale mój egzemplarz jakoś nie chciał się słuchać. Z zazdrością patrzyłem na wpisy ludzi, który twierdzili, że im wszystko działało out‑of-box. Ale, że Lenovo reklamuje swoją serię ThinkPadów jako stacje robocze dla profesjonalistów, postanowiłem się pobawić w pro‑usera i doszlifować wszystko na własną rękę. Po 3 dniach szukania po forach i wikipediach w końcu mi się udało :)
Zarządzanie energią
Tutaj chciałbym się skupić na rzeczy dla laptopów najważniejszej - energooszczędności. Jako, że siedzi tutaj i7 w wersji prawdziwie 4 rdzeniowej (a nie tylko 4 wątkowej) to trzeba go ostro trzymać w ryzach, żeby nie drenował baterii zbyt szybko. Dodatkowo jest tutaj także dodatkowa karta graficzna, w technologii Optimus. No ale cóż, damy radę :)
Flagi w GRUB
Niektórzy twierdzą, że to niepotrzebne, inni że potrzebne, a ja powiem jak to jest w praktyce. Otóż kiedyś wprowadzało się odpowiednie flagi dla sterownika i915, które włączały oszczędzanie energii dla kart graficznych Intela. Na Kernelu 4.4 jest to już zbędne, aczkolwiek nadal potrzebne są flagi, żeby uruchomić w 100% działające ACPI (przynajmniej na Ivy Bridge). Dodatkowo trzeba także wymusić agresywne zarządzanie energią dla szyn PCIe, ponieważ kodek dźwiękowy od Realteka to blokuje (we właściwościach kodeku jest napisane, że tego nie obsługuje. A obsługuje, jak się wymusi. To jak w końcu? :)) Do dzieła:
Musimy edytować plik konfiguracyjny GRUBa. Odpalamy konsolę i wpisujemy:
[code=Bash]sudo gedit /etc/default/grub[/code]
i w linijce GRUB_CMDLINE_LINUX_DEFAULT= dopisujemy flagi pcie_aspm=force acpi_osi='!Windows 2012' i acpi_osi=Linux. Całość ma wyglądać w ten sposób:
[code=Bash]GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pcie_aspm=force acpi_osi='!Windows 2012' acpi_osi=Linux"[/code]
Zapisujemy plik, wklepujemy komendę
[code=Bash]sudo update-grub[/code]
I restartujemy komputer. Właśnie poczyniliśmy pierwszy krok ku energooszczędności :)
Nvidia i Optimus
Teraz czas okiełznać wynalazek Nvidii i Intela. Ale najpierw mała dygresja, co to uprzedzić pytania. Jakie? Dlaczego nie użyłem Bumblebee. Otóż dlatego, że w najnowszym Ubuntu jest niewspierany, niewspierane są również najnowsze karty graficzne. Na dodatek od samego początku karty serii Quadro się jakoś z nim nie lubimy. Także pójdziemy na łatwiznę i załatwimy to łatwiej :)
Wchodzimy w Ustawienia Systemu - Oprogramowanie i aktualizację i w tym oknie wybieramy zakładkę "Dodatkowe sterowniki". Po wejściu wybieramy te co nas interesują. Całość ma wyglądać tak:
Klikamy "Zastosuj zmiany". Program zapyta nas o hasło administratora do uwierzytelnienia, następnie zainstaluje wszystko co potrzeba i to wszystko. Restartujemy komputer i uruchamiamy Nvidia X Server Settings. Przechodzimy do zakładki NVIDIA-PRIME i włączamy tryb karty Intela jak na obrazku:
Program poprosi nas o hasło do uwierzytelnienia, następnie musimy się wylogować i zalogować ponownie. Po tej czynności sprawdzamy, czy rzeczywiście nasza karta graficzna jest wyłączona. Odpalamy terminal i wpisujemy
[code=Bash]cat /proc/acpi/bbswitch[/code]
Jak wyświetli nam się:
[code=Bash]0000:01:00.0 OFF[/code]
To oznacza, że wszystko jest w porządku i karta Nvidii nie pobiera energii.
Jeżeli kiedykolwiek będzie potrzeba do użycia grafiki od zielonych, to wystarczy przełączyć kartę w ustawieniach i się przelogować. To samo należy zrobić, jak chce się korzystać z zewnętrznych monitorów. Fakt, rozwiązanie może mniej wygodne, więc jak często się korzysta z zewnętrznych wyświetlaczy i/lub operuje się głównie na zasilaniu AC, to można włączyć tryb "discreate only" w BIOSie, co wyłączy kartę Intela i pozostawi kartę Nvidii jako jedyną słuszną. Jednak nie wszystkie laptopy posiadają taką możliwość. Na razie jest to jedyne sensowne rozwiązanie, do czasu wydania nowego Bumblebee w wersji 4.0, które ma nam przynieść obsługę Optimusa na poziomie znanym z MS Windows. Czekamy :)
TLP i thermald
Najważniejsze rzeczy mamy za sobą, teraz warto zająć się konfiguracją zarządzania energią ogólnie. Polecam do tego TLP, ponieważ posiada bardzo prosty plik konfiguracyjny i przełącza tryb AC i BAT w czasie rzeczywistym. Raz się go skonfiguruje, potem mamy spokój :) To do dzieła!
TLP od czasu Ubuntu 15.10 znajduje się w oficjalnym repo. Tak więc nie pozostaje nic innego, jak w terminalu wpisać:
[code=Bash]sudo apt‑get install tlp tlp‑rdw acpi-call-dkms hdparm[/code]
Z czego pakiet acpi-call-dkms jest tylko dla użytkowników ThinkPadów. Umożliwia on ustawienie zakresu ładowania baterii i podaje szczegółowe informację o jej wykorzystaniu i eksploatacji.
Po instalacji zabieramy się za konfigurację. Wstukujemy:
[code=Bash] sudo gedit /etc/default/tlp [/code]
I mamy do dyspozycji plik konfiguracyjny. Nie będę opisywał wszystkiego (w sumie wszystko jest ładnie opisane :)) tylko skupię się, które linijki należy edytować, aby uzyskać jak najlepszy efekt. To po kolei:
Wiersze 35 i 36. Najpierw usuwamy znaki # i edytujemy je, żeby wyglądały w ten sposób:
CPU_SCALING_GOVERNOR_ON_AC=powersave CPU_SCALING_GOVERNOR_ON_BAT=powersave
Dlaczego wszędzie powersave? Ponieważ tutaj procesorem zarządza sterownik intel_pstate, który zajmuje się skalowaniem i powersave działa najlepiej, dostosowując idealnie moc procesora do obciążenia. Performance będzie zawsze trzymał 100% wydajności, co może być uciążliwe (większy pobór mocy, większy hałas etc.).
Wiersze od 41 do 44. Standardowo usuwamy znaki # i edytujemy je w ten sposób:
CPU_SCALING_MIN_FREQ_ON_AC=1200000 CPU_SCALING_MAX_FREQ_ON_AC=3800000 CPU_SCALING_MIN_FREQ_ON_BAT=1200000 CPU_SCALING_MAX_FREQ_ON_BAT=1200000
U mnie częstotliwość pracy procesora jest w zakresie (wraz z Turbo) 1,2 do 3,8 GHz i tak mam ustawione. Na baterii ustawiłem, żeby cały czas trzymał minimalną częstotliwość, dzięki temu jest energooszczędnie, ale każdy może sobie ustawić według własnych upodobań.
Wiersze od 50 do 53. Usuwamy # i edytujemy:
CPU_MIN_PERF_ON_AC=0 CPU_MAX_PERF_ON_AC=100 CPU_MIN_PERF_ON_BAT=0 CPU_MAX_PERF_ON_BAT=32
Tutaj ustawiamy na ile % procesor może być obciążony. Na Windows w trybie oszczędzania energii jest to ustawienie do 15%, ale wtedy zdarzają się przycięcia. Tutaj ustawienie 32% jest optymalne, bo responsywność będzie taka sama jak na kablu, a nie będzie za dużo mocy zużywanej.
Wiersze od 61 do 63. Usuwamy # i edytujemy:
CPU_BOOST_ON_AC=1 CPU_BOOST_ON_BAT=0
Tym ustawieniem "zabraniamy" procesorowi przechodzić w tryb Turbo na baterii. Chyba nic więcej dodawać nie muszę :)
Wiersze od 90 do 91. Wpisujemy:
DISK_APM_LEVEL_ON_AC="254 254" DISK_APM_LEVEL_ON_BAT="126 126"
Tutaj ustawiamy stopień oszczędzania energii przez dyski twarde. Ja u siebie mam dwie sztuki, ustawiamy kolejno dla sda sdb itp. 126 to jest optymalna wartość, która pozwala na wyłączenie dysku i zapewnia całkiem dobre transfery.
Wiersze od 98 do 99. Edytujemy:
DISK_SPINDOWN_TIMEOUT_ON_AC="128 128" DISK_SPINDOWN_TIMEOUT_ON_BAT="128 128"
Tutaj ustalamy po jakim czasiDISK_IOSCHED="cfq noop"e dysk twardy ma zostać zatrzymany. Wedle uznania, ja mam ustawione na ok. 10 minut bezczynności.
Wiersz 103:
DISK_IOSCHED="cfq noop"
Tutaj wybieramy zarządców I/O. CFQ ustawiamy dla dysku HDD, noop polecam dla SSD. Zapewni to energooszczędność i dobre transfery.
I na koniec w wierszu 201:
DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wwan"
Tutaj wybieramy, które urządzenia radiowe mają być wyłączone jak system startuje. Wedle uznania, ja z BT i modemu korzystam rzadko, więc są na starcie wyłączone :)
Zapisujemy plik i odpalamy TLP:
[code=Bash]sudo tlp-start[/code]
Możemy sprawdzić status poprzez komendę "sudo tlp‑stat". Pokaże, czy wszystko jest ustawione w porządku.
Dodatkowo komendą:
[code=Bash]sudo apt‑get install thermald[/code]
Instalujemy narzędzie, które będzie strzegło naszego laptopa przed przestrzeganiem :) Po instalacji restartujemy komputer i tym pozytywnym akcentem mamy zakończoną konfigurację zarządzania energią.
[H2] Bonusy i problemy [/H2]
Tutaj chciałbym zawrzeć kilka przydatnych narzędzi na codzień oraz opis pewnego problemu, który jest dość popularny. Zaczynamy.
Indykatory
Jeżeli chcemy na bieżąco wiedzieć, jaką kartę graficzną mamy zainstalowaną, polecam pakiet prime-indicator. Instalacja jest bardzo prosta i sprowadza się do wpisania kilku poleceń:
sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt-get update sudo apt-get install prime-indicator
Wylogowujemy i się i logujemy ponownie. Powinien w obszarze powiadomień pojawić się indykator z taką ikonką:
Po ikonce rozpoznamy, jaka jest karta graficzna dostępna :)
Dodatkowo warto doinstalować pakiet psensor:
sudo apt-get install psensor lm-sensors
W oknie programu zaznaczamy launch on session startup:
I gotowe. Po kliknięciu w jego ikonkę pojawi się nam coś takiego (screen wyjątkowo nie mój, jest od WebUp8, jakoś u mnie to menu nie chciało się dać sfotografować):
I tyle. W ten sposób możemy spokojnie monitorować swój stan sprzętu :)
PowerTOP
Scyzoryk szwajcarski, jeżeli chodzi o monitorowanie zużycia energii. Instalujemy go:
sudo apt-get install powertop
A następnie poleceniem sudo powertop odpalamy w terminalu:
Jak będziemy na baterii, to wtedy pokaże nam ile mocy jest pobierane oraz szacowany czas pracy na baterii. Wychodzimy z niego klikając "q" bądź zamykając terminal :)
"Pływający" wiatrak
Problem, który wielu ludzi wyprowadził z równowagi (mnie także). Czasami regulacja obrotów głupieje i wiatrak na zmianę się zatrzymuje, wchodzi na najwyższe obroty, potem zatrzymuje i tak w kółko. Irytujący niesamowicie hałas. Na szczęście da się temu zaradzić w prosty sposób, konfigurując wiatrak po naszemu. Do dzieła:
Instalujemy program thinkfan:
sudo apt-get install thinkfan
Następnie uruchamiamy go komendą sudo thinkfan -n. Wyrzuci błąd, ale chodzi o to żeby stworzył pliki konfiguracyjne. Następnie musimy je skonfigurować:
Edytujemy /etc/modprobe.d/thinkfan.conf
sudo gedit /etc/modprobe.d/thinkfan.conf
Wpisujemy options thinkpad_acpi fan_control=1 i zapisujemy.
Następnie:
sudo gedit /etc/default/thinkfan
Zmieniamy linijkę START na "yes" i zapisujemy.
Kolejny:
sudo gedit /etc/thinkfan.conf
I wpisujemy tutaj na samym końcu
tp_fan /proc/acpi/ibm/fan hwmon /sys/devices/virtual/hwmon/hwmon0/temp1_input hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp1_input (0, 0, 58) (1, 48, 65) (2, 60, 68) (3, 61, 69) (4, 62, 70) (5, 65, 72) (7, 66, 32767)
I zapisujemy. Plik skonfigurowany jest tak, że wiatrak włączy się dopiero, jak procesor przekroczy 58 stopni, następnie będzie stopniowo zwiększał (albo zmniejszał) prędkość. To jak szybko to będzie robił polecam pobawić się samemu :)
Wartości są przedstawione w ten sposób:
(1, 48, 65)
Już tłumacze o co chodzi.
Pierwsza cyfra od 0‑7 definiuje prędkość wentylatora. Druga liczba definiuję przy jakiej temperaturze można zejść na niższy poziom prędkości wentylatora. Trzecia liczba decyduje, przy jakieś temperaturze należy wejść na wyższy poziom prędkości wentylatora.
Jak widać, konfiguracja jest dość prosta i przejrzysta. Jak już ustawimy wszystko pod siebie to wpisujemy:
sudo systemctl enable thinkfan.service
I restartujemy komputer. Jak się zrebootuje wpisujemy:
sudo systemctl status thinkfan.service
To powinno pokazać się coś takiego:
thinkfan.service - simple and lightweight fan control program Loaded: loaded (/lib/systemd/system/thinkfan.service; enabled; vendor preset: Active: active (running) since śro 2016-05-25 13:21:28 CEST; 1h 15min ago Process: 5919 ExecStart=/usr/sbin/thinkfan (code=exited, status=0/SUCCESS) Main PID: 5921 (thinkfan) CGroup: /system.slice/thinkfan.service L¦5921 /usr/sbin/thinkfan maj 25 13:21:28 Falconix systemd[1]: Starting simple and lightweight fan control maj 25 13:21:28 Falconix thinkfan[5919]: thinkfan 0.9.1 starting... maj 25 13:21:28 Falconix thinkfan[5919]: WARNING: You're using simple temperatur maj 25 13:21:28 Falconix thinkfan[5919]: Daemon PID: 5921 maj 25 13:21:28 Falconix systemd[1]: Started simple and lightweight fan control
Co oznacza, że wszystko działa :) Ostrzeżenie ostrzega przed tym, żeby uważać na temperatury :)
I to wszystko. Od teraz wiatrak powinien chodzić tylko wtedy, kiedy będzie potrzebny.
Brak WiFi po uśpieniu
Także dość irytujący problem. Na szczęście rozwiązanie jest także szybkie.
Wpisujemy:
sudo touch /etc/pm/sleep.d/10_restart_network_manager sudo chmod +x /etc/pm/sleep.d/10_restart_network_manager sudo gedit /etc/pm/sleep.d/10_restart_network_manager
Wyskoczy nam edytor tekstu. Wpisujemy tam:
#!/bin/sh case $1 in resume|thaw) sudo /bin/systemctl restart network-manager.service ;; esac
I jeszcze jeden plik ;)
sudo touch /etc/pm/sleep.d/10_resume_wifi sudo chmod +x /etc/pm/sleep.d/10_resume_wifi sudo gedit /etc/pm/sleep.d/10_resume_wifi
I w edytorze:
#!/bin/sh case $1 in suspend|suspend_hybrid|hibernate) sudo nmcli n off ;; resume|thaw) sudo nmcli n on ;; esac
Zapisujemy i problem z głowy :)
Dekodowanie sprzętowe video i akceleracja w przegląrce
Aby to osiągnąć, należy zainstalować vdpau wraz z odpowiednim sterownikiem do obsługi karty Intela.
sudo apt-get install vdpau vdpau-va-driver libvdpau-va-gl1
Podsumowanie
Teraz nasz system jest sprawny i gotowy do pracy. Możemy się bawić zmianą wyglądu, pododawać indykatory itp. Jak widać, trochę zabawy jest (zwłaszcza, jak wiatrak płata figle), ale zapewniam - warto! Dzięki temu mamy na 5 lat spokój (potem przyjdzie aktualizacja dla LTSów i Bóg wie co się będzie działo :P). Na włączonym Vivaldim, 60% jasności + WiFi system zużywa od 12 do 15 W, co przekłada się (przy baterii 96 Wh) na 6h pracy, czyli całkiem nieźle :) Tak więc dlaczego prawie idealny? Ponieważ takie coś nie istnieje, dodatkowo mogą pojawić się jakieś mniejsze problemy wraz z aktualizacjami pakietów itp. :)
Tym co wytrwali do końca serdecznie gratuluję (zapewne było ciężko), jakby ktoś miał pytania, uwagi czy krytykę to zapraszam do komentowania :)
Na koniec screen mojego stanowiska pracy: