设置Ubuntu系统代理设置而无需从命令行重新启动


14

我正在使用Ubuntu 14.04。我想http proxy从命令行更改设置。这应该等效于在GUI(所有设置->网络->网络代理)中进行更改,然后单击按钮Apply System Wide。我不想重新启动/注销系统,因为我打算从script(bash)动态更改设置。


askubuntu.com/questions/175172/…。在答案的评论中,它说要做sudo service network manager restart
拉梅什2014年

@Ramesh它不起作用。我已经解决了这个问题。
2014年

Answers:


15

据我了解,通过该GUI在系统范围内设置代理可以完成三件事:

  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应用到任何/etc/environment地方,在当前Shell中,您仍然可以提取该文件中的值:

export http_proxy=$(pam_getenv http_proxy)

@ ma08的输出是gsettings get org.gnome.system.proxy mode; gsettings get org.gnome.system.proxy.http host; gsettings get org.gnome.system.proxy.http port;什么?
muru

现在,我遇到了问题,当我以普通用户身份运行脚本时(process:9662): dconf-WARNING **: failed to commit changes to dconf: Could not connect: Connection refused,gsettings中的每个命令都会显示警告。如果我以root身份运行,则可以正常运行,但是上述命令(get)的输出仅在root用户中已更改,而在普通用户中未更改。
2014年

Aaarghh ..该死的脚本到处都是bug。那是我必须修复的三个。:/在第二个中sudo tee,请注意文件名/etc/environment不是/etc/apt/apt.conf。您可能必须删除apt.conf中的垃圾条目。
muru

问题似乎是我之前在评论中所说的警告。
2014年

1
谢谢,您的脚本有效,并且链接中的答案有助于克服该错误。我应该自己完成调试。非常感谢。
2014年

3

我制作了一个工具ProxyMan来简化整个任务。您可以从此链接下载它。

另外,如果您更想了解后端功能,则可以看一下代码。下载压缩文件,解压缩它们,转到终端中提取文件的位置,以下命令将为您提供帮助:

  • bash main.sh:设置和取消设置代理。
  • bash proxy_check.sh:检查您当前的代理设置。

1
这是一个很棒的小工具!节省了我很多工作!
Gh0sT

-2

我认为这应该避免头痛:

代理设置视频

出色的教程,在python中运行。在Ubuntu 12.04 / 12.10 / 13.04 / 13.10 / 14.04 / 14.10及更高版本中设置简单且经过身份验证的代理设置100%正常工作。

解决方案1 系统必须安装为“ python”。在解释器运行命令的情况下:命令:“ sudo python setproxy.py [Proxy_Server] [proxy_port] [PROXY_USER] [proxy_password]”

视频:https//www.youtube.com/watch?v = eBtzKa-dvJg

[ Proxy_Server ] : proxy.test.ts
[ Proxy_port ] : 8080
[ PROXY_USER ] : domainuser
[ Proxy_password ] : " the_password "

解决方案2: 命令:

"Sudo apt- get install python- support"
"Sudo apt- get install ntlmaps "

填写相应的字段:

- Proxy server
- Proxy port
- User
- Password

2
为了使其成为一个很好的答案,您至少应该概述一下步骤。
朱莉·佩勒捷
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.