# dotcd

> CLI и system tray утилита на Rust для переключения DNS в Linux.

Статус: Open source.

![dotcd](https://vasilev-aleksandr.ru/dotcd.jpg)


## О проекте

- **Формат:** Open source
- **Сфера:** Linux и сетевая инфраструктура
- **Роль:** Проектирование и разработка системной утилиты



## Контекст

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

## Задача

Сделать единый инструмент для управления DNS-профилями в Linux: с командами для скриптов, быстрым переключением из system tray, поддержкой DNS over TLS и простой установкой в Arch Linux.

- CLI для включения и переключения DNS-профилей
- просмотр текущего профиля и статуса
- фоновый режим с GTK и AppIndicator
- профили ControlID и COMSS с DNS over TLS
- системные вызовы для применения конфигурации
- пакет PKGBUILD для Arch Linux

## Проблема

Защищённые DNS-провайдеры приходилось переключать вручную.

## Решение

Создана Rust-утилита с CLI, GTK/AppIndicator и DNS over TLS.

## Как решал задачу

- **Общее ядро для CLI и system tray.** Командный интерфейс и графическое меню используют одну логику переключения профилей. Способ запуска меняется, а состояние и системные операции остаются общими. Результат: Утилиту можно использовать интерактивно и в скриптах без двух независимых реализаций.
- **Явные профили вместо ручного редактирования.** Настройки ControlID и COMSS оформлены как именованные профили. Команда переключает профиль целиком и сообщает активный DNS-сервер и статус. Результат: Переключение стало воспроизводимой операцией, которую легко проверить по выводу утилиты.
- **Фоновый режим для повседневной работы.** GTK и AppIndicator дают доступ к тем же профилям из системного трея. Пользователю не нужно открывать терминал для обычного переключения. Результат: Системная настройка стала доступна как обычное фоновое приложение Linux.
- **Пакет для штатной установки.** Для Arch Linux подготовлен PKGBUILD, чтобы устанавливать и обновлять программу стандартным для системы способом. Результат: Проект распространяется не только как исходный код, но и как устанавливаемый пакет.



## Результат

Утилита опубликована в GitHub и Arch User Repository.

## Метрики

- Отдельные метрики не опубликованы.



## Технологии

- Rust
- Linux
- GTK
- AppIndicator
- DNS over TLS

## Материалы

[Открыть дополнительные материалы](https://profi.ru/profile/VasilyevAA210/?photoId=32987072)

## Связанные услуги

- [API и интеграции](https://vasilev-aleksandr.ru/services/api-integrations/index.md)

## Следующий кейс

[Политех](https://vasilev-aleksandr.ru/cases/politekh/index.md)


## Есть похожая задача?

Опишите исходный процесс и результат, который хотите получить.

[Обсудить похожую задачу](https://t.me/wyndace)
