Если вы работаете с рутованным Android-устройством и используете Termux для продвинутых задач, рано или поздно может возникнуть необходимость запускать его утилиты из root-оболочки. Но здесь есть нюансы: даже после успешной команды su
скрипты Termux могут не находить свои библиотеки, что приводит к ошибкам. Давайте разберёмся, как это исправить, и почему стандартные методы вроде LD_LIBRARY_PATH
не всегда срабатывают.
Кстати, если вы впервые сталкиваетесь с такой ситуацией, не переживайте — это распространённая проблема, и её решение проще, чем кажется. Главное — понять, как Termux и Android взаимодействуют на уровне файловой системы.
Почему LD_LIBRARY_PATH не помогает
На обычных Linux-системах переменная окружения LD_LIBRARY_PATH
позволяет указать каталоги с библиотеками, которые нужны программам. Однако Android — не совсем обычный Linux. Здесь используется собственная реализация libc (стандартной библиотеки языка C) и динамический линковщик /system/bin/linker64
, который игнорирует LD_LIBRARY_PATH
.
Но есть и хорошие новости: Termux не полагается на эту переменную. Вместо этого пути к библиотекам жестко прописаны в самих исполняемых файлах Termux. Проверить это можно с помощью команды:
readelf -d $(which nano) | grep RUNPATH
Вы увидите что-то вроде RUNPATH Library runpath: [/data/data/com.termux/files/usr/lib]
. Это означает, что линковщик Android сначала ищет библиотеки именно в этом каталоге, независимо от окружения.
Обратите внимание: если вы попытаетесь вручную задать LD_LIBRARY_PATH
в root-сессии, это не сработает. Вместо этого сосредоточьтесь на настройке переменной PATH
.
Настройка PATH для доступа к бинарникам Termux
Основная задача — сделать так, чтобы root-оболочка «видела» исполняемые файлы Termux. Они расположены в /data/data/com.termux/files/usr/bin
, но этот путь по умолчанию не добавлен в переменную PATH
суперпользователя.
Вот как это исправить:
- Перейдите в root-режим, выполнив
su
. - Экспортируйте путь к бинарникам Termux в текущей сессии: export PATH=”/data/data/com.termux/files/usr/bin:$PATH”
- Проверьте, что путь добавлен: echo $PATH
Теперь вы можете запускать утилиты Termux напрямую, например:
nano /system/etc/hosts
Если нужно сделать изменение постоянным, добавьте экспорт пути в файл инициализации оболочки (например, .bashrc
в домашней директории root). Но будьте внимательны: редактирование системных файлов требует осторожности.
Дополнительные рекомендации и проверка
Иногда даже после настройки PATH
могут возникать ошибки из-за конфликтов библиотек. Например, если Termux-программа пытается использовать библиотеки из /system/lib64
вместо своих собственных. В таком случае:
- Убедитесь, что в выводе
readelf -d
для проблемного бинарника указан правильныйRUNPATH
. - Если путь отсутствует, возможно, файл был модифицирован — переустановите пакет через
pkg install
.
Также учитывайте, что некоторые программы Termux зависят от дополнительных переменных окружения (например, TERMUX_PREFIX
). Их можно экспортировать аналогично PATH
:
export TERMUX_PREFIX="/data/data/com.termux/files/usr"
Подводя итог: основная задача — корректно настроить PATH
, а не манипулировать переменными линковщика. Если вы всё сделали правильно, Termux-утилиты будут работать даже из-под root без лишних сложностей.
И последнее: перед экспериментами с системными настройками всегда создавайте резервные копии. А если что-то пошло не так, смело пишите в комментариях — постараюсь помочь!