Xray core returns empty string в Happ

На балконе ноутбук уже показал список серверов, кнопка Connect мигнула, и вместо канала всплыло «xray core returns empty string». Страница с билетами осталась на крутилке, хотя без Happ тот же сайт открывается. Вкладка fluxkern.wiki так и висела рядом: пустой ответ ядра — тихий отказ, не три буквы EOF и не фраза, что службу остановили.

VPN на телефоне: Wi‑Fi и мобильная сеть
Пустой ответ ядра на телефоне вспыхивает после старта процесса, до живого канала.

Ядро стартовало и сразу отдало пустоту

Happ успевает запустить процесс ядра: в журнале есть строка старта, и только следом появляется empty string. Значок туннеля при этом не обязан задерживаться. Процесс может завершиться сам и оставить клиенту пустой ответ вместо статуса канала, пока домашний браузер без кнопки спокойно открывает обычные сайты.

Важно: пустая строка не называет узел и не сообщает, что подписка кончилась. Она фиксирует только то, что вызов к ядру вернулся без текста. Пока сверху нет другой фразы, смена страны в списке ничего не объясняет и легко затирает единственную полезную строку журнала.
Что на экране
empty string сразу после старта ядра
Чего нет
фразы, что службу остановили
Клиент
Happ из магазина приложений
Доступ
свой профиль подписки Nasa VPN

Служба на компьютере в этот момент может оставаться в состоянии «работает». Остановка службы — другая карточка: там система прямо пишет, что процесс службы завершили. Здесь вызов формально прошёл, а содержательного ответа не приехало, поэтому чинить «службу Windows» вслепую рано.

EOF выглядит как конец потока, когда труба между Happ и ядром обрывается. Пустая строка — когда вызов завершился, а внутри ноль символов. Путать их значит крутить разрешение VPN там, где ядру отдали пустой конфиг. Короткий смысл трёх букв разобран отдельно: что значит ошибка EOF.

Откуда у ядра берётся пустой ответ

Часто в процесс уходит конфиг без рабочего исходящего узла. Карточка в списке есть, галочка стоит, а внутри обрывок, комментарий или строка, которую ядро не умеет исполнить. Оно стартует, не находит выход и возвращает пустоту вместо ошибки разбора.

Так выходит после ручной правки ссылки: отрезали хвост при пересылке, вставили текст из заметки с переносом строки, оставили в профиле чужой кусок рядом с обычными узлами. Ядро не обязано кричать «формат чужой». Молчаливый выход для него честный результат.

Второй источник — файл ядра нулевой длины или не тот бинарник после кривого обновления. Процесс «запускается», потому что имя файла на месте, и сразу закрывается. В диспетчере это мелькание короче секунды. Магазинное обновление возвращает штатный файл, вложение из чата — нет.

Третий источник — профиль выбран, но сервер внутри него не отмечен. Кнопка Connect тогда стучится в ядро с пустым выбором. На экране это легко принять за поломку сети. Отметьте одну строку своего списка и повторите запуск один раз, не десять.

Телефон: право, батарея и соседний туннель

Откройте журнал и выпишите строку над empty string. Если там отказ в праве VPN, пустота вторична: система не дала интерфейс, ядро вышло без текста. Повторное разрешение в системном окне и один Connect отделяют этот случай от битого профиля.

Снимите с Happ жёсткую экономию батареи, если тост вспыхивает только после того, как экран на секунду гаснет. Часть прошивок Xiaomi, Huawei и Realme убивает процесс в момент старта, и клиент успевает записать лишь пустой ответ. Автозапуск здесь уместен.

Выгрузите соседний туннель. Два клиента делят один интерфейс, и ядро Happ может стартовать вхолостую. Симптом тише, чем при мгновенном EOF: нет трёх букв, есть пустая строка. Выключите чужой Always-on и оставьте в системе один профиль Happ.

Не ставьте сборку «чтобы ядро заговорило». Подпись не совпадёт с магазинной, два процесса начнут спорить за одни файлы. Если клиент старый, обновите его из магазина и импортируйте тот же свой URL ещё раз, не трогая срок оплаты.

Когда чинить ссылку, а не аппарат

Права на месте, чужого VPN нет, файл ядра не пустой, а строка остаётся на одной карточке. Тогда текст профиля пустой по смыслу. Удалите карточку из Happ и вставьте ссылку целиком, как её отдал бот, без дописанного от руки хвоста и без переноса «для красоты».

Чужой ключ из канала даёт ту же пустоту, когда его уже отозвали: ядро получает заготовку без живого выхода. Это не запасной доступ на вечер. Рабочий URL лежит в бот Nasa VPN, и повторно импортировать стоит только его, а не скрин из общего чата.

Пока срок не вышел, вторую покупку ради пустой строки не открывают. Обновление текущего профиля сохраняет слоты и дату. Новая оплата нужна, когда доступ кончился, а не когда ядро один раз промолчало на старой карточке.

Одну строку держите на одном устройстве. Копия того же ключа на втором телефоне чаще рвёт уже поднятую сессию, но отозванный общий ключ умеет и молчаливый старт. Соседу нужна отдельная строка, не ваш QR из переписки.

Один повторный старт после правки

Сделайте одно изменение и один Connect. Десять нажатий подряд забивают журнал одинаковыми пустыми ответами, и строка-причина уезжает вверх. Скрин верхней осмысленной фразы полезнее серии одинаковых тостов, которые уже ничего не добавляют.

Если после чистого импорта тост сменился на сетевую ошибку, вы вышли из этого сценария. Дальше читают уже её, а не крутят батарею по второму кругу. Живой процесс без сокета разобран отдельно: Network error occurred при живом ядре.

Другой ваш аппарат со своей строкой, если он подключается, показывает, что счёт жив. Тогда на этом устройстве остаётся клиент или локальный текст профиля. Новая карта при живом втором профиле канал не создаёт: оплата не подставляет бинарник ядра и не заполняет пустой исходящий узел.

Когда ссылка мертва или срок вышел, возьмите рабочий URL в боте или продлите доступ на страница оплаты и импортируйте профиль заново. Пустой ответ после этого должен смениться либо каналом, либо уже другой, конкретной строкой журнала.

Если пустота вернулась на следующий день

Запишите три вещи до новой попытки: точное время тоста, имя выбранной строки и сеть, на которой он вспыхнул. Без этой пометки завтрашний такой же экран снова выглядит как «всё сломалось», хотя вчера вы уже отсекли батарею. Одна строка в заметке экономит второй круг одних и тех же кнопок.

Повторите Connect на другой строке того же профиля, не на чужом ключе. Если пустая строка только у одной записи, ядро живо, а плох этот кусок списка. Если пусто на всех своих строках, дело в тексте всей карточки или в файле ядра, и перебор стран уже ничего не добавит.

После магазинного обновления Happ откройте профиль заново и не нажимайте Connect, пока список узлов не прогрузился. Ранний старт на полупустой карточке как раз и отдаёт ядру пустой выход. Подождите, пока строки появятся, отметьте одну и только потом включайте туннель.

Оставьте в журнале последний осмысленный фрагмент над empty string. Если завтра фраза сменится на отказ сокета или на EOF, это уже другой разбор, и вчерашние шаги про пустой конфиг повторять не нужно. Новый текст ошибки — повод сменить гипотезу, а не сносить клиент.

← Все статьи