Mam w domu telewizor Samsung UE60J6240 z 2015 roku. Matryca jest nadal akceptowalna, ale oprogramowanie zestarzało się dużo szybciej niż sprzęt: menu reaguje z opóźnieniem, w interfejsie pojawiają się reklamy, a po podłączeniu do sieci urządzenie wysyła telemetrię na serwery producenta. Dostaję na niego obraz z zewnętrznego odtwarzacza i z komputera przez HDMI – i tylko tego od niego potrzebuję. Postanowiłem sprowadzić go z powrotem do tej jednej roli.
Fabryczny system, nie własny
Kuszące jest wgranie na taki sprzęt własnego Linuksa i myślę o tym na kiedyś – ale nie na tym telewizorze i nie teraz. Fabryczny system, mimo wad, poprawnie obsługuje panel, podświetlenie, tor dźwięku, pilota i tryb niskiego opóźnienia dla konsoli czy komputera. Odtworzenie tego od zera na nieudokumentowanym sprzęcie niesie realne ryzyko, że obraz w ogóle nie ruszy. Dlatego tutaj wybrałem drogę prostszą i pewniejszą: zostać na fabrycznym systemie i tylko go odchudzić.
Zdobyłem na telewizorze uprawnienia roota. Szczegółów nie zdradzam – powiem tylko tyle, że tam, gdzie Claude i Codex odmawiały, z pomocą przyszły chińskie narzędzia AI. Od tego momentu problem nie brzmiał już „jak się dostać do środka”, tylko „jak sprawić, żeby moje zmiany przetrwały restart”.
Zmiana, która musi przetrwać restart
Główny system telewizora jest zamontowany tylko do odczytu – nie da się w nim niczego trwale zmienić, i dobrze. Zapisywać mogę tylko w jednym katalogu, który restart przeżywa. Każdą zmianę – wyłączone usługi, reguły sieci, wygląd menu – zapisuję więc nie w samym systemie, ale w skrypcie startowym, który leży w tym katalogu i odtwarza wszystko przy każdym uruchomieniu. System zostaje nietknięty; jeśli coś pójdzie źle, usunięcie jednego pliku przywraca telewizor do stanu fabrycznego.
Przy okazji poznałem pułapkę starego systemu inicjującego: po podłożeniu własnej usługi trzeba wymusić przeładowanie konfiguracji, zanim się ją uruchomi – inaczej system jej po prostu nie widzi i kończy się to cichym błędem.
Zmiany zyja w jednym skrypcie startowym, odtwarzanym przy kazdym bootcie
# system TV jest tylko do odczytu; zapisywalny jest jeden katalog, wiec moje
$ cat /opt/etc/boot-hook.sh
# - maski zbednych uslug (sklep, panele smart huba, mirroring)
# - reguly sieci: tylko LAN, bez bezposredniego wyjscia w internet
# - podmieniony motyw menu przez bind mount (system pozostaje nietkniety)
# wolna pamiec na moim egzemplarzu (odtworzone z notatek, nie benchmark):
# fabrycznie, po zimnym starcie ~195 MiB
# po debloacie, ten sam kontekst ~312 MiBMniej systemu, mniej sieci
Odchudzanie to nie jeden wielki przełącznik, tylko wiele małych cięć, sprawdzanych po kolei. Wyłączyłem aktualizacje producenta i usługi telemetrii, obsługę sklepu i część paneli smart huba, a z menu źródeł usunąłem pozycję Screen Mirroring, której nie używam. Osobno zablokowałem bezpośrednie wyjście telewizora w internet, zostawiając działającą sieć lokalną, bo potrzebuję jej do odtwarzacza i do Home Assistant.
Pilnuję przy tym, żeby nie mylić „przygotowane” z „potwierdzone”. To, że dopisałem regułę albo zamaskowałem usługę, nie znaczy, że ruch naprawdę ustał – sprawdzam to podglądem połączeń, a nie samą listą zmian. Tak samo z wydajnością: po cięciach telewizor ma zauważalnie więcej wolnej pamięci, ale sama wolna pamięć to jeszcze nie dowód na mniejsze opóźnienie obrazu, więc tak tego nie opisuję.
Menu, które sobie przerobiłem
Skoro zostaję na fabrycznym menu źródeł, mogło przy okazji wyglądać lepiej. Natywny interfejs trzyma wygląd w skompilowanych plikach zasobów. Podmieniłem je własnym motywem – ciemne, zaokrąglone karty i spójne ikony – ale nie przez nadpisanie systemu, tylko montując swój plik na wierzchu oryginalnego na czas działania. Oryginał zostaje na dysku nietknięty, a cała zmiana to jeden dodatkowy plik i żaden proces w tle. To był mój warunek: wygląd nie może kosztować płynności.
Ściana czuwania
Telewizor podpiąłem do Home Assistant – stan, głośność, wyciszenie i wyłączanie działają z poziomu automatyki. Na jednym się jednak zatrzymałem: na włączaniu. W czuwaniu ten egzemplarz całkowicie znika z sieci, nie odpowiada na nic, a włączenie pilotem to za każdym razem zimny start, nie wybudzenie. Sterownik Wi-Fi deklaruje wybudzanie pakietem sieciowym, ale w praktyce na tym modelu nie działa – sprawdziłem to i odpuściłem. Włączanie zrobię później inną drogą, podczerwienią albo przez HDMI-CEC z odtwarzacza, a nie na siłę przez sieć, której w czuwaniu po prostu nie ma.
Czego się nauczyłem
- System tylko do odczytu to sojusznik, nie przeszkoda. Skoro nic nie da się zmienić na stałe, wszystkie moje zmiany muszą być w jednym skrypcie startowym – a to znaczy, że w każdej chwili wiem, co zrobiłem, i cofam to usunięciem jednego pliku.
- „Zamaskowane” to nie „potwierdzone”. Wyłączona usługa czy dopisana reguła to dopiero zamiar; czy ruch naprawdę ustał, widać dopiero w podglądzie połączeń. Pomiar pamięci też nie jest pomiarem opóźnienia obrazu.
- Nie każdą funkcję da się dołożyć. Włączanie ze stanu czuwania przez sieć rozbiło się o to, że w czuwaniu sieci nie ma. Czasem właściwym wnioskiem jest zmiana drogi, a nie upieranie się przy pierwszym pomyśle.