fixed linux open link

This commit is contained in:
dranik
2026-05-15 10:27:47 +03:00
parent 4ae2b32083
commit c90107bb7a
3 changed files with 35 additions and 24 deletions

View File

@@ -1,10 +1,9 @@
#!/usr/bin/env xdg-open
[Desktop Entry]
Type=Application
Name=AmneziaVPN
Version=1.0
Comment=Client of your self-hosted VPN
Exec=AmneziaVPN %u
Exec=/opt/AmneziaVPN/bin/AmneziaVPN %u
Icon=/usr/share/pixmaps/AmneziaVPN.png
Categories=Network;Qt;Security;
MimeType=x-scheme-handler/vpn;

View File

@@ -30,6 +30,13 @@ if sudo systemctl is-active --quiet $APP_NAME; then
sudo rm -rf /etc/systemd/system/$APP_NAME.service >> $LOG_FILE
fi
# Absolute Exec= in .desktop: Firefox/portal invoke handlers with a minimal PATH.
DESKTOP_IN_APP="$APP_PATH/$APP_NAME.desktop"
if [ -f "$DESKTOP_IN_APP" ]; then
sudo sed -i "s|^Exec=.*|Exec=$APP_PATH/bin/$APP_NAME %u|" "$DESKTOP_IN_APP" >> $LOG_FILE 2>&1 || true
sudo sed -i '1{/^#!\/usr\/bin\/env xdg-open$/d;}' "$DESKTOP_IN_APP" >> $LOG_FILE 2>&1 || true
fi
sudo chmod -R a-w $APP_PATH/
sudo cp $APP_PATH/$APP_NAME.service /etc/systemd/system/ >> $LOG_FILE
@@ -44,8 +51,33 @@ sudo cp $APP_PATH/$APP_NAME.desktop /usr/share/applications/ >> $LOG_FILE
sudo cp $APP_PATH/$APP_NAME.png /usr/share/pixmaps/ >> $LOG_FILE
sudo chmod 555 /usr/share/applications/$APP_NAME.desktop >> $LOG_FILE
if command -v xdg-mime &> /dev/null; then
xdg-mime default $APP_NAME.desktop x-scheme-handler/vpn >> $LOG_FILE 2>&1 || true
if command -v update-desktop-database &> /dev/null; then
sudo update-desktop-database /usr/share/applications >> $LOG_FILE 2>&1 || true
fi
register_vpn_scheme_for_user() {
local user="$1"
if [ -z "$user" ] || [ "$user" = "root" ]; then
return
fi
if ! command -v xdg-mime &> /dev/null; then
return
fi
local home
home=$(getent passwd "$user" | cut -d: -f6)
if [ -z "$home" ] || [ ! -d "$home" ]; then
echo "skip xdg-mime for $user: no home" >> $LOG_FILE
return
fi
echo "xdg-mime default for user $user" >> $LOG_FILE
sudo -u "$user" env HOME="$home" \
xdg-mime default "$APP_NAME.desktop" x-scheme-handler/vpn >> $LOG_FILE 2>&1 || true
}
if [ -n "$SUDO_USER" ] && [ "$SUDO_USER" != "root" ]; then
register_vpn_scheme_for_user "$SUDO_USER"
elif [ -n "$USER" ] && [ "$USER" != "root" ]; then
register_vpn_scheme_for_user "$USER"
fi
echo "user desktop creation loop ended" >> $LOG_FILE

View File

@@ -1,20 +0,0 @@
# Демо: `vpn://` из браузера (как `tg://`)
Браузер показывает диалог «разрешить сайту открывать ссылки **vpn** через приложение» только если:
1. Страница открыта по **HTTPS** (или `localhost` в части конфигураций; для надёжного сценария как у `tlgrm.ru`**настоящий TLS**).
2. В ОС зарегистрирован обработчик схемы **`vpn`** → AmneziaVPN (см. [AH-355-deep-link-approval-and-operations.md](../../docs/plans/AH-355-deep-link-approval-and-operations.md)).
3. Переход на `vpn://` сделан **жестом пользователя** (клик по ссылке / кнопке), а не только автозапуск при загрузке страницы (политики браузера могут блокировать).
## Файлы
- [vpn-deeplink-demo.html](vpn-deeplink-demo.html) — поле для вставки/редактирования `vpn://…`, кнопки открытия и **лог на странице** (+ дублирование в консоль браузера). Открывайте **по HTTPS**.
## Windows: регистрация `vpn`
Один раз запустите установленный AmneziaVPN — при первом запуске клиент записывает обработчик в реестр пользователя (`HKCU\Software\Classes\vpn`). Без этого шага Браузер может не предложить Amnezia.
## Проверка конкурента за схему `vpn`
- **Windows:** «Параметры приложений по умолчанию» → протоколы / сопоставления URI, или `regedit``HKEY_CURRENT_USER\Software\Classes\vpn`.
- **macOS:** при конфликте система откроет не то приложение; проверьте «Открыть с помощью» для тестового `vpn://` в Safari.