如何在Web代理后安装Snap软件包

我知道如何配置APT使用web代理。但是snap呢?

有一个已报告的错误:https://bugs.launchpad.net/ubuntu/+source/snapd/+bug/1579652 请订阅以查看其变化。 - julian-alarcon
请问您能否将标题中的“16.04”删除?这个主题与几乎所有Ubuntu版本都相关。 - Simon Sudler
7个回答

snap 2.28中添加了一个系统选项,用于指定代理服务器。
$ sudo snap set system proxy.http="http://<proxy_addr>:<proxy_port>"
$ sudo snap set system proxy.https="http://<proxy_addr>:<proxy_port>"

文档


1我在Ubuntu 16.04.5上使用snap/snapd 2.34.2版本,并且这些选项不起作用。只能参考https://askubuntu.com/a/1084862/75760 ,更改systemd设置。 - hanxue
文档指定它从snapd 2.28版本开始可用。使用snap version命令检查您当前的版本。 - DependencyHell
适用于Ubuntu 18.04,带有snap 2.43.3。 - Indika K
这个答案真的应该标记为“回答”,适用于Ubuntu 18.04和snap 2.37.4+18.04.1。只是一个小提醒,如果您的密码包含特殊字符,需要进行编码(例如:! = %21)。 - Luke
对我来说,这只在没有引号的情况下有效(在Ubuntu 20.04上)。 - SilverJan
请注意,重要的是要输入http://!(或适用时使用https:// - Cadoiz
无法与服务器通信:等待响应超时。 - Line

snapd读取/etc/environment,所以在那里设置常规的代理环境变量就可以了。在Ubuntu上,通过设置→网络→网络代理会自动为您完成这个步骤,只要在更改该文件后重新启动snapd,您就可以使用了。

2更具体地说,snapd.service文件位于此位置:/lib/systemd/system/snapd.service - julian-alarcon
1@darkhole 一个人不应该编辑 /lib/systemd/system/snapd.service,而是应该使用 systemctl edit snapd.service。请参考我的回答:http://askubuntu.com/questions/659267/how-do-i-override-or-configure-systemd-services - muru
1那么,如果有人想要自动化这个配置呢? - pmatulis
2请记得,在这些更改生效之前,您需要重新启动snapd服务。 - Seth
3你在这里发布的方法也无法进行身份验证。Snap应该像其他人一样使用普通的 $http_proxy 和 $https_proxy 环境变量。这是Ubuntu错误跟踪器链接,用于解决此问题。 - Teque5
@Teque5 你设法让它工作了吗? - Paulo Pedroso
1@PauloPedroso 哈哈,是的,但大部分情况下不是。我手动下载了这个快照,并提取了其中的内容,因为快照不允许我安装它,然后挂载了其中的squashfs文件,然后运行了一次,没问题。之后我删除了整个东西,并发誓永远不再使用快照;Flatpaks或者Docker镜像要好上千倍。 - Teque5
@Teque5 因此我已经不再使用Skype。我不相信自己有在Skype上做那件事的技能。去年我因为Linux安装出了问题而诅咒了Snap,snapd无法运行。 - Paulo Pedroso
1Teque, Paulo, snapd 确实 使用默认的环境变量。我不知道你说的不起作用是什么意思。 - Chipaca
这种方法在20.04/snap2.45.3.1中不起作用。 - petertc

有另一种方法可以向systemd服务添加环境变量:

为snap守护程序创建一个文件夹,并创建环境变量的配置文件:

$ sudo mkdir -p /etc/systemd/system/snapd.service.d/
$ echo -e '[Service]\nEnvironment="http_proxy=http://1.2.3.4:3128/"' \
      | sudo tee /etc/systemd/system/snapd.service.d/http-proxy.conf
$ echo -e '[Service]\nEnvironment="https_proxy=http://1.2.3.4:3128/"' \
      | sudo tee /etc/systemd/system/snapd.service.d/https-proxy.conf
$ sudo systemctl daemon-reload
$ sudo systemctl restart snapd

之后,您可以检查环境变量是否已设置为 snapd
$ systemctl show snapd | grep proxy
  Environment=http_proxy=http://1.2.3.4:3128/ https_proxy=http://1.2.3.4:3128/
  DropInPaths=/etc/systemd/system/snapd.service.d/http-proxy.conf /etc/systemd/system/snapd.service.d/https-proxy.conf

Snap使用snapd守护程序。您只需要在/etc/environment中定义http_proxy和https_proxy,并重新启动服务:systemctl restart snapd。

但请记住,如果您将代理变量添加到/etc/environment文件中,其他所有应用程序也将将其作为默认环境。 - placid chat

Snap服务已配置为使用特殊的环境文件,因此如果Snap未获取到您当前的环境变量,您只需将http_proxy变量添加到该文件中。
打开文件:
sudo vim /etc/sysconfig/snapd

地址:

http_proxy=http://127.0.0.1:3128
https_proxy=http://127.0.0.1:3128

1在Ubuntu上没有sysconfig文件夹。 - smartmouse
这不是Ubuntu的配置。 - skonsoft


小心,因为snapd读取/etc/environment文件而不是获取ENV变量。 下面的示例不起作用:
export https_proxy=http://<your.ip.here>:3128

你必须使用:
http://<your.ip.here>:3128