Как настроить Matrix Synapse для корректной работы Element X
Настройка Matrix Synapse для Element X: исправление ошибок регистрации, shared secret, MAS/sliding-sync, настройка TURN и выбор Jitsi или Element Call.
Как настроить Matrix Synapse сервер для корректной работы с клиентом Element X?
Проблема: На сервере с открытой регистрацией и подтверждением через токен доступа пользователи могут успешно регистрироваться через клиент Element, но при попытке регистрации через клиент Element X возникает ошибка.
Цель: Использовать Matrix в небольшой группе в качестве замены видеозвонкам и конференциям через Telegram.
Дополнительный вопрос: В настоящее время для видеоконференций Element использует виджет jitsi-meet. Я видел видео презентацию, в которой демонстрировались два способа проведения видеоконференций (устаревший и новый, якобы нативный встроенный). На видео это выглядело отлично. Существует ли такая функциональность в текущей версии или это находится в стадии бета-тестирования?
Чтобы Element X корректно регистрировался и работал с сервером Matrix Synapse, проверьте настройки регистрации в homeserver.yaml (enable_registration, registration_shared_secret/registration_requires_token) и учтите, что Element X часто требует Matrix Authentication Service (MAS) / sliding‑sync для полноценных способов входа. Частая причина ошибки — отсутствие MAS или некорректный shared secret/токен; сначала воспроизведите запрос регистрации (curl) и посмотрите логи Synapse, затем исправляйте конфиг или ставьте MAS.
Содержание
- Настройка Matrix Synapse для Element X
- Подготовка: быстрое воспроизведение и логирование
- Конфигурация Synapse (homeserver.yaml)
- MAS и Sliding Sync — что важно для Element X
- TURN, .well-known, TLS и WebRTC для звонков
- Чеклист: пошаговые действия для ремонта
- Element Call vs Jitsi — текущее состояние и что выбрать
- Частые ошибки и их устранение
- Источники
- Заключение
Настройка Matrix Synapse для Element X
Коротко: Element (классический клиент) и Element X по-разному взаимодействуют с сервером. Element X ожидает поддержку современных потоков аутентификации и sliding‑sync (или MAS-посредника), поэтому на одном и том же Synapse регистрация может проходить в Element, но падать в Element X. Подходы к решению — в порядке от простого к надёжному:
- Быстрая проверка: убедиться, что в homeserver.yaml включена регистрация (enable_registration) и что синтаксис корректен; перезапустить Synapse и повторить попытку регистрации.
- Удобный и часто рабочий вариант: использовать registration_shared_secret (или registration_shared_secret_file) вместо сложных токен‑flow для регистрации из клиента.
- Если вы хотите полноценную поддержку OIDC/SSO, sliding‑sync и современных flow — развернуть MAS (Matrix Authentication Service) / proxy, потому что Synapse сам по себе не даёт sliding‑sync, а Element X на него опирается.
Практическая подсказка: многие проблемы быстро диагностируются командами curl и просмотром логов (см. разделы ниже). Подробнее по параметрам конфигурации — в официальной документации Synapse: https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html и обсуждении ошибки регистрации: https://github.com/matrix-org/synapse/issues/2942. Также полезно чтение практических заметок про типичную ошибку регистрации: https://medium.com/@nicolasguyot/fixing-registration-has-been-disabled-in-matrix-synapse-api-what-everyone-misses-f588d13c9747.
Подготовка: быстрое воспроизведение и логирование
Что сделать в первую очередь — три простых шага.
- Воспроизведите проблему с клиента и напрямую:
- Попробуйте зарегистрировать пользователя через curl (пример):
curl -X POST "http://localhost:8008/_matrix/client/r0/register" \
-H "Content-Type: application/json" \
-d '{"username":"testuser","password":"SecurePass123!","auth":{"type":"m.login.dummy"}}'
Этот пример показан в практическом руководстве по ошибке регистрации — он поможет понять, возвращает ли Synapse причину (M_UNKNOWN / M_FORBIDDEN и т.д.) https://medium.com/@nicolasguyot/fixing-registration-has-been-disabled-in-matrix-synapse-api-what-everyone-misses-f588d13c9747.
- Посмотрите логи Synapse:
- systemd:
journalctl -u matrix-synapse -f - docker:
docker logs -f <synapse-container>
Ищите строки с ошибками регистрации, упоминанияregistrationилиM_UNKNOWN.
- Проверьте сеть и прокси:
- Element X ожидает корректного TLS и доступности эндпоинтов (/_matrix, sliding‑sync, WebRTC-related endpoints). Если Synapse за reverse‑proxy (nginx), смотрите и его логи.
Конфигурация Synapse (homeserver.yaml)
Ключевые параметры, которые реально влияют на регистрацию:
- enable_registration: true — разрешает регистрацию клиентам.
- registration_requires_token: true/false — если вы используете token‑based подтверждение, нужно включить и правильно выдавать токены клиенту.
- registration_shared_secret / registration_shared_secret_file — удобный способ для серверной/клиентской автоматической регистрации; Synapse может хранить секрет в файле (и создать его при первом запуске) — об этом есть упоминание в обсуждении: https://github.com/matrix-org/synapse/issues/2942.
- enable_registration_without_verification: true — полностью отключает проверки (небезопасно; использовать только для теста).
Пример минимального фрагмента:
enable_registration: true
# Вариант A: регистрация через shared secret (рекомендован для упрощения регистрации)
registration_shared_secret_file: "/data/registration_shared_secret"
# Вариант B: если используете токены
registration_requires_token: true
# (только для временной отладки)
enable_registration_without_verification: false
Рекомендации:
- После правки — перезапустите Synapse:
systemctl restart matrix-synapseили перезапустите контейнер. - Если вы пользуетесь
registration_requires_token, убедитесь, что Element X действительно получает и передаёт этот токен; на практике проще использовать shared secret для автоматической регистрации, чем пытаться протянуть токен во все клиенты. - Для создания аккаунта вручную можно использовать
register_new_matrix_user(см. документацию Synapse).
Подробности конфигурации — в официальном руководстве Synapse: https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html.
MAS и Sliding Sync — что важно для Element X
Почему Element X ведёт себя иначе? Потому что Element X ориентирован на новые возможности экосистемы: sliding‑sync и расширенные способы аутентификации (OIDC/SSO и т.п.). Эти возможности обычно реализуются не «в ядре» Synapse, а через внешние компоненты/прокси — в частности Matrix Authentication Service (MAS). На практике это значит:
- Без MAS Element X может показывать сообщения вроде «Server not supported» или «The selected homeserver doesn’t support password or oidc login» — именно такие случаи описаны в обсуждении на форуме: https://forum.cloudron.io/topic/12888/has-anyone-got-the-element-x-app-working-with-cloudron-matrix.
- Sliding‑sync, который даёт быстрый отклик и экономию трафика в Element X, обычно «включается» через MAS/прокси; Synapse сам по себе не предоставляет sliding‑sync‑endpoint в старых сборках.
Что делать:
- Если вам нужна полная поддержка Element X (включая OIDC/SSO и sliding‑sync) — разверните MAS/соответствующий прокси и настройте его для работы с вашим Synapse.
- Если нужен быстрый рабочий вариант без MAS — используйте описанные выше изменения в homeserver.yaml (shared secret / временное отключение проверок), но помните про ограничения (и безопасность).
Источник по проблеме и решениям: обсуждение на Cloudron и общие рекомендации по конфигу Synapse — https://forum.cloudron.io/topic/12888/has-anyone-got-the-element-x-app-working-with-cloudron-matrix.
TURN, .well-known, TLS и WebRTC для звонков
Для надёжных видеозвонков и конференций (особенно когда участники за NAT) нужен правильно настроенный WebRTC‑стек:
- TURN (coturn)
- WebRTC часто требует реле (TURN). Установите coturn на выделенный хост/VM и настройте его с секретом.
- В Synapse в homeserver.yaml указывают turn_uris и shared secret, например:
turn_uris:
- "turn:turn.example.com:3478?transport=udp"
- "turn:turn.example.com:3478?transport=tcp"
turn_shared_secret: "YOUR_TURN_SECRET"
- На стороне coturn обычно включают
use-auth-secretи задаютstatic-auth-secret. Подробности по параметрам TURN — в документации Synapse и общих гайдах по coturn.
- .well-known и Matrix‑RTC
- Element X / Element Call иногда ожидают корректные .well-known‑эндпоинты (например
/.well-known/matrix/clientи/или/.well-known/element/element.json) с указанием базовых URL для homeserver и RTC. Без корректного .well-known клиент может неправильно выбирать сервер для звонков. - Если у вас reverse proxy (nginx), разместите соответствующие JSON‑файлы на корне домена или настройте проксирование.
- TLS и прокси
- Убедитесь, что Synapse доступен по HTTPS и что WebSocket‑проксирование настроено корректно (важно для real‑time). Если Synapse за nginx/apache — проверьте конфигурацию, headers и websocket upgrade.
Практические инструкции по установке/настройке Synapse + прокси есть в больших пошаговых руководствах, например на Хабре: https://habr.com/ru/articles/739606/.
Чеклист: пошаговые действия для ремонта
- Воспроизведите ошибку через Element X и напрямую через curl (см. пример выше).
- Просмотрите логи Synapse (journalctl/docker logs).
- Проверьте в homeserver.yaml:
- enable_registration: true
- registration_shared_secret / registration_shared_secret_file или registration_requires_token
- server_name совпадает с тем, что указывает клиент
- Для быстрого теста: временно включите enable_registration_without_verification: true (на короткое время, только для отладки).
- Если регистрация через токен — убедитесь, что Element X получает токен (сложнее). Лучше использовать shared secret.
- Если Element X требует sliding‑sync/OIDC — разверните MAS/прокси (см. форум Cloudron).
- Настройте TURN (coturn) и проверьте .well-known и TLS.
- Перезапустите Synapse и протестируйте повторно.
- Для видеоконференций: сначала проверьте встроенный Jitsi‑виджет; затем протестируйте Element Call (если доступен).
Время: базовая проверка — 20–60 минут; развёртывание MAS/TURN — от часа и более в зависимости от окружения.
Element Call vs Jitsi — текущее состояние и что выбрать
Коротко про два варианта видеоконференций:
- Jitsi (виджет) — стабильный, широко используемый. Element встраивает Jitsi‑виджет и он по‑прежнему надёжен для групповых звонков.
- Element Call — нативное решение на базе Matrix, которое Element интегрирует в Element X и планирует как замену Jitsi. Официальное объяснение и анонс — в блоге Element: Introducing Native Matrix VoIP with Element Call и Element X: Ignition. Репозиторий проекта: https://github.com/element-hq/element-call.
Статус (на основе объявлений):
- Element Call уже интегрируется в Element X, но функционал всё ещё развивается и в некоторых сценариях может быть менее зрелым, чем Jitsi. На видео всё выглядит красиво — в реальной жизни может понадобиться донастройка (TURN, .well-known, версии клиентов).
Рекомендация: для небольшой группы, если вам нужна надёжность «сейчас» — используйте встроенный Jitsi. Если хотите нативную E2E‑опцию и готовы тестировать — включите/попробывайте Element Call (следите за обновлениями).
Источники: анонсы Element и репозиторий Element Call — https://element.io/blog/introducing-native-matrix-voip-with-element-call/, https://element.io/blog/element-x-ignition/, https://github.com/element-hq/element-call.
Частые ошибки и их устранение
-
“Registration has been disabled (M_UNKNOWN)”
Причина: enable_registration=false или проблемы с registration flow. Решение: проверить homeserver.yaml, перезапустить Synapse и повторить curl‑запрос. См. практику в обсуждении: https://github.com/matrix-org/synapse/issues/2942. -
“Server not supported” / “The selected homeserver doesn’t support password or oidc login” (Element X)
Причина: отсутствует MAS/sliding‑sync или не реализованы ожидаемые flow. Решение: развернуть MAS/прокси или переключиться на простую регистрацию через shared secret. Подробности — обсуждение Cloudron: https://forum.cloudron.io/topic/12888/has-anyone-got-the-element-x-app-working-with-cloudron-matrix. -
Проблемы с видеозвонками (плохой звук, нет видео, не соединяется)
Причина: отсутствует или неправильно настроен TURN, проблемы с TLS/.well‑known или проксированием WebSocket. Решение: настроить coturn, открыть нужные порты и проверить .well‑known.
Если остаются странные ошибки — соберите вывод curl, фрагменты логов Synapse и сообщения из Element X и сверяйтесь с документацией/форумом; обычно по логам быстро видно, что именно отклоняется.
Источники
- https://github.com/matrix-org/synapse/issues/2942
- https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html
- https://forum.cloudron.io/topic/12888/has-anyone-got-the-element-x-app-working-with-cloudron-matrix
- https://medium.com/@nicolasguyot/fixing-registration-has-been-disabled-in-matrix-synapse-api-what-everyone-misses-f588d13c9747
- https://element.io/blog/introducing-native-matrix-voip-with-element-call/
- https://element.io/blog/element-x-ignition/
- https://github.com/element-hq/element-call
- https://habr.com/ru/articles/739606/
- https://qna.habr.com/q/1404836
Заключение
Если кратко: начните с простых вещей — воспроизведите регистрацию через curl и проверьте логи, убедитесь, что в homeserver.yaml включена регистрация и установлен корректный shared secret или токен; перезапустите Synapse. Если же вы хотите, чтобы Element X использовал все современные возможности (sliding‑sync, OIDC/SSO и т.п.), разверните MAS/прокси — это решит большинство проблем с входом и синхронизацией. Для видеозвонков сначала проверьте Jitsi (надёжно), затем тестируйте Element Call — он интегрирован в Element X, но всё ещё развивается; настройте TURN и .well‑known, и у вас получится стабильная замена звонкам в Telegram на базе Matrix Synapse и Element X.