如果你不喜欢使用tun/proxifier等全局代理方式,你可能已经尝试过了修改$HOME/.codex/.env加入
all_proxy=socks5h://127.0.0.1:1081
https_proxy=http://127.0.0.1:1081
http_proxy=http://127.0.0.1:1081
no_proxy=localhost,127.0.0.1,::1,.your.sub2api.com
来达到免全局的效果。然而我发现 macOS 下 ChatGPT App 打开很快,速度类似启用 TUN,但是 Windows 下开的很慢。
今天发现是因为 Windows 下 Chromium 没有读取环境变量。但是我们可以通过参数--proxy-server=socks5://127.0.0.1:1081 来让 Chromium 也用上代理。实测官方帐号登陆下 Remote Control 正常工作。
方法一
找到 WindowsApps 里的 .exe,在桌面创建快捷方式如下。但是AppX包每次更新都会改路径,现在ChatGPT一天更新好几次,这个方法其实不太实用。

方法二
新建一个.ps1,运行即可。做个快捷方式改下图标,就完成了。
$pkg = Get-AppxPackage |
Where-Object Name -Match "ChatGPT|OpenAI" |
Sort-Object Version -Descending |
Select-Object -First 1
$exe = Get-ChildItem $pkg.InstallLocation `
-Filter ChatGPT.exe -Recurse |
Select-Object -First 1
Start-Process $exe.FullName `
-ArgumentList "--proxy-server=socks5://127.0.0.1:1081"
方法三
经朋友提醒 Codex++ 用户有个很方便的注入参数的地方。

方法四
让AI帮你生成一个包裹脚本的快捷方式放到开始菜单,从开始菜单启动。创建后可能被杀毒软件误杀。
$shortcutPath = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\ChatGPT Proxy.lnk"
$launchScript = @'
$pkg = Get-AppxPackage |
Where-Object Name -Match "ChatGPT|OpenAI" |
Sort-Object Version -Descending |
Select-Object -First 1
$exe = Get-ChildItem $pkg.InstallLocation -Filter ChatGPT.exe -Recurse |
Select-Object -First 1
Start-Process $exe.FullName -ArgumentList "--proxy-server=socks5://127.0.0.1:1081"
'@
$bytes = [System.Text.Encoding]::Unicode.GetBytes($launchScript)
$encoded = [Convert]::ToBase64String($bytes)
$ws = New-Object -ComObject WScript.Shell
$shortcut = $ws.CreateShortcut($shortcutPath)
$shortcut.TargetPath = "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell.exe"
$shortcut.Arguments = "-NoProfile -WindowStyle Hidden -EncodedCommand $encoded"
$shortcut.Description = "ChatGPT via SOCKS5 Proxy"
# 使用当前 ChatGPT.exe 的图标
$pkg = Get-AppxPackage |
Where-Object Name -Match "ChatGPT|OpenAI" |
Sort-Object Version -Descending |
Select-Object -First 1
$exe = Get-ChildItem $pkg.InstallLocation -Filter ChatGPT.exe -Recurse |
Select-Object -First 1
if ($exe) {
$shortcut.IconLocation = "$($exe.FullName),0"
}
$shortcut.Save()
Write-Host "Shortcut created:"
Write-Host $shortcutPath
Write-Host "Exists:" (Test-Path $shortcutPath)