Grafika w przeglądarce tekstowej…?! (tekstowa:))

Ostatnio pokazywałem Wam lynx’a – przeglądarkę działającą w trybie tekstowym. Jest szybka, łatwa w obsłudze i przede wszystkim nie wymaga wielu zasobów. Bardzo przydaje się gdy zabraknie warstwy graficznej – a przy odrobinie zaparcia mozna ją również używać na co dzień (zwłaszcza w parze z czytnikami RSS).

Mimo wszystko, czasami przydałby się jakikolwiek podgląd plików graficznych… Powstaje więc pytanie: czy można wyświetlać obrazki w… oknie tekstowym terminala?!

Oczywiście że tak:) Co więcej,  grafika oparta na  znakach ma bardzo długą tradycję . Jej początki datują się znacznie wcześniej, niż pojawiła się pierwsza maszyn do pisania. Grafika ASCII polega na budowaniu obrazów z użyciem znaków tekstowych  a także (jeżeli dostępne)  podstawowych kolorów. Rezultaty konwersji grafiki do znaków tekstowych mogą być czasem bardzo efektowne:)

Spróbuję użyć konwertera grafika-tekst z przeglądarką lynx. Zacznę od zainstalowania narzędzia do przeglądania plików graficznych w trybie tekstowym. W kolejnym kroku zintegruję je z przeglądarką lynx tak, żeby po wywołaniu linka z obrazkiem – otworzył się w oknie terminala.

Podgląd obrazków… w trybie tekstowym?

W Sieci znajdziecie kilka narzędzi wyświetlających pliki graficzne w trybie tekstowym. Ja użyłem cacaview, opartego na bibliotece libcaca a dostarczanego w ramach pakietu caca-utils :

Pakiet ten zawiera:

  • cacaserver, do strumieniowania plików czytanych przez libcaca, na przyklad:
  • cacademo – wyświetla przykladowe animacje tekstowe, np. a’la matrix,
  • cacafire – wyświetla animację ognia (oczywiście tekstowo),
  • img2txt – zamienia pliki graficzne na tekstowe,
  • cacaview – podgląd plików graficznych w tekście,

Skoncentruję się na cacaview. Użycie tego narzędzia jest bardzo proste – wystarczy podać nazwę pliku:

cacaview wspiera formaty jak png, bmp jpg i inne.

Dla przykładu, obrazek w grafice bitowej:

Po konwersji do tekstu:

Możecie zmieniać niektóre parametry obrazu, np. współczynnik gamma (klawisze g i G):

lynx

lynx to przeglądarka pracująca w trybie tekstowym. Domyślnie nie wyświetla nawet linków do obrazków. Po otwarciu strony wciśnijcie „*” (Shift-8). Przeglądarka odświeży stronę, a w miejscu obrazków wstawi skróty do nich.

Jeżeli chcecie, żeby przeglądarka domyślnie wyświetlała linki do obrazków, w pliku ustawień /etc/lynx/lynx.cfg zmieńcie (dodajcie) następujące wpisy:

MAKE_LINKS_FOR_ALL_IMAGES VERBOSE_IMAGES Wygląd linków do obrazków:
Ta flaga musi być ustawiana, jeżeli chcecie żeby lynx wyświetlał linki do obrazków. Jeżeli ustawicie ją na FALSE – linki do obrazkó nie będą wyświetlane. Jeżeli obrazek nie ma ustawionej wartości alt (alternatywny tekst), lynx może zamiast tego  wyświetlić nazwę pliku obrazka.
FALSE ? NIEWIDOCZNE
TRUE FALSE
TRUE TRUE

VERBOSE_IMAGES ustawione na TRUE może sprawić, że tekst będzie mało czytelny. Stąd proponuję ustawić:

Powłoka, konsola i terminal

Zanim pójdziemy dalej, warto chwilę zastanowić się nad tymi trzema pojęciami: powłoka, konsola i terminal. W największym skrócie i uproszczeniu:

  • Powłoka (ang. shell), warstwa systemu operacyjnego, która przyjmuje i wykonuje polecenia zwracając ich rezultaty,
  • Konsola, to usługa systemowa pozwalająca na „bezpośredni” dostęp do powłoki; jest domyślną metodą komunikacji w systemach nie posiadających warstwy graficznej; w systemie dostępne są również konsole wirtualne – np. po wciśnięciu kombinacji CTRL-ALT-F1..F8,
  • Terminal – to program działający w środowisku graficznym pozwalający na dostęp do powłoki; można powiedzieć, że „emuluje” konsolę.

Fakt, konsola i terminal to narzędzia  działające w trybie tekstowym. Od strony użytkownika wydaje się więc, że różnica może być niewielka. W obu przypadkach macie do dyspozycji te same narzędzia, które wywołujecie komendami wpisywanymi w linii poleceń. Różnica sprowadza się do tego, że (w przybliżeniu) konsola bardziej odnosi się do samego systemu a terminal – to raczej aplikacja powiązana z warstwą graficzną (danej dystrybucji) – i korzystająca z jej ustawień. Ta różnica objawi się, gdy będziecie chcieli korzystać z lynx’a pod terminalem lub konsolą.

lynx i otwieranie obrazków za pomocą cacaview

lynx’owi trzeba ‚powiedzieć’, żeby do przetwarzania plików graficznych wykorzystał cacaview. W sieci znajdziecie opisy, sugerujące, że należy odpowiednio zmodyfikować plik konfiguracyjny /etc/lnx/lunx.cfg. Na przykład dla JPEG:

Pomimo usilnych prób – ten sposób dla mnie nie zadziałał. Za każdym razem lynx uruchomiony w terminalu system otwierał pliki w przeglądarce internetowej (lubuntu 18.04). Uruchomiony w konsoli – proponował jedynie pobranie pliku.

Po dłuższym czytaniu wyszło na to, że ustawienia w pliku cfg mają niższy priorytet niż systempowy /etc/mailcap.

mailcap to systemowa definicja przyporządkowująca typy plików (w sensie MIME) do narzędzi, które mają je obsługiwać. Jeżeli np. w interfejsie graficznym klikniecie jakiś plik, system sprawdzi jego typ. Potem porówna ten typ z wpisami w /etc/mailcap i uruchomi odpowiednie narzędzie.

/etc/mailcap po instalacji cacaview

Zauważyłem, że instalacja cacaview zawiera krok, który modyfikuje plik /etc/mailcap. Spróbujcie wywołać polecenie:

Przed instalacją caca-utils takie wpisy w /etc/mailcap nie istniały.

lynx i cacaview w konsoli

…po instalacji i automatycznnym dodaniu wpisów w /etc/mailcap działa automatycznie. Nie musicie już nic zmieniać. Po kliknięciu linka z obrazkiem ten otworzy się w oknie tekstowym. Odpowiada za to ten kawałem konfiguracji /etc/lynx/lynx.cfg:

lynx i cacaview w terminalu

lynx nie bardzo chciał reagować ustawienia w PERSONAL_MAILCAP.  W związku z tym:

  • w pliku /etc/lynx/lynx.cfg zmieńcie ustawienie GLOBAL_MAILCAP, z:

    Na:
  • W katalogu domowym (np. /home/arek) utwórzcie plik .mailcap, w którym dodajcie:

Powyższe definicje pobrałem z /etc/.mailcap. Zmieniłe jedynie narzędzie, które będzie wywoływane.

Teraz  obrazki z lynxa powinny otwierać się za pomocą cacaview. Oczywiście te ustawienia będą dotyczyć tak terminala, jak i konsoli.

I jeszcze o konfiguracji…

Spotkałem się z sytuacją, gdzie lynx ignorował swój plik z ustawieniami. W zależności od systemu, może tu pomóc ustawienie zmiennej systemowej LYNX_CFG, która powinna wskazywać na plik konfiguracji lynx.

W kolejnych krokach:

  • Sprawdzam, czy zmienna LYNX_CFG jest ustawina (printenv),
  • Jeżeli nie – otwieram plik .profile,
  • Dodaję definicję zmiennej wskazując na odpowiedni plik,
  • Instrukcja source przetwarza plik ustawiając zmienną.

Dla pewności, że zmienna ustawi się dla całego środowiska – najlepiej się przelogować.

Zapraszam do komentowania na facebook.

Źródła

  • https://www.linuxquestions.org/questions/slackware-14/compile-lynx-to-support-image-views-948702/
  • https://superuser.com/questions/144666/what-is-the-difference-between-shell-console-and-terminal