Termux – приложение с открытым исходным кодом, реализующее Linux-подобную среду, взаимодействие с которой происходит посредством консоли без необходимости иметь root-права на устройстве. Доступно для устройств с Android >= 7 (раньше было 5).
Termux бесплатен. Имеет несколько дополнительных модулей (см.ниже), которые можно купить на Google Play, свободно скачать на F-Droid или самостоятельно собрать из исходников на github. При этом, нельзя смешивать установку приложения, скачанного, например, на Google Play с установкой модуля, скачанного на F-Droid, т.к. они будут несовместимы из-за разных ключей подписи, используемых при сборке (сам не проверял).
Оглавление:
Установка и настройка
Подключение по SSH
Настройка горячих клавиш и клавиатуры
Доступ к внешней памяти устройства
Дополнения Termux
Дополнение Termux:API
Дополнение Termux:Widget
Интерпретаторы скриптов
Выполнение скриптов из сторонних приложений
Запуск приложений из Termux
Дополнительно
Источники:
Basic use of termux (sqlsec.com) – огромная статья с обзором установки и настройки среды, множества пакетов, описанием API-команд, горячих клавиш (осторожно, китайский! есть eng-версия на fatalerros.org)
Android+Termux – карманный друг хакера (codeby.net) – хороший обзор, подключение по ssh с компа
Правильный Git-клиент на Android (pedronveloso.com) – (en) хорошая статья о Termux и git с помощью него
Установка и настройка
1) Установить из Google Play или F-Droid
2) Обновить внутренние пакеты
1 |
$ apt update && apt upgrade |
3) При необходимости, настроить ssh-сервер и подключиться удаленно к оболочке Termux с компьютера (подробнее ниже, а также в статье)
3) При необходимости, настроить панель горячих клавиш и клавиатуру (подробнее ниже)
4) Открыть доступ к внешнему хранилищу устройства (подробнее ниже)
5) При необходимости, установить пакет для поддержки команд Termux API (подробнее ниже):
$ pkg install termux-api6) При необходимости запуска скриптов с помощью дополнения Termux Widget, создать специальные каталоги в домашней директории $HOME и скопировать туда скрипты (подробнее ниже).
7) При необходимости, установить и настроить git с использованием парольной аутентификации к удаленному репозиторию или с помощью ssh-ключей (описание в статье).
Подключение к Termux по ssh
Для подключения к оболочке Termux с компьютера (хоста) по протоколу ssh, нужно установить пакет OpenSSH:
1 |
$ apt install openssh |
Запуск ssh-сервера осуществляется командой sshd, после чего на порту 8022 открывается порт для подключения.
1 |
$ sshd |
Проверить работу ssh-сервера на нужном порту можно командой netstat:
1 |
$ netstat -tunlp | grep 8022 |
Должны быть выведены 2 строки с надписью LISTEN.
Termux не поддерживает парольную аутентификацию по SSH и поэтому нужно будет использовать SSH-ключи. Более подробно про ssh-ключи и их использование написано в статье Работа с ssh-ключами.
Если имеющихся ssh-ключей хостовой машины нет, то их нужно создать. На Linux это делается с помощью команды ssh-keygen, на Windows с помощью программ BitVise-SSH или PuTTYgen.
Публичный ключ (по-умолчанию называется id_rsa.pub) нужно будет загрузить на телефон и скопировать в файл ~/.ssh/authorized_keys.
Например, подключаем телефон к хостовой машине как дисковый накопитель, копируем файл публичного ключа в корень памяти телефона. Затем в Termux выполняем команду:
1 |
$ cat ~/storage/shared/id_rsa.pub >> ~/.ssh/authorized_keys |
Команда добавляет содержимое файла id_rsa.pub в файл authorized_keys.
Файл публичного ключа уже не нужен, удаляем:
1 |
$ rm ~/storage/shared/id_rsa.pub |
Далее подключаем телефон к сети Wi-fi, узнаем его IP и подключаемся к нему с помощью SSH-клиента. С этого момента работа в Termux с клавиатуры компьютера становится намного удобнее.
Настройка горячих клавиш и клавиатуры
Панель горячих клавиш и клавиатуры можно настроить (FAQ: Touch Keyboard).
Редактирование панели с кнопками (создать файл при отсутствии):
1 |
$ nano ~/.termux/termux.properties |
Применить изменения:
1 |
$ termux-reload-settings |
Для себя настроил вот такие кнопки:
1 2 3 |
extra-keys = [ \ ['HOME','TAB','CTRL','LEFT','RIGHT','DOWN','UP','~','/','END'] \ ] |
Отображается так:
Можно настроить многострочное отображение панели (но оказалось неудобно, строчки узкие).
Клавиши, не попавшие в панель, можно вызвать с помощью комбинаций клавиш Up,Down и букв на клавиатуре (не уверен, что все).
Доступ к внешней памяти устройства
Чтобы запросить для Termux доступ к внешнему хранилищу телефона, нужно выполнить команду:
1 |
$ termux-setup-storage |
При этом запросится разрешение 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 – набор специальных команд для расширения функциональности устройства (подробнее ниже).
Boot – запуск скриптов при запуске устройства
Float – запуск Termux во всплывающем окне поверх других окон
Styling – настройка цветовой схемы и шрифта в терминале Termux
Tasker – запуск скриптов Termux из заданий Tasker‘а
Widget – виджет на рабочем столе для запуска скриптов Termux (подробнее ниже)
Дополнение Termux:API
Дополнение API – расширение функциональности устройства с помощью вызова специальных команд в Termux.
Для запуска команд нужно установить пакет termux-api:
1 |
$ pkg install termux-api |
Некоторые интересные команды:
termux-wake-lock – использовать блокировку Termux, чтобы процессор не засыпалtermux-wake-unlock – убрать блокировку Termux, чтобы процессор мог засыпать
Т.к. оболочка входа по-умолчанию – bash, то при использовании одного сеанса можно автоматизировать включение/отключение блокировки так:
1) добавить вызов
termux-wake-lock в файл
~/.profile (или
~/.bash_profile)
2) добавить вызов
termux-wake-unlock в файл
~/.bash_logout
Для нескольких сеансов придется самостоятельно управлять вызовом разблокировки. Но есть возможность вызвать bash один раз и использовать byobu для запуска нескольких сеансов bash в рамках одного сеанса Termux.
Примечание:
По моим наблюдениям (на устройстве Redmi 4x), если не использовать команду termux-wake-lock, то при выполнении заданий в фоне с помощью termux-job-scheduler, когда телефон “спит”:
- период времени запуска заданий может варьироваться. Например, вместо 30 минут может быть 30-35 минут. Но, тем не менее, задания все равно запускаются.
- команды могут выполняться на порядок дольше. Например, команды git – несколько минут вместо нескольки секунд. В связи с чем, при запуске команды
git commit, даже когда нечего коммитить, может возникнуть сообщение:
It took 3.24 seconds to enumerate untracked files. 'status -uno'
may speed it up, but you have to be careful not to forget to add
new files yourself (see 'git help status').
Некоторые параметры:
-s, --script path – путь к скрипту. Скрипт должен находиться в каталоге $HOME, т.к. только там файлам можно предоставить право выполнения (x).
--job-id id – id задания. Будет переопределено любое задание, имеющее такой же id.
--period-ms msec – периодичность выполнения скрипта. По-умолчанию 0 – выполнить 1 раз. Начиная с Android 7 минимальный период = 900,000ms (15 минут).
Пример:
1 |
$ termux-job-scheduler --period-ms 1800000 -s ~/script.sh |
Ошибка: Cannot execute file: ...
Причина: У файла не задано право на выполнение (x).
1 |
$ chmod +x file |
Примечание:
Файлам во внешней памяти нельзя предоставить право на выполнение. Только в каталоге
$HOME.
Параметры:
widget – вид вьюшки: confirm/ checkbox/ counter /date /radio /sheet/ spinner /speech /text /time
-l, list – отобразить список вьюшек и их параметров
-t, title – заголовок диалога (не обязательно)
Некоторые параметры:
-i/--id id – id уведомления (будет переопределено любое предыдущее уведомление с таким же id)
-t/--title title – заголовок уведомления
--action action – действие для выполнения при нажатии на уведомление. Это может быть команда, несколько команд, разделенных через “;” или файл скрипта с правами на выполнение
--help-actions – документация по действиям, указываемым в параметре
--action
--on-delete action – действие для выполнения при удалении уведомления из шторки
--priority prio – приоритет (high/low/max/min/default)
--vibrate pattern – паттерн вибрации (список значений через запятую: 500,1000,200)
--sound – включить звук уведомления
Пример:
1 |
$ termux-notification -i 1234 -t "Уведомление в шторке" --action ~/script.sh --vibrate |
Примечание:
Не удалось добиться отображения уведомления при запуске скрипта в фоне с помощью
termux-job-scheduler. Хотя, сообщение
termux-toast выводится без проблем. При этом , доп.разрешения на отображение окон в фоне установлены.
Дополнение Termux:Widget
С помощью дополнения Termux:Widget на рабочий стол устройства можно добавить виджет со списком bash-скриптов для их быстрого запуска.
Пример виджета:
При этом, скрипты могут быть запущены двумя способами:
а) в терминале Termux. Т.е. при запуске скрипта будет открыто окно терминала Termux, в котором и будет происходить выполнение скрипта.
В этом случае скрипты нужно положить в специальный каталог .shortcuts в домашнем каталоге.
Создание каталога:
1 |
$ mkdir -p $HOME/.shortcuts |
б) в фоне. Т.е. скрипт будет выполнятся “сам по себе”, без окна терминала Termux.
Для запуска фоновых скриптов их нужно поместить в подкаталог .shortcuts/tasks домашнего каталога.
1 |
$ mkdir -p $HOME/.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Также, не забудьте сделать исходный файл скрипта исполняемым:
1 |
$ chmod +x $HOME/storage/shared/real_path_to_scripts/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:
1 |
$ export LD_PRELOAD=${PREFIX}/lib/libtermux-exec.so |
и перезапустите сеанс Termux.
Также, исправить обращение к интерпретаторам можно “вручную” с помощью команды termux-fix-shebang.
Она заменяет путь к интерпретатору /bin на /data/data/com.termux/files/usr/bin (сокращенно $PREFIX/bin) в самих файлах скриптов. Но это устаревший способ.
Например:
1 |
$ termux-fix-shebang script.sh |
А вообще, при проблемах в скриптах с путями к интерпретаторам возникает ошибка:
"Bad Interpreter: No such file or directory"
Выполнение скриптов из сторонних приложений
Как оказалось, 20.09.2020 раздел FAQ с вопросом “How to run Termux commands from other application?” был обновлен. Этот вопрос был решен точь в точь как мне и было нужно, но я об этом не знал.
Как было раньше: (развернуть)К сожалению, выполнить пользовательский 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.
На данный момент, с помощью сервиса RunCommandService из своего приложения можно отправлять намерения ( Intent) в среду Termux для выполнения необходимых команд.
Требования:
1) В конфиг-файле ~/.termux/termux.properties параметр allow-external-apps должен быть установлен в true :
1 2 |
$ nano ~/.termux/termux.properties allow-external-apps = true |
Перезагрузить настройки:
1 |
$ termux-reload-settings |
2) В манифесте вашего приложения должно быть объявлено разрешение (permission) com.termux.permission.RUN_COMMAND:
1 2 3 4 |
<manifest> <uses-permission android:name="com.termux.permission.RUN_COMMAND" /> ... </manifest> |
3) Чтобы автоматически запускать и выводить на передний план команды Termux, которые были запущены с параметром “background mode = false” в android >= 10 без необходимости вручную щелкать уведомление, нужно, чтобы Termux получил разрешение на “показ всплывающих окон, когда запущено в фоновом режиме”. Это также относится и к плагину Termux:Tasker.
Например:
Сведения о приложении -> Другие разрешения -> Отображать всплывающие окна, когда запущено в фоновом режиме
4) Чтобы еще больше снизить вероятность того, что Termux будет убит операционной системой в связи с невозможностью вызвать startForeground() в течение ~5 секунд после запуска службы на Android >= 8, следует отключить оптимизацию батареи для Termux.
Например:
Сведения о приложении -> Контроль активности -> Нет ограничений
5) Значения (extras) для передачи в Intent:
extras |
Тип |
Обязательный |
Описание |
||
|
String |
Да |
Путь к команде или скрипту. Может использоваться абсолютный путь с префиксом “$PREFIX/” or “~/”. |
||
|
String array |
Нет |
Параметры команды/скрипта |
||
|
String |
Нет |
Рабочий каталог, который будет установлен при запуске команды/скрипта (не обязательный параметр). Может использоваться абсолютный путь с префиксом “$PREFIX/” or “~/”. |
||
|
boolean |
Нет |
Признак того, нужно ли запускать команду/скрипт в фоновом режиме. По-умолчанию – false. |
Пример отправки команды в Termux:
1 2 3 4 5 6 7 8 |
Intent intent = new Intent(); intent.setClassName("com.termux", "com.termux.app.RunCommandService"); intent.setAction("com.termux.RUN_COMMAND"); intent.putExtra("com.termux.RUN_COMMAND_PATH", "/data/data/com.termux/files/usr/bin/top"); intent.putExtra("com.termux.RUN_COMMAND_ARGUMENTS", new String[]{"-n", "5"}); intent.putExtra("com.termux.RUN_COMMAND_WORKDIR", "/data/data/com.termux/files/home"); intent.putExtra("com.termux.RUN_COMMAND_BACKGROUND", false); startService(intent); |
Остальные способы запуска скриптов Termux:
- непосредственно из терминала
- с помощью Termux:Widget
- из заданий Tasker‘а или Automate
Запуск приложений
Для запуска приложений можно использовать Activity Manager:
1 |
am start -n com.package.name/com.package.name.ActivityName |
Например, для запуска MyTetroid это будет:
1 |
am start -n com.gee12.mytetroid/com.gee12.mytetroid.activities.MainActivity |
Дополнительно
Внутри bash-скриптов нельзя использовать пути к файлам из самой оболочки Termux (например, ~/storage/shared). Нужно использовать стандартные пути Android (например, /storage/emulated/0).
Пакет
pkg – менеджер пакетов
Команды:
upgrade – обновление всех установленных пакетов до последней версии
install <package> – установка пакета
uninstall <package> – удаление пакета
reinstall <package> – переустановка пакета
files <package> – список всех файлов, установленных вместе с пакетом
show <package> – отображение основной информации о пакете, например, зависимости
search <query> – поиск пакета по части имени или описания
list-installed – список всех установленных пакетов
list-all – список всех доступных пакетов в репозиториях
autoclean – удаление всех устаревших пакетов из кэша .deb-файлов пакетов
clean – удаление всех пакетов из кэша .deb-файлов пакетов
Пакет
htop – мониторинг запущенных из Termux процессов.
Установка:
1 |
$ pkg install htop |
Если экран устройства небольшой, то последний столбец “Command” с именем процессов не поместится (придется уменьшать масштаб всего изображения). Но можно воспользоваться настройками отображения данных (F2) и удалить лишние столбцы.
Пакет
tsu (Termux SU) – для работы от рута. По-умолчанию Termux запускаеться под обычным юзером.
Установка:
1 |
$ apt install tsu |
Запуск:
1 |
$ tsu |
Начиная с Android 10, при запуске команды netstat -tunlp будет ошибка:
netstat: no support for `AF INET (tcp)' on this system.
Причину подсмотрел здесь: с версии Android 10 утилиты больше не могут получать статистику из интерфейсов в /proc/net/. Обходного пути нет, хотя определенную информацию, связанную с IP, можно получить с помощью /system/bin/ip.
Командное администрирование самый простой способ вычислить пользователя.
Привет. Глянь ссылки внизу статьи. 2 и 3 – линки на казино.
Что можно делать с помощью termux на телефоне
Инструкция termux для андроид — Большая энциклопедия ошибок и их решений
Я пользуюсь adb по сети, для упарвления андроид приставками – могу рассказать, если интересно.
Тоже 1С под Linux, но без терминального. Тоже 32бит 1С сервер под 64бит debian. Тоже из Краснодара 🙂
Спасибо за полезные статьи, но какая то хрень тебе нагадила в ссылки.
Ссылки удалил, спасибо что заметил!
adb по сети использовал иногда, удобно конечно.
Я с 1С уже не работаю, в другой профиль ушел. Но смотрю, несколько моих статей по 1С и администрированию сервера под нее до сих пор кому-то пригождаются, и это здорово.