You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04终端无法联网:已通过GUI设置自动代理,需找到配置文件并在终端配置以解决软件更新/安装失败问题

Ubuntu 22.04终端无法联网:已通过GUI设置自动代理,需找到配置文件并在终端配置以解决软件更新/安装失败问题

遇到这种GUI代理能正常上网但终端连不上的情况很常见,核心原因是GNOME的图形界面代理设置不会自动同步到终端的环境变量,所以终端工具(比如aptping)没法识别到代理配置。下面一步步帮你解决:

第一步:确认GUI中的代理配置信息

首先你需要确认当前GUI设置的自动代理PAC地址,以及对应的代理服务器信息:

  1. 打开终端,输入以下命令查看代理模式(确认是自动代理模式):
    dconf read /system/proxy/mode
    
    如果返回'auto',说明确实是自动代理模式。
  2. 查看自动代理的PAC配置URL:
    dconf read /system/proxy/autoconfig-url
    
    这个命令会返回你在GUI里设置的PAC文件地址,比如'http://proxy.example.com/proxy.pac'

第二步:提取PAC文件中的代理服务器信息

终端工具本身不支持自动解析PAC文件,所以需要手动提取里面的代理地址:

  1. 先下载PAC文件到本地:
    wget <你的PAC_URL> -O proxy.pac
    
    <你的PAC_URL>替换成上一步得到的地址,比如wget http://proxy.example.com/proxy.pac -O proxy.pac
  2. 打开下载好的proxy.pac文件,查找类似这样的内容:
    return "PROXY proxy.example.com:8080";
    
    这里的proxy.example.com:8080就是你需要的代理服务器地址和端口。

第三步:临时配置终端代理(测试用)

先临时在终端配置代理,验证是否能联网:

  1. 设置HTTP和HTTPS代理环境变量:
    export http_proxy=http://<代理服务器>:<端口>
    export https_proxy=http://<代理服务器>:<端口>
    
    比如替换成export http_proxy=http://proxy.example.com:8080
  2. 设置不需要代理的地址(比如本地地址):
    export no_proxy="localhost,127.0.0.1,::1,192.168.0.0/16"
    
    这里的192.168.0.0/16可以替换成你的局域网地址段。
  3. 测试联网:
    ping -c 3 google.com
    
    如果能收到回复,再测试apt更新:
    sudo -E apt update
    
    这里的-E参数会让sudo保留当前用户的代理环境变量,否则root用户不会继承这些配置。

第四步:永久配置终端代理

如果临时配置生效了,就可以把代理设置永久化,分两种场景:

场景1:仅当前用户生效

编辑用户的shell配置文件(比如bash~/.bashrc,如果用zsh就是~/.zshrc):

  1. 打开配置文件:
    nano ~/.bashrc
    
  2. 在文件末尾添加以下内容:
    export http_proxy=http://<代理服务器>:<端口>
    export https_proxy=http://<代理服务器>:<端口>
    export no_proxy="localhost,127.0.0.1,::1,192.168.0.0/16"
    
  3. 保存并退出后,让配置生效:
    source ~/.bashrc
    

场景2:系统全局生效(所有用户包括root)

  1. 编辑系统环境变量文件:
    sudo nano /etc/environment
    
  2. 添加以下内容:
    http_proxy="http://<代理服务器>:<端口>"
    https_proxy="http://<代理服务器>:<端口>"
    no_proxy="localhost,127.0.0.1,::1,192.168.0.0/16"
    
  3. 保存退出后,重启系统或者执行以下命令生效:
    source /etc/environment
    
  4. sudo也继承代理环境变量:
    编辑sudoers文件:
    sudo visudo
    
    添加以下内容到文件末尾:
    Defaults env_keep += "http_proxy https_proxy no_proxy"
    
    保存退出即可。

第五步:单独配置APT的代理(可选)

如果你不想依赖环境变量,也可以直接给apt单独配置代理:

  1. 创建APT代理配置文件:
    sudo nano /etc/apt/apt.conf.d/95proxy
    
  2. 添加以下内容:
    Acquire::http::Proxy "http://<代理服务器>:<端口>";
    Acquire::https::Proxy "http://<代理服务器>:<端口>";
    
  3. 保存退出后,直接执行sudo apt update就能用代理更新了。

备注:内容来源于stack exchange,提问作者maximo12

火山引擎 最新活动