Jak naprawić błąd z migotaniem ekranu na Linuksie
Systemy operacyjne oparte na Linuksie mogą być wybawieniem w czasach, kiedy Microsoft mocno przegina, kończąc wsparcie dla Windowsa 10 i proponując w zamian Windowsa 11. Pełnego niedoróbek i niedziałającego na wielu urządzeniach przez sztucznie stawiane wymogi.
Jeśli ludzie mają przechodzić na nowy system, ważne jest jednak dobre pierwsze wrażenie. Każdy możliwy błąd – nawet jeśli nie wynika z winy Linuksa – może zostać uznany za dowód dziadostwa i zniechęcić do systemu.
Idealnym przykładem jest błąd, z którym sam się zetknąłem, polegający na nagłym migotaniu ekranu w losowych momentach.
Występuje na względnie nowych Linuksach i wynika z działań firmy Intel. Można go łatwo naprawić przez aktualizację jądra systemu albo wpisanie krótkiego fragmentu tekstu w odpowiednie miejsce.
O co chodzi? Już piszę.
Spis treści
Opis błędu
Korzystam sobie beztrosko z Linuksa na komputerze, jeżdżę kursorem po oknach, klikam w różne rzeczy. Nagle, na ułamek sekundy, ekran błyska bielą albo czernią. Potem obraz wraca.
Albo może chcę połączyć się z jakimś hotspotem? Zjeżdżam kursorem w stronę ikonki Wi-Fi w dolnym prawym rogu i rozwijam listę wykrytych punktów.
Jeśli mam pecha, to w tym momencie ekran zaczyna migać z dużo większą intensywnością, jak stroboskop. Odruchowo uciekam kursorem, migotanie w momencie ustaje.
Opisane dwa oblicza błędu – pojedyncze błyski albo ich gwałtowna seria – wydają się pojawiać w całkiem losowych momentach. Dekoncentrują i irytują, zaburzając spokojne sesje przy komputerze.
Problem pojawia się na paru nowych, polecanych i popularnych Linuksach, jak wspomniany już Mint (sprawdzałem warianty Mate i Cinnamon) czy Fedora w wariancie KDE Plasma. To niedobrze, bo jest spora szansa, że z błędem zderzy się niejedna osoba właśnie migrująca z Windowsa.
Diagnoza
Na początku nie miałem żadnych informacji poza tym, że coś mi migocze. Przeszukałem zatem anglojęzyczny internet pod kątem hasła linux screen flickering
(albo screen glitching
). W ten sposób trafiłem na różne dyskusje na forach.
Polecam spośród nich dwie: jedną z oficjalnego forum Minta i drugą z Launchpada. Poza rozwiązaniem problemu można tam znaleźć również genezę błędu:
- problem dotyczy komputerów z procesorami Intela;
- dokładniej rzecz biorąc, dotyczy zintegrowanej, wbudowanej w procesor karty graficznej;
- winny jest błąd w sterowniku od firmy Intel, i915, dodanym przez pracowników firmy do jądra Linuksa.
Jeśli mamy procesor Intela i zintegrowaną z nim kartę graficzną, to jest spora szansa, że to właśnie ona jest przyczyną błędu. Jeśli nie, zaś w komputerze tkwią np. tylko podzespoły od AMD czy nVidii – to obawiam się, że problem tkwi w czymś innym i nie będę w stanie pomóc. Reszta poradnika skupia się na tym intelowym błędzie.
Dodatkowy (konsolowy) sposób na zdiagnozowanie problemu
Błyskom, o których tu piszę, towarzyszy bardzo konkretny, zakulisowy błąd. Można sprawdzić, czy występuje w naszym przypadku. W tym celu trzeba uruchomić terminal/konsolę (np. klikając ikonkę z dolnego paska) i użyć następującego polecenia:
Dla osób całkiem niekonsolowych: trzeba to wkleić w konsolę, po czym nacisnąć Enter.
W konsoli wyświetli się dziennik błędów. Można go sobie przewijać myszą/touchpadem, wypatrując takiego komunikatu (wyróżniającego się czerwonym kolorem):
i915 0000:00:02.0: [drm] *ERROR* CPU pipe A FIFO underrun
Mikrociekawostka: w tym kontekście DRM to nie zabezpieczenia antypirackie, lecz Direct Rendering Manager, moduł od grafiki.
Czas wystąpienia błędu, widoczny na początku linijki, powinien się pokrywać z momentem wystąpienia błysków. Jeśli tak – to super, prawie na pewno mamy ten konkretny problem, o którym tu piszę. Stąd już tylko krok do rozwiązania
Intel nie przyniósł wprawdzie obiecanych miejsc pracy w hucznie zapowiadanej, wielkiej polskiej fabryce, bo niedawno wycofał się z projektu… Ale przynajmniej dał mi trochę (niepłatnej) roboty przy tym wpisie. Dzięki, Intelu, dobre i to
Rozwiązania
Zacznę od czegoś doraźnego. Jeśli zaczyna się dłuższa seria błysków, to powinno ją szybko zakończyć przesunięcie kursora w górę. Z jakiegoś subtelnego powodu błąd „trzyma się dołu ekranu”.
Oczywiście rozwiązaniem bym tego nie nazwał, bo choć jest to sposób na zredukowanie liczby błysków, to już pierwszy z nich wystarczy, żeby zirytować i wybić z rytmu. Istnieje natomiast parę sposobów na to, żeby wyłączyć je raz a dobrze.
Opis rozwiązań dostosowałem do systemu Linux Mint. Na innych rozwiązanie może być podobne (jeśli chodzi o konkretne rzeczy wklejane do konkretnych plików), ale nie mogę tego zagwarantować.
Sposób 1 – aktualizacja jądra systemu
Jeśli Linux jest już u nas zainstalowany na dysku, to najprostszym sposobem na naprawę błędu będzie aktualizacja jądra systemu, czyli jego centralnej części, odpowiedzialnej m.in. za sterowniki. W jego nowszych wersjach usterka jest już załatana.
To sposób łatwy i przyjemny, wymagający jedynie klikania myszą.
Poniżej dokładniej opisałem kroki dla systemu Linux Mint. W przypadku innych wariantów Linuksa można sobie poszukać w internecie pod hasłem <nazwa_linuksa> aktualizacja jądra
, też powinny wyskoczyć przystępne rozwiązania.
Jak zaktualizować jądro Minta
W przypadku Minta należy kliknąć w ikonkę systemu w dolnym lewym rogu, żeby wyświetlić listę wszystkich zainstalowanych programów, podzielonych na kategorie (jeśli zamiast nich pokaże się zakładka Ulubione
, to należy kliknąć Wszystkie programy
w górnym prawym rogu, żeby przełączyć tryb).
Następnie trzeba kliknąć kafelek Administracja
i wybrać program Menedżer aktualizacji
z rozwijanej listy. Tam pokaże się lista rzeczy, jakie można zaktualizować. Należy z niej wybrać jądro systemu, inne rzeczy można póki co odhaczyć.
Gdy aktualizacja zacznie się pobierać, to można sobie zrobić kawę, bo może chwilę potrwać. Po jej zakończeniu należy uruchomić ponownie komputer.
Sposób 2 – zmiana parametru programu GRUB
Jeśli mamy zainstalowanego Linuksa, ale z jakiegoś powodu nie możemy albo nie chcemy aktualizować jądra, to można ręcznie dodać jedną konkretną opcję w ustawieniach programu GRUB (Great Unified Bootloader, gdzie bootloader można rozumieć jako uruchamiacza; to on ładuje system podczas uruchamiania).
I tutaj robi się ciekawie. O ile znalezione przeze mnie rozwiązania opierają się ogólnie na tym samym – wklejeniu tekstu w odpowiednie miejsce – o tyle są różne propozycje co do samego tekstu.
Najpewniejsze i najmniej problematyczne wydaje mi się użycie takiego. Można je sobie skopiować:
intel_iommu=igfx_off
Miałem okazję osobiście przetestować to ustawienie, działało sprawnie i bez efektów ubocznych. Niektórzy piszą, że po jego włączeniu nieco gorzej działają maszyny wirtualne, takie jak VirtualBox… Ale większość osób i tak z nich nie korzysta i nie powinny odczuć negatywów.
Alternatywna opcja
W tym miejscu podam też inne opcje, które zadziałały u komentujących. Gdyby ktoś się na nie zdecydował, to we wszystkich miejscach, gdzie wklejam intel_iommu=igfx_off
, należy zamiast tego wkleić poniższy tekst:
i915.enable_dc=0 intel_idle.max_cstate=2
Jeśli zdecydujesz się użyć tego zestawu parametrów, to zachęcam do skopiowania ich stąd, a nie ręcznego przepisywania – jest tu trochę niuansów ze spacjami, kropkami i podkreślnikami, które łatwo przegapić na oko.
Skopiowany tekst należy teraz wkleić do pliku konfiguracyjnego GRUB-a. To plik systemowy, więc zmiana jego treści wymaga uprawnień administratora. Poniżej dwa sposoby na otwarcie go w trybie uprzywilejowanym:
-
Zwykła klikanina
Można otworzyć „Eksploratora” (przeglądarkę plików) i kliknąć w kolumnie po lewej stronie
System plików
, żeby wejść do głównego folderu systemowego. W nim należy kliknąć folderetc
.
Wewnątrz niego należy kliknąć folderdefault
prawym przyciskiem myszy (ważne!), wybrać opcjęOtwórz jako administrator
i zaakceptować ostrzeżenie.
Na koniec należy kliknąć zawarty w tym folderze plik tekstowygrub
(nie folder grub.d). -
Sposób konsolowy
Można też uruchomić konsolę i wpisać w nią:
sudo xdg-open /etc/default/grub
Polecenie
xdg-open
powinno otworzyć plik w domyślnym programie do edycji tekstu; może jednak nie działać na niektórych Linuksach. Po wykoniu komendy system poprosi o podanie hasła.
Niezależnie od wybranego sposobu, skończy się otwarciem pliku GRUB-a w edytorze tekstu. Na Mincie u góry będzie groźna poprzeczka z napisem Elevated Privileges
na czerwonym tle. Znak, że mamy uprawnienia admina. I zachęta, żeby zachować czujność i nie zmieniać byle czego.
W pliku należy wypatrzyć wzrokiem linijkę zaczynającą się od GRUB_CMDLINE_LINUX_DEFAULT
i dokleić do niej skopiowane wcześniej ustawienie (pamiętając, żeby było oddzielone spacjami od treści innych ustawień; nie należy też ruszać cudzysłowów podwójnych!).
Tak wyglądała u mnie zmieniona linijka po wklejeniu tekstu:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=igfx_off"
Uwaga dla urządzeń mobilnych: tekst wyżej może nie mieścić się w polu na szerokość. W razie czego można przewijać je w poziomie.
Po zmianie tekstu należy zapisać plik (Ctrl+S
). Następnie trzeba otworzyć konsolę (można ikoną z dolnego paska, nie trzeba w konkretnym folderze) i użyć w niej komendy:
Jak to przy sudo – zapewne poprosi o podanie hasła.
Ustawienie zostanie zapamiętane i powinno być od teraz ładowane przy każdym uruchomieniu komputera. Należy go teraz wyłączyć i włączyć ponownie i zobaczyć, czy migotanie ustało.
Sposób 3 (dla trybu live USB)
A co, jeśli ktoś nie ma Linuksa zainstalowanego na dysku, tylko uruchamia go z pendrive’a, w tzw. trybie live? Być może w celu przetestowania go przed instalacją? Fajnie by było się jak najszybciej upewnić, że nie będzie się skazanym na migotanie.
W tym wypadku edycja plików GRUB-a z poprzedniego punktu nic by nie dała, nie dałaby nic. Sesja live jest ulotna, a po wyłączeniu komputera ustawienia z plików zostaną wyczyszczone.
Ale nie wszystko stracone. Te same wartości można ustawiać również przed załadowaniem systemu. Kiedy podczas jego uruchamiania wyświetli się czarno-białe okno GRUB-a, trzeba:
- nacisnąć klawisz
E
, -
po pojawieniu się menu z opcjami uruchamiania poszukać wzrokiem tekstu
quiet splash
i dopisać w tej linijce nasze ustawienie ratujące sytuację.quiet splash intel_iommu=igfx_off --Tym razem trzeba wpisać to ręcznie, więc warto zwracać szczególną uwagę na literówki oraz na to, czy ustawienie jest oddzielone spacjami od tych po bokach.
- nacisnąć
F10
, żeby kontynuować uruchamianie z nowymi opcjami.
Jak sprawdzić, czy zadziałało
Najprostszym, intuicyjnym sposobem wydaje mi się celowe i wielokrotne zajrzenie w miejsce, gdzie błąd lubi się pojawiać.
W przypadku Minta jest to wspomniana lista hotspotów, o ile wokół nas jest ich wiele.
Klikamy ikonę połączenia w dolnym rogu i najeżdżamy kursorem na opcję Dostępne sieci
, żeby lista się rozwinęła. Odsuwamy kursor, żeby się schowała. I tak kilkanaście razy (im więcej, tym większa pewność). Jeśli nic nie mignie, to jest spora szansa, że błąd został zażegnany.
Słowo na koniec
Opisany tutaj błąd jest niestety z gatunku tych najgorszych – jest regresją, czyli zmianą na gorsze pojawiającą się po aktualizacji do nowej (teoretycznie lepszej) wersji.
Poza tym jest wyjątkowo widoczny i irytujący. Sprawia, że Linux wypada niekorzystnie. A że to ludzie z Intela odpowiadali za zmiany? Raczej mało kto się o tym dowie.
W podobny sposób Linuksowi (i szerszemu ruchowi otwartego oprogramowania) już nieraz niesłusznie się dostawało za cudze przewinienia. Bo niektórzy intuicyjnie wypatrują winnych tam, gdzie coś jest darmowe.
Nie będę udawał, że Linux to system, który każdemu podpasuje. Nie mam też zamiaru ukrywać, że występują w nim czasem błędy. Chętnie wychodzę im naprzeciw, tak jak w tym poradniku.
Ale jeśli miałbym poprosić o coś w zamian, to byłoby to porzucenie u siebie (albo zwalczanie u innych) mentalności „darmowe = złe”. Dojrzenie niuansów. Tylko w ten sposób alternatywy mogą się przebić i podkopać pozycję monopolistów