From 916055d8bdd5c067f56d95c9643fd639210ed122 Mon Sep 17 00:00:00 2001 From: maximilionus Date: Wed, 9 Jul 2025 15:59:24 +0300 Subject: [PATCH] Linux proxy control script improvement (#7558) * Proper Unix files new-line termination * Fallback for proxy configuration on Linux This introduces a special fallback for platform detection that helps with configuring the proxy settings on minimal (DE-less) setups. Also unifies the check for proper $MODE value. --- .../ServiceLib/Sample/linux_autostart_config | 2 +- v2rayN/ServiceLib/Sample/proxy_set_linux_sh | 28 ++++++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/v2rayN/ServiceLib/Sample/linux_autostart_config b/v2rayN/ServiceLib/Sample/linux_autostart_config index c2f2f4e5..07eb0b27 100644 --- a/v2rayN/ServiceLib/Sample/linux_autostart_config +++ b/v2rayN/ServiceLib/Sample/linux_autostart_config @@ -7,4 +7,4 @@ X-GNOME-Autostart-enabled=true Name[en_US]=v2rayN Name=v2rayN Comment[en_US]=v2rayN -Comment=v2rayN \ No newline at end of file +Comment=v2rayN diff --git a/v2rayN/ServiceLib/Sample/proxy_set_linux_sh b/v2rayN/ServiceLib/Sample/proxy_set_linux_sh index 335cce0e..112bb39f 100644 --- a/v2rayN/ServiceLib/Sample/proxy_set_linux_sh +++ b/v2rayN/ServiceLib/Sample/proxy_set_linux_sh @@ -29,9 +29,6 @@ set_gnome_proxy() { echo "Ignored Hosts: $IGNORE_HOSTS" elif [ "$MODE" == "none" ]; then echo "GNOME: Proxy disabled." - else - echo "GNOME: Invalid mode. Use 'none' or 'manual'." - exit 1 fi } @@ -69,9 +66,6 @@ set_kde_proxy() { # Disable proxy $KWRITECONFIG --file kioslaverc --group "Proxy Settings" --key ProxyType 0 echo "KDE: Proxy disabled." - else - echo "KDE: Invalid mode. Use 'none' or 'manual'." - exit 1 fi # Apply changes by restarting KDE's network settings @@ -84,7 +78,7 @@ detect_desktop_environment() { echo "gnome" return fi - + if [[ "$XDG_CURRENT_DESKTOP" == *"XFCE"* ]] || [[ "$XDG_SESSION_DESKTOP" == *"XFCE"* ]]; then echo "gnome" return @@ -94,7 +88,7 @@ detect_desktop_environment() { echo "gnome" return fi - + if [[ "$XDG_CURRENT_DESKTOP" == *"UKUI"* ]] || [[ "$XDG_SESSION_DESKTOP" == *"ukui"* ]]; then echo "gnome" return @@ -117,6 +111,15 @@ detect_desktop_environment() { return fi done + + # Fallback to GNOME method if CLI utility is available. This solves the + # proxy configuration issues on minimal installation systems, like setups + # with only window managers, that borrow some parts from big DEs. + if command -v gsettings >/dev/null 2>&1; then + echo "gnome" + return + fi + echo "unsupported" } @@ -134,6 +137,11 @@ PROXY_IP=$2 PROXY_PORT=$3 IGNORE_HOSTS=$4 +if ! [[ "$MODE" =~ ^(manual|none)$ ]]; then + echo "Invalid mode. Use 'none' or 'manual'." >&2 + exit 1 +fi + # Detect desktop environment DE=$(detect_desktop_environment) @@ -144,6 +152,6 @@ elif [ "$DE" == "kde" ]; then set_gnome_proxy "$MODE" "$PROXY_IP" "$PROXY_PORT" "$IGNORE_HOSTS" set_kde_proxy "$MODE" "$PROXY_IP" "$PROXY_PORT" "$IGNORE_HOSTS" else - echo "Unsupported desktop environment: $DE" + echo "Unsupported desktop environment: $DE" >&2 exit 1 -fi \ No newline at end of file +fi