Praca z aplikacją Termux
To nie tyle spójny samouczek, co zbiór luźnych informacji na temat Termuksa – aplikacji na Androida dającej możliwość korzystania z konsoli i skryptów na naszym własnym telefonie.
Wymienione tu porady i problemy są dość uniwersalne, więc nie chciałem ich powtarzać w każdym jednym wpisie i zebrałem je tutaj. Będę do nich odsyłał z innych wpisów.
Spis treści
Instalacja
Zanim przejdę do instalacji, dwie kluczowe rzeczy:
-
Instrukcja dotyczy wyłącznie telefonów z systemem Android.
To system docelowy dla Termuksa. Być może powstały jakieś wersje dla systemu iOS albo bardziej niszowych, alternatywnych systemów (jak mobilny Linux), ale nie miałem z nimi styczności.
-
Google jest niedobrym monopolistą (już oficjalnie).
Są też właścicielami Play Store’a – oficjalnej i najpopularniejszej bazy z aplikacjami na Androida. Naszego Termuksa potraktowali niesprawiedliwie, zakazując mu dodawania niektórych funkcji, bardzo przydatnych dla majsterkujących użytkowników.
Ze względu na punkt drugi apka Termux dostępna przez Play Store jest wybrakowana.
Jasne, można jej użyć, jeśli chcemy tylko poćwiczyć w podróży korzystanie z programów konsolowych. Ale gdybyśmy chcieli skorzystać z pełni możliwości telefonu, mocno polecam pobranie wersji z innego źródła niż Play Store.
F-Droid na ratunek
„Inne źródło niż Play Store”? W porządku. Ale przydałoby się, żeby to źródło nie zaserwowało nam jakiejś apki z wirusami, która wykradnie nasze tajemnice z telefonu.
Takim źródłem jest F-Droid – baza przechowująca aplikacje open source.
Jest to źródło dość popularne i wiele osób ma je na oku, więc szybko by wyszło na jaw, gdyby ktoś próbował czegoś szemranego.
Instalacja prawdziwego Termuksa w takim wypadku przebiega następująco:
- Najpierw pobieramy apkę F-Droid z oficjalnego źródła.
- Następnie ją uruchamiamy i znajdujemy przez wyszukiwarkę apkę Termux. Instalujemy.
-
Na koniec instalujemy, również przez F-Droida,
Termux:API
.To funkcje rozszerzające Termuksa. Dają mu między innymi dostęp do schowka, mikrofonu, czujników telefonu – oczywiście tylko wtedy, kiedy wyrazimy zgodę.
Gdy już zrobimy te trzy rzeczy, świat Termuksa stanie przed nami otworem
Możliwości i ograniczenia
Co można robić, mając Termuksa?
Wszystkich zastosowań nie wymienię, bo są niezliczone! Jak dotąd opisałem na blogu:
- walkę z trollami (kopiowanie danych ze schowka + ich obróbka + otwieranie strony w domyślnej przeglądarce),
- chowanie plików poza zasięgiem innych (niesystemowych) aplikacji,
- robienie prowizorycznego backupu swoich SMS-ów,
- pobieranie filmików i muzyki z użyciem yt-dlp.
A będzie tego więcej
Poza tym, ogólniej: można korzystać z wielu przydatnych programów konsolowych znanych z systemu Linux.
Wiele fajnych samouczków można znaleźć w sieci pod hasłem bash tutorial
. Choć nie były tworzone z myślą o Termuksie, nieraz zadziałają również na nim.
Mało? Można zainstalować więcej programów z oficjalnej bazy. Dostępny jest chociażby język programowania Python, wraz z wieloma stworzonymi w nim pakietami (jak chociażby Matplotlib od wizualizacji danych).
A gdyby ktoś jeszcze czuł niedosyt, to po zainstalowaniu Termux:API
zyska dostęp do programów zintegrowanych z funkcjami smartfona. Warto poznać ich oficjalną listę.
Ograniczenia
Termux wygląda jak konsola, a na systemach Linux i Windows konsola jest niejako uprzywilejowana. Z tego względu można zapomnieć o kluczowym fakcie – Termux na Androidzie jest zaledwie szeregową aplikacją, jedną spośród wielu. Nie jest ani trochę bliżej systemu niż jakieś Spotify, Duolingo czy Flo.
Z tego względu nie jest w stanie zaglądać do wewnętrznych plików systemu ani do innych aplikacji. Jego pliki również będą poza zasięgiem innych apek.
Na Termuksie nie zadziałają też niektóre programy. Przykładowo:
- komendy ingerujące w ruch internetowy,
- komendy zawierające
sudo
(działanie w trybie administratora), - programy zaglądające do plików innych programów
(jak choćby mój drobny skrypt od grzebania w pamięci podręcznej przeglądarki).
Większe możliwości – również wewnątrz Termuksa – można zyskać poprzez zrootowanie swojego telefonu.
Rootowanie telefonu (dla chętnych i bardziej zaawansowanych)
Rootowanie polega z grubsza na uzyskaniu na smartfonie z Androidem uprawnień administratora (czyli właśnie roota); wyższego poziomu niż ten, który ma się domyślnie.
To działanie mniej radykalne niż wymiana całego systemu, ale wciąż dające większą kontrolę nad smartfonem. W takich warunkach Termux pod względem możliwości zbliży się do prawdziwej linuksowej konsoli.
Żeby zrootować telefon, należy najpierw odblokować bootloadera. Po ludzku: wyłączyć ogranicznik, które pozwala ładować jedynie domyślny, niezmieniony system.
I tu pojawia się haczyk, bo dostępność tej opcji zależy od producenta. U niektórych jest łatwo, inni wymagają zalogowania się na konto klienta i przesłania wniosku, jeszcze inni całkiem blokują bootloadera.
Osobiście nie rootowałem telefonu, zadowalając się jego odgooglowaniem. Dlatego nie pomogę osobiście, ale mogę polecić dwa źródła:
- „lista hańby” (po angielsku), wskazująca smartfony, na których dostęp do bootloadera jest utrudniony lub zablokowany subiektywną decyzją producenta.
- przystępny poradnik z bloga Wolność w kieszeni, opisujący proces rootowania po polsku i krok po kroku.
Innym ograniczeniem jest fakt, że domyślnie nie zadziała żaden interfejs graficzny (na przykład moduł Tkinter z Pythona czy interaktywna edycja obrazków przez pakiet OpenCV).
Brak grafiki częściowo da się obejść, instalując pomocniczą apkę i wykonując instrukcje ze strony Termuksa. Ale osobiście nie testowałem tej opcji.
Przegląd przydatnych funkcji
Termux zawiera wiele udogodnień i funkcji ułatwiających życie. Wiele z nich to standard na konsolach, ale też nie każdy z konsol korzysta – może ktoś chce na przykład tylko wykonywać skrypty stworzone przez inne osoby?
Z myślą o takich osobach omawiam w tym miejscu parę powszechnych konsolowych umilaczy życia, obecnych również na Termuksie. Dzięki nim nawet straszny terminal może być przyjemny!
Autouzupełnianie
W dolnej części Termuksa (ale nad klawiaturą Androida), w lewym rogu, widać ikonę dwóch strzałek skierowanych w przeciwne strony. To odpowiednik klawisza Tab
.
Odpowiada on za jedną z najbardziej przydatnych funkcji Termuksa – uzupełnianie tekstu.
Jego dokładne działanie zależy od tego, co znajduje się w konsoli przed aktywnym kursorem (bo to programy ustalają swoje reguły autouzupełniania). Ale ogólnie: opiera się na podsunięciu możliwości z listy.
Załóżmy na przykład, że pobraliśmy sobie przez Termuksa filmik. Chcemy go teraz przenieść do publicznego folderu na filmy, używając programiku konsolowego mv
. Ale są dwa problemy:
- nazwa pliku jest długa, jej wpisywanie by trwało;
- nazwa zawiera spacje i znaki specjalne, przez co konsola by jej nie przyjęła.
W takim wypadku można wpisać parę pierwszych liter nazwy pliku (o ile to zwykłe litery alfabetu, bez znaków specjalnych). A następnie nacisnąć opisany wyżej Tab
.
W efekcie w konsoli pojawi się cała długa nazwa, ze znakami specjalnymi „wyłączonymi” przez ukośniki. Oszczędzimy sobie nerwów i ręcznego pisania.
Historia poleceń
Częściowo skądś przekleiliśmy, częściowo wpisaliśmy do Termuksa jakąś dłuższą komendę. Wykonujemy ją… po czym wyskakuje informacja o błędzie. Przez głupią literówkę. Czy trzeba wszystko wpisywać od nowa?
Na szczęście nie. Wystarczy nacisnąć strzałkę w górę, żeby wstawić w konsolę poprzednio użyte polecenie. Kiedy się pojawi, można przejść strzałkami w bok w odpowiednie miejsce, naprawić literówkę, użyć poprawionej komendy.
Przerywanie działającego programu
Załóżmy, że uruchomiło się coś, co nam przeszkadza. Na przykład zaczęliśmy pobierać plik, ale Wi-Fi zwolniło. Widzimy teraz, że pobieranie trwałoby kilka godzin. Chcemy je przerwać, tyle że miejsce na wpisywanie komend zajął teraz licznik pobranych megabajtów.
Jak odzyskać możliwość wpisywania poleceń? Czy trzeba resetować całego Termuksa przez menu Androida?
Na szczęście nie. Wystarczy nacisnąć wbudowany w Termuksa klawisz Ctrl
, a następnie C
. Wykonywane obecnie polecenie zostanie przerwane i wyświetli się dolar na początku linijki. Sugerujący, że znów można wpisywać komendy.
Python
Nie będzie potrzebny osobom używającym gotowych programów. Ja jednak chciałem wzbogacić Termuksa o własne skrypty od przetwarzania stron internetowych. A że piszę je w języku Python, to go potrzebowałem.
Instalacja
Gdy już mamy Termuksa, instalowanie Pythona powinno być bardzo proste. Wpisujemy w konsolę:
LXML
Biblioteka do sprawnej pracy z formatem XML. Wiele moich skryptów jej nie potrzebuje.
Do tej pory starałem się unikać jej oraz innych modułów opartych na innych językach niż Python. Ale stopniowo zaczynam poruszać na blogu kwestie przetwarzania bardziej złożonych plików, jak kod źródłowy dużych portali społecznościowych. Powoli staje się potrzebna.
Przede wszystkim zaktualizujmy swoje biblioteki do najnowszej wersji, żeby nie było między nimi rozbieżności. Wpisujemy w Termuksa:
Gdyby wyskoczył komunikat o niedziałającym repozytorium, w tym momencie albo po innym użyciu komendy pkg
, to rozwiązanie jest dość proste.
Poza tym potrzebujemy kompilatora – czegoś w rodzaju robota kuchennego, który pozwoli nam połączyć zgromadzone składniki w fajnego LXML‑a. Dobrym rozwiązaniem dla Androida jest Clang, ważący na dzień 19 grudnia 62 MB.
To teraz potrzebujemy jeszcze składników – kilku bibliotek:
Na Termuksie ważne, żeby to były właśnie te; wiele internetowych porad i samouczków odnosi się do zwykłego Linuksa i wspomina o wersjach z przyrostkiem -dev. Ale w bazach Termuksa ich po prostu nie mają, są zamiast nich te wymienione.
Kiedy już mamy u siebie Clanga, trzy potrzebne biblioteki oraz samego Pythona, możemy się pokusić o zainstalowanie LXML-a. Najprościej byłoby wpisać:
Ale uwaga! W przypadku LXML-a po wyświetleniu building wheel for LXML zacznie się kompilacja, która długo potrwa, nawet całe godziny. Możemy na ten czas zostawić Termuksa w spokoju.
Nie mamy cierpliwości? To możemy wybrać wersję LXML-a wolniejszą w działaniu, ale szybszą w instalacji. W tym celu wpisujemy:
Komenda CFLAGS
oznacza, że chcemy szybkie przerobienie programu, kosztem ewentualnego nieco wolniejszego działania. Ale większej różnicy nam to nie zrobi.
Dla jasności: pierwszy znak po myślniczku to duże O (jak optymalizacja), a drugi to zero.
Gdyby na tym etapie wyświetliło nam długi błąd, zawierający fragment:
command ‘arm-linux-androideabi-clang’ failed with exit status 1
…To znaczy że nie mamy u siebie Clanga. Instalujemy go jak wyżej.
Rozwiązywanie problemów
Pliki pobrane przez Termuksa są niedostępne
Wyobraźmy sobie, że pobieramy przez Termuksa jakiś dowolny plik. Na przykład obrazek albo filmik (polecam przez yt-dlp).
Nie znajdujemy go jednak w galerii, nigdzie go nie widać. Co się stało?
Po prostu Termux, jako niezależna aplikacja, ma prywatną przestrzeń na pliki. Zaś Android jest tak skonstruowany, że aplikacje – również te z pozoru zżyte z systemem, jak Galeria – nie mają do takich przestrzeni wglądu.
Żeby jakiś plik z Termuksa stał się ogólnodostępny, należy najpierw udzielić Termuksowi pozwolenia na dostęp do plików, a następnie przenieść wybrany plik do przestrzeni publicznej. W tym celu można użyć polecenia:
mv PLIK /sdcard
Odmowa dostępu do publicznych plików
Jeśli udzieli się Termuksowi pozwolenia na dostęp do plików, to można łatwo przechodzić do folderu /storage/emulated/0
(czasem dostępnego pod skrótem /sdcard
) i pracować z obecnymi tam plikami publicznymi: obrazkami, muzyką, pobranymi rzeczami itd.
Po jednej z aktualizacji zaczęło mi to szwankować; mimo pozwolenia Termux wyświetlał odmowę dostępu (Permission denied
).
Rozwiązanie na szczęście jest proste: wystarczy klasyczna akcja typu wyłącz-włącz godna IT Crowd. Trzeba odebrać przez opcje Androida pozwolenie na dostęp do plików, a następnie udzielić go ponownie.
Instalowanie przez pkg nie działa
Sam Termux niewiele nam daje bez dodatkowych modułów i bibliotek. Możemy je łatwo instalować, wpisując komendę pkg install
. Ale co zrobić, kiedy tak podstawowa funkcja nam nie działa?
Po wpisaniu pewnej takiej komendy wyskoczył mi długi błąd, którego główne przesłanie znalazłem na końcu:
Possible cause: repository is under maintenance or down
Z czego to wynika? Otóż Termux ma u siebie ustalony adres jakiegoś serwera (repozytorium), do którego zwraca się z prośbami o pobranie dodatkowych rzeczy. I niestety jego dawny serwer – Bintray – został wyłączony. Stąd komunikat o błędzie.
Nie jest to wielki problem, bo można ustawić w Termuksie, żeby brał pliki od kogoś innego. Wydaje mi się, że nowsze wersje Termuksa to naprawiły.
Tym niemniej przez pewien czas, z punktu widzenia nowych użytkowników, Termux oznaczał dziwne, długie komunikaty o błędach i słabe pierwsze wrażenie. A szkoda.
A jak to zmienić na coś działającego? Bardzo prosto. Wpisujemy komendę:
Potwierdzamy. Wyświetli się ekran w stylu retro, pozwalający nam najpierw wybrać repozytorium, któremu chcemy zmienić źródło.
Po ekranie poruszamy się strzałkami. Spacją zaznaczamy. A klawiszem potwierdzającym (po prawej stronie naszej klawiaturze ekranowej) – potwierdzamy swój wybór. To ważne, żeby najpierw zaznaczyć, a potem potwierdzić. Inaczej wybralibyśmy zawsze pierwszą opcję.
Poniższe instrukcje odnoszą się do wersji Termuksa, którą miałem u siebie, dlatego piszę w pierwszej osobie. Możliwe, że wersja bardziej współczesna dla czytelników zawiera coś innego.
Domyślnie pierwszy ekran zawierał u mnie trzy kategorie – repozytorium główne, Science oraz Games. Wszystkim trzeba było ustawić nowe, działające źródło.
Inną opcją było usunięcie osobnych repozytoriów od gier i nauki; osobiście uznałem, że ich nie potrzebuję. Wystarczyły dwie proste komendy:
pkg remove science-repo -y
Kiedy miałem już tylko jeden rodzaj repozytorium, pozostała zmiana źródła. Zmieniłem opcję domyślną, Bintraya, na coś innego. Tamtego dnia działał mi Albatross, więc to jego ustawiłem jako źródło. Ale ogólnie, gdyby któreś nie działało, można po prostu wybrać coś innego z listy.
Po wprowadzeniu zmiany zaczęły działać komendy instalujące różne rzeczy przez pkg
.