Опубликовал вторую версию. Забыл сразу учесть, что sing-box поддерживает комментарии и лишние запятые в конфигурации. А моя программа использует класс для разбора json, который такого не понимает.
Почему не Karing? Потому что там очень много лишнего. Мне нужен простой чистый sing-box с конфигом, больше ничего. Единственная проблема, что запускать и переключать через условные bat-файлы слишком муторно. Не хватало только примитивного быстрого управления. И, судя по всему, многие тоже используют оригинал и мучаются со скриптами. Плюс родственникам и друзьям проще дать готовый архив с exe и конфигом, чем объяснять с картинками где куда нажимать, что где как настраивать.
Плюсую!
Всё что вы описываете - это как раз моя проблема. Мне не нужно ничего лишнего, просто голый бинарник + конфиги. Я даже задумывался написать себе нечто подобное на C++, но всё никак не хватало времени. А тут вы появились со своим готовым решением, прямо как палочка-выручалочка.
Большое вам спасибо.
Обновил программу, добавил поддержку TUN.
Режим TUN доступен, если в конфиге sing-box есть tun inbound. Можно переключать через контекстное меню в трее (при необходимости программа автоматически запросит права администратора).
Чтобы сразу включать TUN при запуске, установите параметр tun-start-mode = on в ini конфиге программы (и запускать тогда сразу нужно с правами администратора).
Когда режим TUN активен, иконка в системном трее меняется.
Другие изменения:
Альтернативное отображение селекторов в виде плоского меню (без вложенных подменю). Параметр selector-menu-layout (flat или nested). Удобно, если мало переключателей, потому что сразу видно активный, быстрее переключать.
Уведомления о сбоях. Теперь появляется уведомление, если процесс sing-box не удалось запустить или он завершился аварийно (неожиданно закрылся).
Автоматический Clash API. Если есть селекторы, но секция clash_api отсутствует, программа добавляет её автоматически.
У меня новая версия почему-то не работает. Стартует, иконка в трее появляется, но Sing-Box 1.12.13 не заводится и в логах у него тишина. Ну и “прокси сервер отказывается принимать соединения” понятное дело, потому что не запущен.
Через Quit drover не убивается и походу зависает. Так и остаётся висеть в трее. Убивается только через диспетчер задач. Tun не настраивал, системный прокси выключен. Разбираться что там да как пока не стал, не до этого. Вернул предыдущую 0.3, снова всё работает норм.
Windows 10 с самыми последними обновами.
Спасибо большое за багрепорт! Удалось найти причину. Дело оказалось в больших конфигах. Процесс sing-box создавался замороженным, потом шла передача конфига через stdin, а потом разморозка процесса. Если конфиг большой, то он не помещался в буфер, процесс ждал чтения, которого не было из-за заморозки. Просто поменял код местами. Загрузил новый релиз. Проверьте, пожалуйста, если будет возможность.
Восстановление выбранных селекторов при переключении режима TUN (ранее они сбрасывались в значения по умолчанию, но в меню это не отображалось).
Добавлено ожидание готовности API перед сбросом селекторов (ранее сброс мог не сработать, если ядро запускалось слишком долго).
Отключено переключение системного прокси по клику на значок трея, если активен режим TUN (чтобы избежать случайных переключений без визуальной индикации).
Добавил поддержку BPF-профилей. Программа теперь принимает файлы профилей .bpf в дополнение к обычным JSON-конфигам. Укажите .bpf файл в параметре sb-config-file. Для remote-профилей с включённым автообновлением программа автоматически проверяет обновления конфига примерно через минуту после запуска, а затем периодически с интервалом из профиля (не чаще чем раз в 15 минут). Для применения нового конфига необходим перезапуск программы.
Эти профили генерируются официальными мобильными клиентами sing-box (Android и др.). Или написать небольшой скрипт.
Удобно давать такие профили друзьям и знакомым, чтобы у них автоматически обновлялись конфигурации при изменениях (а не каждому потом свежие версии рассылать вручную).
Добавлено сохранение выбора в селекторах между перезапусками программы. Выбор хранится в sing-box-drover.state.json, включается/отключается опцией selector-persist.
Добавлен режим auto для раскладки меню селекторов: вложенные подменю при большом числе пунктов, плоский список — в остальных случаях.
Пункт меню селектора теперь временно блокируется на время применения изменения.
При сбое ядра sing-box его вывод теперь показывается в сообщении об ошибке.
Сбой сброса соединений во время обновления селектора больше не считается ошибкой.
В запросах обновления BPF-профилей в заголовок User-Agent теперь добавляется версия sing-box.
Сделал редактор bpf-файлов (профили мобильных клиентов sing-box) в браузере: sing-box BPF editor (всё работает локально на устройстве без загрузки на сервер)
Тоже обзавёлся своей поделкой, мультиплатформенной. Если интересно, можете взглянуть: GitHub - mihail-jdanov/DeskBox: GUI app for sing-box · GitHub
В планах есть разобраться с Clash API и прикрутить в GUI селекторы, пока что переключение только через веб-панель (при условии, что включена в конфиге).