poniedziałek, 21 marca 2016

Plasma 5. Część 2 - Pogromca mitów. Baloo.

Mit pierwszy: wyłącz baloo bo inaczej... No właśnie, w zasadzie nie wiadomo co inaczej. Przyjmuję, że lampa się z sufitu urwie skutkiem obciążenia systemu i samego komputera owym baloo.
Czym jest baloo? Programem indeksującym pliki, który umożliwia komponentom Plasmy i niektórym aplikacjom wyszukiwanie plików według różnych kryteriów. Między innymi po ich zawartości. Baloo jest zatem bezużyteczne dla wszystkich programów, które z niego nie korzystają. Nie tylko programów nie zbudowanych w oparciu o KF5, ale również i tych, w których funkcja ta podczas kompilowania została wyłączona. Wydaje się również, że nie będzie ono miało znaczenia we wszelkich programach, które wewnętrznie indeksują pliki mechanizmami wbudowanymi w ten program.
Można zatem w istocie wyłączyć baloo.
balooctl disable
W takiej sytuacji przydałoby się również przebudować programy wykorzystujące baloo, tak by z niego nie korzystały. Takimi są np. dolphin, czy gwenview. Takim  jest również plasma-desktop. Niegdyś w AUR istniały wersje "light" niektórych komponentów KDE, które budowały je właśnie jako wolne od zależności do baloo. Obecnie już ich nie ma. Pozostawiam to rozwiązanie zatem wyłącznie osobom, które dokładnie wiedzą jak to zrobić i przede wszystkim, którym chce się kilka razy w miesiącu bawić w kompilowanie ze źródeł kilku paczek. Same ocenić sobie muszą, czy to się opłaca.
Według mnie nie. Wolę zabrać się za okiełznanie baloo.
W istocie jego ustawienia, szczególnie przy pierwszym uruchomieniu środowiska, powodują, że praktycznie wszystko co chcemy na nim  wykonać ślamazarzy się okropnie. Zastanówmy się zatem, czy narzędziu temu nie można jakoś pomóc. Niestety graficzne narzędzia, ustawiające mechanizm indeksowania nie są bardzo rozbudowane i niewiele nam powiedzą o tym, co jest indeksowane.  Obecnie ustawieniami baloo możemy sterować wyłącznie na trzy sposoby:
  • za pomocą modułu KCM pod nazwą "Wyszukiwanie",
  • za pomocą konsolowego narzędzia balooctl,
  • ręcznie edytując jego pliki konfiguracyjne.
Nie istnieją narzędzia opisywane na wiki Archa jak kcm_baloo_advanced, czy baloo_file_cleaner (o tym jeszcze później). Pierwsze jest przeznaczone wyłącznie dla Baloo istniejącego w wersji przeznaczonej dla KDE4, drugie odeszło w mrokach dziejów, kiedy Baloo stało się frameworkiem, a nie aplikacją.
Zanim dokonamy jakichś zmian musimy się zastanowić co indeksuje Baloo i co chcemy by indeksował. Zanim się dowiemy jak to zrobić uświadomić musimy sobie, że jest to program, który działa w tle systemu w sposób ciągły. Oznacza to, że za każdym razem, gdy zostanie dokonana jakaś zmiana w katalogu i wobec plików, które ma śledzić, program zostanie aktywowany i przeprowadzona zostanie indeksacja. Oznacza to, że system będzie bardziej obciążony zawsze wówczas, gdy zmuszony zostanie do indeksowania katalogów o często zmieniającej się zawartości. Jeśli zatem ktoś z Was ma katalog, w którym buduje programy ze źródeł, to zobowiązanie Baloo do jego indeksowania jest według mnie czystą stratą zasobów komputera. Także te katalogi, z których zawartości korzystamy zwykle z użyciem innych programów, które czy to same mają własne narzędzia indeksujące (np. digikam, amarok), jest według mnie bez sensu. Każdy z Was jednak musi ocenić sobie sam co ma być indeksowane.
Zanim przejdę do narzędzi graficznych, kilka słów o konsolowych. Szybciej bowiem odpowiedzą nam na interesujące pytania.
Podstawowym jest oczywiście balooctl wraz ze opcjami. Dla nas interesujące będzie skorzystanie z:
balooctl config ls <ustawienie>
Polecenie to zwróci nam informacje o konkretnym ustawieniu programu indeksującego. Parametr <ustawienie> przybrać może jedną z następujących wartości:
  • hidden - dowiemy się, czy Baloo indeksuje ukryte pliki i katalogi,
  • contentIndexing - dowiemy się czy Baloo indeksuje zawartość plików (a nie tylko nazwy),
  • includeFolders - otrzymamy spis katalogów indeksowanych przez Baloo (będzie to katalog nadrzędny),
  • excludeFolders - otrzymamy spis katalogów, których Baloo nie indeksuje,
  • excludeFilters - Spis filtrów używanych do wykluczania plików
  • excludeMimetypes - Spis typów mime używanych do wykluczania plików  
Domyślne ustawienia są takie, że Baloo indeksuje wyłącznie katalog danego użytkownika, który uruchomił Plasmę. Nie indeksuje jednakże żadnego katalogu, ani pliku ukrytego. Także nie wszystkie kategorie plików są automatycznie indeksowane. Dla przykładu większość plików służących jedynie do pisania kodu, czy użytecznych w procesie kompilacji jest pomijanych. Niemniej jednak nie wszystkie.
Zanim zatem rozpoczniemy używanie środowiska z Baloo sensownie jest dokonać wykluczenia wszystkich plików i katalogów, których nie chcemy indeksować. Musimy również pamiętać o tym, że Plasma (tak jak niegdyś KDE4) jest bardzo wrażliwa na wadliwe ustawienia. Jeśli zatem kiedyś dodaliśmy jakiś katalog do listy wyszukiwania, a obecnie go nie mamy, to Baloo będzie próbowało znaleźć coś, czego nie ma. Nie muszę chyba mówić, że przełoży się to na znaczne zużycie zasobów.
Konfigurując Baloo (pomijam ręczną edycję plików konfiguracyjnych) mamy dwie możliwości: tekstową i graficzną. Ta ostatnia jednakże jest bardzo skromna. Jest ona dostępna w "Ustawieniach systemowych". Odnajdujemy tu "Przestrzeń robocza" i pod pozycją "Wyszukiwanie" znajdujemy ustawienia Baloo z dwoma zakładkami: "Wyszukiwarka Plasmy" oraz "Wyszukiwanie plików". Pierwszą odpowiada za definiowanie tych typów plików, które mają być indeksowane, druga oferuje wybór wyłącznie negatywny, czyli wyklucza z indeksowania te katalogi, których nie chcemy indeksować. Sami musimy rozstrzygnąć co chcemy indeksować, a czego nie. Podpowiedź znajdziecie powyżej. Osobiście nie indeksuję katalogu, w którym kompiluję różne programy. Nie ma to najmniejszego sensu, gdyż powstające tu pliki traktuję wyłącznie tymczasowo, a interesująca jest dla mnie paczka, która powstaje i jest instalowana w systemie. Nie indeksuję również katalogu, do którego pobierane domyślnie są materiały z zewnątrz. Najczęściej i tak lądują one w innym miejscu na dysku i zajmuję się tym bezpośrednio po pobraniu. Po co zatem to indeksować? Wyłączam również katalogi, które często zmieniam i które - zwykle - są indeksowane przez jakieś inne programy. Są to katalogi, w których umieszczam pliki z muzyką, czy filmami. Także pliki graficzne z katalogu Obrazy, ze względu na ich indeksowanie w programie do przeglądania zdjęć (np. DigiKam) są przeze mnie wyłączane z indeksacji. Gwenview używam raczej do podglądu obrazków ad hoc, zatem nie muszę mu udostępniać tego katalogu. Co innego, gdy pliki graficzne stanowią część mojej pracy i wówczas najczęściej umieszczane są w katalogu Dokumenty wraz z innymi materiałami, które są z nimi związane.
Powyższych zmian możemy również dokonać w konsoli, poprzez użycie:
balooctl config <odpowiednie_polecenie> <parametr>
Poleceniami są:

  • add - możemy dodać coś do indeksowania
  • rm lub remove - tu wyłączamy coś z ineksowania
  • set - w zasadzie występujące jedynie z hidden i służące do zmiany indeksowania plików i katalogów ukrytych
Parametrami pierwszych dwu poleceń są natomiast:

  •  includeFolders           Spis katalogów, które Baloo indeksuje                                                                 
  •  excludeFolders           Spis katalogów, których Baloo nigdy nie zaindeksuje                                                   
  •  excludeFilters           Spis filtrów używanych do wykluczania plików                                                          
  •  excludeMimetypes         Spis typów mime używanych do wykluczania plików 
Zanim dokonamy zmian, warto jest wstrzymać, bądź unieruchomić baloo:
balooctl suspend (wznawiamy przez balooctl start)
lub
balooctl disable  (wznawiamy przez balooctl enable && balooctl start, jeśli pierwsze polecenie nie wystartuje baloo)
Najlepiej jest opisane tu ustawienia dokonać jeszcze przed pierwszym startem środowiska, w konsoli. Jeśli jednakże ktoś już wystartował je, to sensownie jest wstrzymać baloo, usunąć pliki w ~/.local/share/baloo, następnie dokonać optymalizacji, uruchomić baloo i... odczekać chwilę, nie pracując w środowisku. Baloo dokona jego indeksacji w sposób, który nie jest mu utrudniany (wszak indeksowanie wciąż zmieniających się plików nigdy nie będzie łatwe dla jakiegokolwiek narzędzia).
W moim przypadku, zrealizowanie tych zaleceń powoduje, że baloo zużywa bardzo mało RAM i nie zaobserwowałem jeszcze, by zużyło w dający się zauważyć sposób zasobów CPU.