Skip to content

Конфигурация модулей

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 для управления конфигурацией модуля:

bash
# Получить значение конфигурации
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:

bash
# Переопределить описание модуля
ksud module config set override.description "Пользовательское описание, отображаемое в менеджере"

При получении списка модулей, если существует конфигурация override.description, она заменит исходное описание из module.prop. Это полезно для:

  • Отображения динамической информации о состоянии в описании модуля
  • Показа пользователям деталей конфигурации во время выполнения
  • Обновления описания на основе состояния модуля без переустановки

Объявление управляемых функций

Модули могут объявлять, какими функциями KernelSU они управляют, используя шаблон конфигурации manage.<feature>. Поддерживаемые функции соответствуют внутреннему перечислению FeatureId в KernelSU:

Поддерживаемые функции:

  • su_compat - Режим совместимости SU
  • kernel_umount - Автоматическое размонтирование ядра
  • enhanced_security - Режим повышенной безопасности
bash
# Объявить, что этот модуль управляет совместимостью 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. Использование других имён функций не вызовет ошибок, но не будет иметь никакого функционального назначения.

Выпускается под лицензией GPL3.