Конфигурация модулей
KernelSU предоставляет встроенную систему конфигурации, которая позволяет модулям хранить постоянные или временные настройки в формате ключ-значение. Конфигурации хранятся в бинарном формате по пути /data/adb/ksu/module_configs/<module_id>/ и имеют следующие характеристики:
Типы конфигурации
- Постоянная конфигурация (
persist.config): сохраняется после перезагрузки до явного удаления или деинсталляции модуля - Временная конфигурация (
tmp.config): автоматически очищается на этапе post-fs-data при каждой загрузке
При чтении конфигурации временные значения имеют приоритет над постоянными для одного и того же ключа.
Использование конфигурации в скриптах модуля
Все скрипты модуля (post-fs-data.sh, service.sh, boot-completed.sh и др.) выполняются с установленной переменной окружения KSU_MODULE, содержащей ID модуля. Вы можете использовать команды ksud module config для управления конфигурацией модуля:
# Получить значение конфигурации
value=$(ksud module config get my_setting)
# Установить постоянное значение конфигурации
ksud module config set my_setting "some value"
# Установить временное значение конфигурации (очищается после перезагрузки)
ksud module config set --temp runtime_state "active"
# Установить значение из stdin (полезно для многострочного или сложного текста)
ksud module config set my_key <<EOF
многострочное
текстовое значение
EOF
# Или передать через pipe из команды
echo "значение" | ksud module config set my_key
# Явный флаг stdin
cat file.json | ksud module config set json_data --stdin
# Вывести все записи конфигурации (объединенные постоянные и временные)
ksud module config list
# Удалить запись конфигурации
ksud module config delete my_setting
# Удалить временную запись конфигурации
ksud module config delete --temp runtime_state
# Очистить все постоянные конфигурации
ksud module config clear
# Очистить все временные конфигурации
ksud module config clear --tempОграничения валидации
Система конфигурации применяет следующие ограничения:
- Максимальная длина ключа: 256 байт
- Максимальная длина значения: 1МБ (1048576 байт)
- Максимальное количество записей конфигурации: 32 на модуль
- Формат ключа: Должен соответствовать
^[a-zA-Z][a-zA-Z0-9._-]+$(как ID модуля)- Должен начинаться с буквы
- Может содержать буквы, цифры, точки, подчеркивания или дефисы
- Минимальная длина: 2 символа
- Формат значения: Без ограничений - может содержать любые UTF-8 символы, включая переносы строк и управляющие символы
- Хранится в бинарном формате с префиксом длины для безопасной обработки всех данных
Жизненный цикл
- При загрузке: все временные конфигурации очищаются на этапе post-fs-data
- При деинсталляции модуля: все конфигурации (постоянные и временные) автоматически удаляются
- Конфигурации хранятся в бинарном формате с магическим числом
0x4b53554d("KSUM") и проверкой версии
Сценарии использования
Система конфигурации идеальна для:
- Пользовательские настройки: хранение настроек модуля, которые пользователи настраивают через WebUI или action-скрипты
- Флаги функций: включение/отключение функций модуля без переустановки
- Состояние во время выполнения: отслеживание временного состояния, которое должно сбрасываться при перезагрузке (используйте временную конфигурацию)
- Настройки установки: запоминание выбора, сделанного при установке модуля
- Сложные данные: Хранение JSON, многострочного текста, данных в кодировке Base64 или любого структурированного содержимого (до 1МБ)
ЛУЧШИЕ ПРАКТИКИ
- Используйте постоянную конфигурацию для пользовательских настроек, которые должны сохраняться после перезагрузки
- Используйте временную конфигурацию для состояния во время выполнения или флагов функций, которые должны сбрасываться при загрузке
- Проверяйте значения конфигурации в скриптах перед их использованием
- Используйте команду
ksud module config listдля отладки проблем с конфигурацией
Расширенные возможности
Система конфигурации модулей предоставляет специальные ключи конфигурации для расширенных сценариев использования:
Переопределение описания модуля
Вы можете динамически переопределить поле description из module.prop, установив ключ конфигурации override.description:
# Переопределить описание модуля
ksud module config set override.description "Пользовательское описание, отображаемое в менеджере"При получении списка модулей, если существует конфигурация override.description, она заменит исходное описание из module.prop. Это полезно для:
- Отображения динамической информации о состоянии в описании модуля
- Показа пользователям деталей конфигурации во время выполнения
- Обновления описания на основе состояния модуля без переустановки
Объявление управляемых функций
Модули могут объявлять, какими функциями KernelSU они управляют, используя шаблон конфигурации manage.<feature>. Поддерживаемые функции соответствуют внутреннему перечислению FeatureId в KernelSU:
Поддерживаемые функции:
su_compat- Режим совместимости SUkernel_umount- Автоматическое размонтирование ядраenhanced_security- Режим повышенной безопасности
# Объявить, что этот модуль управляет совместимостью SU и включает её
ksud module config set manage.su_compat true
# Объявить, что этот модуль управляет размонтированием ядра и отключает его
ksud module config set manage.kernel_umount false
# Удалить управление функцией (модуль больше не контролирует эту функцию)
ksud module config delete manage.su_compatКак это работает:
- Наличие ключа
manage.<feature>указывает, что модуль управляет этой функцией - Значение указывает желаемое состояние:
true/1для включения,false/0(или любое другое значение) для отключения - Чтобы прекратить управление функцией, полностью удалите ключ конфигурации
Управляемые функции доступны через API списка модулей как поле managedFeatures (строка, разделённая запятыми). Это позволяет:
- Менеджеру KernelSU определять, какие модули управляют какими функциями KernelSU
- Предотвращать конфликты, когда несколько модулей пытаются управлять одной и той же функцией
- Улучшить координацию между модулями и основным функционалом KernelSU
ТОЛЬКО ПОДДЕРЖИВАЕМЫЕ ФУНКЦИИ
Используйте только предопределённые имена функций, перечисленные выше (su_compat, kernel_umount, enhanced_security). Они соответствуют реальным внутренним функциям KernelSU. Использование других имён функций не вызовет ошибок, но не будет иметь никакого функционального назначения.