- D 92.2%
- Makefile 7.8%
| data | ||
| lib | ||
| packaging/solus | ||
| source | ||
| .gitignore | ||
| .gitmodules | ||
| dub.json | ||
| dub.selections.json | ||
| Makefile | ||
| README.md | ||
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=каталог.