ThisDay
2025 年 11 月 21 日
解决了,偷梁换柱大法好。
大概流程是:
先 mv language_server_linux_x64 language_server_linux_x64.bak 把它移走
然后新建个 language_server_linux_x64 文件,里面写 bash 脚本,给它环境变量以及代理前缀。
它是 go 写得所以用 graftcp 设置代理,用 Proxychains 可能不管用。
用环境变量完全不启用做(这个我试过)。
类似这样
```bash
#!/bin/bash
# ================= 配置区域 =================
# 1. Graftcp 安装目录 (请修改为你实际的路径)
GRAFTCP_DIR="/home/lee/graftcp"
# 2. 你的代理地址 (Mirror 模式下 127.0.0.1 通向 Windows)
PROXY_URL="127.0.0.1:10808"
# ===========================================
# 调试日志
LOG_FILE="/tmp/graftcp_wrapper.log"
echo "[$(date)] Starting wrapper for $@" >> "$LOG_FILE"
# 检查 graftcp-local (后台服务) 是否在运行
# 如果没在运行,就启动它
if ! pgrep -f "$GRAFTCP_DIR/local/graftcp-local" > /dev/null; then
echo "Starting graftcp-local daemon..." >> "$LOG_FILE"
# 后台启动,将日志丢入黑洞防止阻塞
nohup "$GRAFTCP_DIR/local/graftcp-local" -socks5="$PROXY_URL" > /dev/null 2>&1 &
# 给它一点时间启动
sleep 0.5
fi
# 1. 强制使用系统 DNS (解决解析问题)
export GODEBUG=netdns=cgo
# 2. 强制关闭 HTTP/2 (解决 EOF 问题)
# Go 的 HTTP/2 客户端在代理环境下非常敏感,强制用 HTTP/1.1 通常能解决 EOF
export GODEBUG=$GODEBUG,http2client=0
# 使用 graftcp 启动真正的程序
# "$0.bak" 是原程序的备份
exec "$GRAFTCP_DIR/graftcp" "$0.bak" "$@"
```