我正在使用 GNOME-3 运行 Ubuntu-Studio 12.10,并尝试在 /etc/network/if-up.d 中设置一个 bash 脚本,以根据我所连接的网络的 SSID 自动配置我的代理设置。我无法使用以下任何一种方法让 gsettings 自动运行:
gsettings set org.gnome.system.proxy mode "manual"
sudo -u blaine gsettings set org.gnome.system.proxy mode "manual"
su blaine -c 'gsettings set org.gnome.system.proxy mode "manual"'
此外,我希望脚本能够改变环境变量 http_proxy、https_proxy 等等,以便 Wine 之类的程序能够识别它们,而无需注销并重新登录,但经过五天的谷歌搜索,我发现这是不可能的。
但我知道这是可以做到的。Unity 中的“应用系统范围”按钮可以完成所有这些操作,而无需重新登录。进一步挖掘后,我发现了这一点文章这表明按钮访问 com.ubuntu.systemservice.setProxy,它可能是 ubuntu-system-service 包的一部分。
是否可以使用 ubuntu-system-service 通过 bash、终端或类似程序设置系统范围的代理?
答案1
如果有人仍在寻找解决方案,以下是我发现的。Ubuntu 通过 ubuntu-system-service 包公开了 DBus 服务,但我对 DBus 不熟悉。
但是,检查源代码(开源不是很好吗?),setProxy 操作做了两件事:
- 修改系统范围的环境
- 修改 APT 使用的代理设置
对于第一种情况,/etc/environment 中的文件被修改。第二种情况稍微复杂一些 - 扫描 /etc/apt/apt.conf.d 中的文件以查找与 Acquire::::Proxy 匹配的行,并替换其中的值。如果没有匹配的行,则将代理行(如上)添加到每个 APT conf 文件中。
相关文件位于 UbuntuSystemService/backend.py (~line 209 @ version 0.2.5)。
回答您的问题,您可以进行与 ubuntu-system-service 相同的更改,或者尝试使用 DBus 来解决问题:
dbus-send --system --print-reply --dest=com.ubuntu.SystemService --type=method_call / com.ubuntu.SystemService.set_proxy string:'http' string:'127.0.0.1:8080'
由于某种原因,我一直得到 False 作为对此的答复,但你也许能够解决这个问题。
答案2
返回 true:
sudo dbus-send --system --print-reply --dest=com.ubuntu.SystemService --type=method_call / com.ubuntu.SystemService.set_proxy 字符串:'http' 字符串:'http://127.0.0.1:8081‘
我发现你必须在其前面加上 scheme: http ,代码如下: