Если вы работаете с рутованным 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 без лишних сложностей.
И последнее: перед экспериментами с системными настройками всегда создавайте резервные копии. А если что-то пошло не так, смело пишите в комментариях — постараюсь помочь!
