AI-утилита Позволяет запускать утилиты в изолированном пространстве AWG
  • D 92.2%
  • Makefile 7.8%
Find a file
2026-10-22 13:58:30 +03:00
data 0.1.0 2026-10-22 13:58:30 +03:00
lib 0.1.0 2026-10-22 13:58:30 +03:00
packaging/solus 0.1.0 2026-10-22 13:58:30 +03:00
source 0.1.0 2026-10-22 13:58:30 +03:00
.gitignore 0.1.0 2026-10-22 13:58:30 +03:00
.gitmodules 0.1.0 2026-10-22 13:58:30 +03:00
dub.json 0.1.0 2026-10-22 13:58:30 +03:00
dub.selections.json 0.1.0 2026-10-22 13:58:30 +03:00
Makefile 0.1.0 2026-10-22 13:58:30 +03:00
README.md 0.1.0 2026-10-22 13:58:30 +03:00

awgctl

AmneziaWG в отдельном сетевом пространстве имён (netns): GUI на GtkD и CLI. Порт скриптов awg-netns и awg-run на D.

Сборка и установка

Нужны: компилятор D (ldc2/dmd/gdc), dub, GTK 3, iproute2, iptables, util-linux (setpriv), polkit и запущенный агент polkit (в XFCE — xfce-polkit или polkit-gnome).

make                 # от обычного пользователя; dub сам скачает commandr, dini, gtk-d
sudo make install    # /usr/local/bin/awgctl, /etc/awgctl/awgctl.ini, политика polkit, ярлык

PREFIX=/usr меняет каталог установки бинарника и ярлыка. Конфиг всегда /etc/awgctl/awgctl.ini, политика — /usr/share/polkit-1/actions/org.local.awgctl.policy. Существующий конфиг не перезаписывается (образец кладётся рядом как .new); старый /etc/awgctl.ini от версий до 1.2 при установке переносится в /etc/awgctl/.

Сборка пакета

install поддерживает DESTDIR: файлы раскладываются в указанный каталог, а живая система не меняется (группа не создаётся, старый конфиг не переносится):

make
make install DESTDIR=/tmp/awgctl-root PREFIX=/usr

Группу в пакете создаёт пакетный менеджер по sysusers.d/awgctl.conf (каталог задаётся SYSUSERSDIR). Шаблон для eopkg — packaging/solus/package.yml, архив исходников для него делает make dist.

Использование

awgctl                         # GUI
sudo awgctl up | down | restart
awgctl status                  # от root — с адресами, маршрутами и рукопожатием
awgctl run -- firefox --no-remote -P vpn

Горячие клавиши GUI: Ctrl+U — поднять, Ctrl+D — остановить, Ctrl+R — перезапустить, Ctrl+I — статус, Ctrl+Enter — запустить выбранную программу, Ctrl+F — поиск, F5 — обновить список программ, Ctrl+L — окно журнала, Ctrl+Q — выход.

Трей и автозапуск

С треем закрытие окна прячет его, программа остаётся значком; выход — «Соединение → Выход» или меню значка. Значок — через AppIndicator (StatusNotifierItem), если есть libayatana-appindicator3 или libappindicator3, иначе GtkStatusIcon (XEmbed-трей). Выбор — [gui] tray в конфиге (auto | appindicator | statusicon | none).

«Настройки → Запускать при входе в систему» (или то же в меню значка) создаёт ~/.config/autostart/awgctl.desktop с awgctl gui --tray: при входе появляется только значок. Повторный запуск awgctl показывает уже работающее окно.

Как это устроено

  • GUI всегда работает от пользователя. Всё, что требует root, выполняется отдельным процессом pkexec awgctl up|down|status|exec.
  • exec — root-половина run: ip netns exec <ns> setpriv --reuid --regid --init-groups -- программа. uid берётся из PKEXEC_UID/SUDO_UID, окружение пропускается по белому списку.
  • При запуске через pkexec читается только /etc/awgctl/awgctl.ini, и только если он и каталог принадлежат root и недоступны на запись другим. --config — для ручных запусков от root/sudo.
  • Вывод запущенных из GUI программ — в ~/.cache/awgctl/run.log.

Пароль

По умолчанию pkexec спрашивает пароль администратора и запоминает его на несколько минут (auth_admin_keep). Участникам группы awgctl пароль не нужен (только в локальном активном сеансе): make install создаёт группу и ставит правило /etc/polkit-1/rules.d/50-awgctl.rules (для старого polkit — .pkla).

sudo make adduser            # добавит пользователя, вызвавшего sudo
# или: sudo usermod -aG awgctl ИМЯ

После этого нужно перелогиниться: новый polkit берёт группы из текущего сеанса.

Однооконные программы

Firefox, Telegram, Chromium и т.п. при повторном запуске передают запрос уже открытой копии и выходят — окно откроется не через туннель. Закройте программу или запустите отдельный экземпляр: Firefox --no-remote -P профиль, Telegram -many -workdir каталог, Chromium --user-data-dir=каталог.