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 :
1 |
$ sudo apt-get install caca-utils |
Pakiet ten zawiera:
- cacaserver, do strumieniowania plików czytanych przez libcaca, na przyklad:
12$ CACA_DRIVER=raw cacademo | cacaserver$ telnet localhost 51914 - 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:
1 |
$ cacaview <plik graficzny> |
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ć:
1 2 |
MAKE_LINKS_FOR_ALL_IMAGES:TRUE VERBOSE_IMAGES:FALSE |
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:
1 2 3 |
SUFFIX:.jpg:image/jpeg XLOADIMAGE_COMMAND:/usr/bin/cacaview %s & VIEWER:image/jpeg:/usr/bin/cacaview %s & |
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:
1 2 3 |
$ sudo cat /etc/mailcap | grep image/ | grep needsterminal image/gif; unset DISPLAY\; /usr/bin/cacaview '%s'; description=GIF Image; nametemplate=%s.gif; needsterminal image/jpeg; unset DISPLAY\; /usr/bin/cacaview '%s'; description=JPEG Image; nametemplate=%s.jpg; needsterminal |
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:
1 2 3 4 5 6 7 8 9 |
# Unix: # ==== GLOBAL_MAILCAP:/etc/mailcap # VMS: # === #GLOBAL_MAILCAP:Lynx_Dir:mailcap # # Sought in user's home (Unix) or sys$login (VMS) directory. PERSONAL_MAILCAP:.mailcap |
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:
123456789# Unix:# ====GLOBAL_MAILCAP:/etc/mailcap# VMS:# ===GLOBAL_MAILCAP:Lynx_Dir:mailcap## Sought in user's home (Unix) or sys$login (VMS) directory.PERSONAL_MAILCAP:.mailcap
Na:
12345678910# Unix:# ====#GLOBAL_MAILCAP:/etc/mailcapGLOBAL_MAILCAP:/home/arek/.mailcap# VMS:# ===#GLOBAL_MAILCAP:Lynx_Dir:mailcap## Sought in user's home (Unix) or sys$login (VMS) directory.#PERSONAL_MAILCAP:.mailcap - W katalogu domowym (np. /home/arek) utwórzcie plik .mailcap, w którym dodajcie:
12345678910111213image/bmp; cacaview %simage/gif; cacaview %simage/jpeg; cacaview %simage/jpg; cacaview %simage/png; cacaview %simage/tiff; cacaview %simage/x-bmp; cacaview %simage/x-pcx; cacaview %simage/x-tga; cacaview %simage/x-portable-pixmap; cacaview %simage/x-portable-bitmap; cacaview %simage/x-targa; cacaview %simage/x-portable-greymap; cacaview %s
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.
1 2 3 4 5 6 7 8 |
$ printenv | grep LYNX $ nano .profile #dodajcie na końcu extern LYNX_CFG=/etc/lynx/lynx.cfg [CTRL-x][Y][Enter] $ source ./.profile $ printenv | grep LYNX LYNX_CFG=/etc/lynx/lynx.cfg |
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