当前位置: 首页>>技术教程>>正文


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/article/9407.html,未经允许,请勿转载。