Termux – Linux-терминал в Android

Termux – приложение с открытым исходным кодом, реализующее Linux-подобную среду, взаимодействие с которой происходит посредством консоли без необходимости иметь root-права на устройстве. Доступно для устройств с Android >= 7 (раньше было 5).

Termux бесплатен. Имеет несколько дополнительных модулей (см.ниже), которые можно купить  на Google Play, свободно скачать на F-Droid или самостоятельно собрать из исходников на github. При этом, нельзя смешивать установку приложения, скачанного, например, на Google Play с установкой модуля, скачанного на F-Droid, т.к. они будут несовместимы из-за разных ключей подписи, используемых при сборке (сам не проверял).


Установка и настройка

1) Установить из Google Play или F-Droid (Android >=7, раньше было 5)

2) Обновить внутренние пакеты

3) При необходимости, настроить панель горячих клавиш и клавиатуры (FAQ: Touch Keyboard)

Редактирование панели с кнопками (создать файл при отсутствии):

Применить изменения:

Для себя настроил вот такие кнопки:

Отображается так:

Можно настроить многострочное отображение панели (но оказалось неудобно, строчки узкие).

Клавиши, не попавшие в панель, можно вызвать с помощью комбинаций клавиш Up,Down и букв на клавиатуре (не уверен, что все).

4) открыть для Termux доступ к внешнему хранилищу телефона, выполнив (при этом запросится разрешение WRITE_EXTERNAL_STORAGE):

При этом в домашнем каталоге $HOME ( ~ или /data/data/com.termux/files/home) появится каталог storage, где будут содержаться симлинки на реальные каталоги внешнего хранилища:

  • shared – root внешнего хранилища
  • downloads
  • dcim
  • pictures
  • music
  • movies
  • external-1 – приватные данные Termux на внешнем хранилище. При удалении Termux эти данные также удалятся.

Если этого не сделать, то оболочке будет доступен только приватный для приложения участок памяти  /data/data/com.termux/files, который недоступен любому файловому менеджеру, если у вас нет root прав на устройстве.


Дополнения

API – настройка функциональности устройства с помощью вызова команд в Termux

Кроме установки самого приложения, нужно установить еще пакет:

Некоторые интересные команды:

$ termux-dialog widget [options] – отображение диалога Dialog с элементами управления. Результат выбора возвращается в формате json

$ termux-job-scheduler [options] – выполнение скрипта по расписанию (документации почему-то нет, ссылка на исходник)

$ termux-notification [options] – отображение уведомления с вызовом скрипта при его нажатии

$ termux-toast [options] [text] – отображение уведомления Toast

$ termux-vibrate [options] – запуск временного вибросигнала

Boot – запуск скриптов в Termux при запуске устройства

Float – запуск Termux во всплывающем окне поверх других окон

Styling – настройка цветовой схемы и шрифта в терминале Termux

Tasker – запуск Termux из заданий Tasker‘а

Widget – виджет на рабочем столе для запуска скриптов Termux


Дополнение Termux:Widget

С помощью дополнения Termux:Widget на рабочий стол устройства можно добавить виджет со списком bash-скриптов для их быстрого запуска.

Пример виджета:

При этом, скрипты могут быть запущены двумя способами:

а) в терминале Termux. Т.е. при запуске скрипта будет открыто окно терминала Termux, в котором  и будет происходить выполнение скрипта.

В этом случае скрипты нужно положить в специальный каталог .shortcuts в домашнем каталоге.

Создание каталога:

б) в фоне. Т.е. скрипт будет выполнятся “сам по себе”, без окна терминала Termux.

Для запуска фоновых скриптов их нужно поместить в подкаталог  .shortcuts/tasks домашнего каталога.

Примечание:

Если скрипт запускается в фоне, и открытает какие-либо визуальные окна (например, запускает другое приложение), то в системе Android (начиная, примерно, с версии 7) приложению Termux нужно добавить соответствующее разрешение. Например, в Android 9: Свойства приложения (О приложении) -> Другие разрешения -> Отображать всплывающие окна, когда запущено в фоновом режиме. Иначе ничего не отобразится.

Я считаю правильным решением хранить сами файлы скриптов во внешней памяти устройства, а не в приватном участке памяти для приложения (например, каталог $HOME, или  /data/data/com.termux/files/home). Т.к., если приложение Termux будет удалено, то его приватный каталог тоже очистится.

Для этого, с помощью команды ln, на сами файлы скриптов можно создать символьные ссылки (симлинки), которые положить в каталог  .shortcuts:

$ ln -s $HOME/storage/shared/real_path_to_scripts/script.sh $HOME/.shotcuts/script.sh 

Также, не забудьте сделать исходный файл скрипта исполняемым:


Интерпретаторы скриптов

Чтобы работали скрипты с интерпретаторами (т.н. shebangs), к примеру, типа #!/bin/sh или #!/usr/bin/env python, нужен termux-exec, который устанавливается как зависимость apt  (при apt версии >= 1.4.8-1). Если termux-exec вдруг не установлен, нужно запустить pkg upgrade  и перезапустить Termux.

Если скрипты с такими интерпретаторами, как #!/bin/sh , не запускаются, даже если установлен termux-exec, попробуйте сбросить переменную среды LD_PRELOAD:

и перезапустите сеанс Termux.

Также, исправить обращение к интерпретаторам можно “вручную” с помощью команды termux-fix-shebang.

Она заменяет путь к интерпретатору /bin на /data/data/com.termux/files/usr/bin  (сокращенно $PREFIX/bin) в самих файлах скриптов. Но это устаревший способ.

Например:

А вообще, при проблемах в скриптах с путями к интерпретаторам возникает ошибка:

"Bad Interpreter: No such file or directory"


Выполнение скриптов из сторонних приложений

К сожалению, выполнить пользовательский bash-скрипт Termux “напрямую” из сторонних приложений (например, с помощью того же механизма передачи Intent) нельзя. Это связано с тем, что в Termux (пока?) не реализован контроль доступа для каждого приложения, а у пользователей Termux, например, в домашнем каталоге может храниться конфиденциальная информация (к примеру, ключи SSH).

Вот цитата из их FAQ:

How to run Termux commands from other application?

This is not supported currently.

That feature will not be implemented until Termux will have a solution for at least per-app access control.

Many users use it for accessing remote services and this requiring to store SSH keys, API tokens and other sensitive information in $HOME. Termux obviously do not have privilege separation and we need to somehow protect user’s data from third party eyes.

Для себя нашел 3 варианта запуска скриптов:

  • непосредственно из терминала
  • с помощью Termux:Widget
  • из заданий Tasker‘а или Automate

Запуск приложений

Для запуска приложений можно использовать Activity Manager:

Например, для запуска MyTetroid это будет:

0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *