Termux, Эмулятор терминала линукс для андроид

Материал из LUWRAIN Wiki
Перейти к: навигация, поиск
      = termux, Эмулятор терминала линукс для андроид. =

termux - это эмулятор терминала и linux-среда для android.

во-первых, эту штуку можно использовать как простой эмулятор терминала для вызова встроенных команд android, и это единственный более или менее доступный терминал, который я видел под андроид, в других окно с результатом отображается в скринридере просто как пустое пространство, здесь можно хотя бы читать текст, хотя до десктопных консольных скринридеров очень далеко в плане автоозвучки изменений.

но режим со встроенной оболочкой android тут называется failsafe, то есть аварийный, а основной режим ещё интереснее.

это особый, адаптированный под условия android, дистрибутив linux, который может запускаться на телефоне безо всякого рута.

если подробнее, то, как вы знаете, андроид, это тоже linux, но со значительными отличиями от того, что мы привыкли понимать под словом linux, хотябы по архитектуре файловой системы.

у каждого приложения там есть определённый каталог в файловой системе, где приложение может держать свои данные, private storage, там можно размещать и запускать оттуда любые адаптированные под местные условия бинарники.

они создали свою среду linux с программами, адаптированными под эти различия, на базе busybox и apt.

как результат, вы можете поставить туда очень многие пакеты нормального linux, например apache, python, jq, bash, golang, curl, wget, nmap и т.д.

говорят, кто-то запускал там nodejs.

под android существуют такие приложения, как LinuxDeploy, которые позволяют запускать на смартфоне обычные linux-дистрибутивы - debian, ubuntu, arch. обычно подобные приложения используют для этого системный вызов chroot, почему для их работы и требуются root-права. termux же работает с путями android напрямую, то есть те же shell-скрипты должны там начинаться с #!/data/data/com.termux/files/usr/bin/bash

соответственно, всё, что запускается в termux, компилируется именно под эту раскладку.

при использовании LinuxDeploy и ему подобных на смартфоне запускаются файлы, скомпилированные просто под arm, без учёта особенностей android. из-за этого некоторые программы либо не работают совсем, либо не выполняют часть своих функций.

также там всё сильно зависит от того, как производитель смартфона организовал внутреннее устройство своей системы. на этой почве могут возникать различные неприятные сюрпризы типа невозможности использовать sudo или полного отсутствия выхода в интернет для программ дистрибутива.

в termux же, если там есть какой-то пакет, то вы можете быть почти уверены, что он у вас будет работать, так как компилируется всё изначально под андроид.

в LinuxDeploy и подобных для запуска linux используются хакерские методы, а здесь всё делается легальным способом, поэтому будет работать на большинстве устройств.

ещё, кроме безрута, это даёт ряд преимуществ:

возможность лёгкого доступа к файловой системе устройства (то, что в файловых менеджерах называют встроенной памятью)

возможность неплохо управлять ресурсами android через специальный аддон.

например, можно пропустить список своих sms через grep или какой-нибудь regexp, запросить какой-то api через curl и результат вывезти в панель уведомлений, и т. д.

или поработать с буфером обмена.

или, наконец, сделать снимок с камеры, заслать что-нибудь в систему синтеза речи android, поставить что-то на воспроизведение.

среди доступных пакетов есть и pulseaudio, совместимый с системой вывода звука android. с его помощью можно воспроизводить звук при помощи таких программ, как sox.

тут всё ограничено только вашей фантазией.

есть даже система для вывода простеньких диалогов (меню, да/нет, дата-время, ввод текста)


и да, получается, что для нас это самый доступный ssh-клиент, который я видел. ещё можно поставить спецверсию ssh-агента и использовать для хранения ключей хранилище ключей android, что делает очень сложной задачу их кражи даже при условии наличия рута, так как все операции над ними проходят через специальный чип, правда ещё не тестировал, может работать не у всех. больше о технических деталях можно узнать у них на wiki, я же сосредоточусь на интерфейсе. итак, главное окно termux, кроме собственно окна терминала и клавиотуры, содержит в себе ещё ряд, в котором сгруппированы вспомогательные клавиши (esc, tab, стрелки, правда только вверх и вниз, а также модификаторы ввиде флажков) если прокрутить на этом ряде вперёд, как бы пролистывая на вторую страницу, то будет обычное поле редактирования. объясняю зачем это нужно. разработчики termux это сделали, поскольку у многих клавиотур есть функции типа автодополнения и предсказания набираемого текста, истории буфера обмена и подобные, для которых необходимо иметь точное представление об уже набранном тексте, что в условиях терминального окна нормально работать не может, так как там набранный текст определяется работающей в терминале программой, с которой клава взаимодействовать не способна в принципе. итак, набираемый в этом поле текст никак не влияет на то, что работает в терминале, пока мы не нажмём клавишу ввод. тогда поле очистится и всё, что мы набирали, отправится вверх в терминал. когда мы ещё раз нажмём ввод, будет послан сигнал перевода строки и, если перед нами стандартная консоль, введённая нами команда начнёт выполняться. для нас с вами это поле означает нормальную работу произношения символов и слов при вводе, а также возможность нормально перемещаться по тексту, чтобы исправить ошибки, так что его очень удобно использовать для подготовки команды перед запуском. но такие вещи, как автодополнение по tab, так просто работать не будут, поскольку, повторюсь, терминал ничего не может знать о наших действиях до тех пор, пока мы не отправим написанное наверх клавишей ввод. а когда мы это отправили и редактор очищен, то ничем на набранное мы повлиять не можем, разве что с большим трудом удалить, так как при наборе прямо в терминал talkback не озвучивает наших действий над клавиатурой, видимо просто не может получить о них данные, так что очень легко допустить ошибку, а перемещаться в стороны мы не можем, так как есть только стрелки вверх и вниз, комбинациями ctrl+f ctrl+b если только, но это опять же озвучиваться не будет, и если проконтролировать набор и удаление ещё можно постоянными перепроверками результата, то дастоверно определить местоположение курсора вообще невозможно. кроме этих элементов, можно нажатием и удержанием на терминале вызвать контекстное меню, где можно вставить текст из буфера, скопировать содержимое терминала, перейти по ссылкам, если они есть в текущем выводе, и ещё некоторые вещи. есть ещё одно меню, которое можно вызвать проводкой двумя пальцами слева направо в верхней части окна. там можно скрыть или показать клавиотуру, также развернуть клавиотуру можно нажатием на нижнюю часть терминала, или управлять сеансами. сеансы это нечто вроде независимых вкладок. если на кнопке new session сделать удержание, откроется окно, где можно дать своё имя новому сеансу или войти в failsafe режим, ещё failsafe можно запустить из меню ярлыка в лаунчере. failsafe это, как уже говорилось, аварийный режим, когда попадаешь не в среду termux, а в стандартную систему оболочки android с базовыми командами. он предназначен для ситуаций, когда вы настолько испортили файлы типа .bashrc, что командная оболочка падает при старте и ничего невозможно сделать, так как система просто не доходит до того этапа, когда можно вводить команды. наконец, есть значёк termux в уведомлениях, который висит, если у вас есть хоть один сеанс или включена блокировка сна. о последнем подробнее: если вы просто запустите в termux что-то долго работающее и отключите экран, очень скоро это что-то остановится, так как система уйдёт в спящий режим. чтобы этого не было, надо включить режим wake lock либо кнопкой значка, либо командой termux-wake-lock (termux-wake-unlock для выключения) эти команды спокойно можно вызывать из скриптов. ещё есть команда termux-storage-setup, которая откроет доступ из этой среды к вашей файловой системе через подкаталог storage домашнего каталога. обратите внимание, что нормальный доступ ко многим вещам, например к usb-носителям и внешней карте, весьма затруднителен, так как android требует для этого использовать систему saf (storage access framework), которую можно вызывать только из java кода, но никак не из нативных библиотек и тем более не из автономных бинарников. больше команд по управлению андроидом можно получить, поставив дополнительное приложение termux-api и с ним пакет termux-api. пакетчик тут apt. ещё пара мелочей: комбинация ctrl+l на виртуальной клаве может быть использована вместо команды clear, а ctrl+d там, где уместна exit или что-то подобное. эти клавиши и на десктопах работают, но на смартфоне это может быть особенно удобно. beep-сигнал с терминала преобразуется в лёгкий вибросигнал. ещё одна вещь, на которой надо остановиться, это установка ssh-сервера, так как конфигурировать всю эту систему удобнее с компа. для начала вызываем passwd и задаём себе какой-нибудь пароль. потом вызываем pkg in openssh pkg это скрипт, который для краткости объединяет вызов apt update с основным вызовом. in - сокращённая запись от install, если не сработает, попробуйте полную install. openssh это пакет, который объединяет клиент и сервер ssh. дожидаемся конца, отвечая y где надо. потом: sshd никакой менеджер сервисов тут не используется, поэтому вызываем вот так, напрямую. всё, теперь наш ssh сервер работает на порту 8022. обратите внимание, что порт именно 8022, так как порты ниже 1024 использовать не позволяется. логин можете использовать любой, а пароль тот, что задавали через passwd. для остановки команда pkill sshd и не забудьте поставить флаг keep screen on или включить блокировку сна, рекомендуется второе, иначе скоро сервер встанет сам собой.

подробности, как уже писал, на их wiki.

скачать можно либо с плеймаркета, либо с FDroid. если предпочитаете не использовать первое, но не знаете, что такое второе, всё равно идите на FDroid и качайте apk оттуда, они в отличие от гугла не блокируют прямую скачку apk через браузер.

но termux и дополнения должны быть из одного источника, смешивать apk с FDroid и google play нельзя.