當前位置: 首頁>>技術教程>>正文


bash – 設置Ubuntu係統代理設置而無需從命令行重新啟動

, , ,

問題描述

我正在使用Ubuntu 14.04。我想從命令行更改http proxy設置。這應該等效於在GUI(所有設置->網絡->網絡代理)中進行更改,然後單擊按鈕Apply System Wide。我不想重新啟動/注銷係統,因為我打算從腳本(bash)動態更改設置。

最佳辦法

據我了解,通過該GUI設置代理system-wide可以完成三件事:

  1. 在dconf數據庫中設置相應的值。

  2. /etc/environment中設置值。

  3. /etc/apt/apt.conf中設置值。

1和3立即生效。 /etc/environment在登錄時被解析,因此您需要注銷並登錄才能生效。 (請注意,這是正確的登錄方式,而不僅僅是運行登錄 shell 。)以下腳本應該等效(假設使用http /https代理):

#! /bin/bash
HTTP_PROXY_HOST=proxy.example.com
HTTP_PROXY_PORT=3128
HTTPS_PROXY_HOST=proxy.example.com
HTTPS_PROXY_PORT=3128

gsettings set org.gnome.system.proxy mode manual
gsettings set org.gnome.system.proxy.http host "$HTTP_PROXY_HOST"
gsettings set org.gnome.system.proxy.http port "$HTTP_PROXY_PORT"
gsettings set org.gnome.system.proxy.https host "$HTTPS_PROXY_HOST"
gsettings set org.gnome.system.proxy.https port "$HTTPS_PROXY_PORT"

sudo sed -i.bak '/http[s]::proxy/Id' /etc/apt/apt.conf
sudo tee -a /etc/apt/apt.conf <<EOF
Acquire::http::proxy "http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT/";
Acquire::https::proxy "http://$HTTPS_PROXY_HOST:$HTTPS_PROXY_PORT/";
EOF

sudo sed -i.bak '/http[s]_proxy/Id' /etc/environment
sudo tee -a /etc/environment <<EOF
http_proxy="http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT/"
https_proxy="http://$HTTPS_PROXY_HOST:$HTTPS_PROXY_PORT/"
EOF

即使需要PAM的re-login才能將/etc/environment應用於任何地方,在當前Shell中,您仍然可以提取該文件中的值:

export http_proxy=$(pam_getenv http_proxy)

次佳辦法

我製作了一個工具ProxyMan來簡化整個任務。您可以從this link下載它。

另外,如果您更想了解後端功能,則可以看一下代碼。下載zip文件,解壓它們,轉到終端中提取文件的位置,以下命令將為您提供幫助:

  • bash main.sh:設置和取消設置代理。

  • bash proxy_check.sh:檢查您當前的代理設置。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/9407.html,未經允許,請勿轉載。