#!/usr/bin/bash # # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # # SPDX-License-Identifier: AGPL-3.0-or-later # ENABLED=yes [[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null ## Установка системных прокси для HTTP,HTTPS,FTP,SOCKS,RSYNC и адреса исключений EXCLUDE ## Для применения требуется перелогиниться ## PROXY_SYSTEM[%PROTOCOL%]=%SERVER% exec_proxy_gnome(){ if [[ ${PROXY_SYSTEM[0],,} == @(n|no|none|disable) ]]; then gsettings set org.gnome.system.proxy mode 'none' gsettings set org.gnome.system.proxy.http enabled false elif [[ -n ${PROXY_SYSTEM[@]} ]]; then gsettings set org.gnome.system.proxy mode 'manual' if [[ -n ${PROXY_SYSTEM[all]} ]]; then gsettings set org.gnome.system.proxy use-same-proxy true PROXY_SYSTEM[http]="${PROXY_SYSTEM[all]}" fi if [[ ${PROXY_SYSTEM[http],,} == @(n|no|none|disable) ]]; then gsettings set org.gnome.system.proxy.http enabled false elif [[ -n ${PROXY_SYSTEM[http]} ]]; then gsettings set org.gnome.system.proxy.http enabled true if [[ ${PROXY_HOST} =~ '@' ]]; then PROXY_USER_PASS="${PROXY_SYSTEM[${PROTOCOL}]##*/}" # Вырезаем протокол http:// PROXY_USER_PASS="${PROXY_USER_PASS%%@*}" # Вырезаем имя пользователя и пароль PROXY_USER_PASS="${PROXY_USER_PASS%%:*}" # Вырезаем имя пользователя PROXY_PASSWORD="${PROXY_USER_PASS#*:}" # Вырезаем пароль [[ ${PROXY_USER_PASS} == ${PROXY_PASSWORD} ]] && unset PROXY_PASSWORD gsettings set org.gnome.system.proxy.http use-authentication true gsettings set org.gnome.system.proxy.http authentication-user "'${PROXY_USER}'" gsettings set org.gnome.system.proxy.http authentication-password "'${PROXY_PASSWORD}'" else gsettings set org.gnome.system.proxy.http use-authentication false fi fi if [[ ${PROXY_SYSTEM[exclude],,} == @(n|no|none|disable) ]]; then gsettings set org.gnome.system.proxy ignore-hosts "['localhost', '127.0.0.0/8', '10.0.0.0/8', '192.168.0.0/16', '172.16.0.0/12', '*.local', '*.local.com', '*.local.ru']" elif [[ -n ${PROXY_SYSTEM[exclude]} ]]; then gsettings set org.gnome.system.proxy ignore-hosts "['${PROXY_SYSTEM[exclude]//,/\', \'}']" fi if [[ ${PROXY_SYSTEM[auto],,} == @(n|no|none|disable) ]]; then gsettings set org.gnome.system.proxy autoconfig-url "''" elif [[ -n ${PROXY_SYSTEM[auto]} ]]; then gsettings set org.gnome.system.proxy mode 'auto' gsettings set org.gnome.system.proxy autoconfig-url "'${PROXY_SYSTEM[auto]}'" fi for PROTOCOL in http https ftp socks; do if [[ ${PROXY_SYSTEM[${PROTOCOL}],,} == @(n|no|none|disable) ]]; then gsettings set org.gnome.system.proxy.${PROTOCOL} host "''" gsettings set org.gnome.system.proxy.${PROTOCOL} port 0 elif [[ -n ${PROXY_SYSTEM[${PROTOCOL}]} ]]; then PROXY_HOST="${PROXY_SYSTEM[${PROTOCOL}]##*/}" # Вырезаем протокол http:// PROXY_HOST_IP_PORT="${PROXY_HOST##*@}" # Вырезаем имя или IP с портом, 192.168.1.1:443 PROXY_HOST="${PROXY_HOST_IP_PORT%:*}" # Только имя или IP PROXY_PORT="${PROXY_HOST_IP_PORT#*:}" # Только порт [[ ${PROXY_PORT} == ${PROXY_HOST_IP_PORT} ]] && PROXY_PORT=8080 # Если порт не задан gsettings set org.gnome.system.proxy.${PROTOCOL} host "'${PROXY_HOST}'" gsettings set org.gnome.system.proxy.${PROTOCOL} port ${PROXY_PORT} fi done fi } ################ ##### MAIN ##### ################ exec_proxy_gnome $@