背景
多端使用wsl时,每次设置使用宿主机代理都比较麻烦。特此记录下脚本。
注意本机代理软件需要设置“允许来自本地局域网的连接”,使用前要注意把${winip}:
后面的端口号改成宿主机开放的允许本地局域网连接的端口号。
Shell脚本
使用时,将其追加到~/.bashrc
(或~/.zshrc
等shell配置文件)中。
使用proxy
命令自动开启流量转发到宿主机,使用unpro
关闭这一功能。
getIp() {
export winip=$(ip route | grep default | awk '{print $3}')
export wslip=$(hostname -I | awk '{print $1}')
export PROXY_SOCKS5="socks5://${winip}:10810"
export PROXY_HTTP="http://${winip}:10811"
# export PROXY_HTTP="socks5://${winip}:10808"
}
proxy_git() {
ssh_proxy="${winip}:10811"
git config --global http.https://github.com.proxy ${PROXY_HTTP}
if ! grep -qF "Host github.com" ~/.ssh/config ; then
echo "Host github.com" >> ~/.ssh/config
echo " User git" >> ~/.ssh/config
echo " ProxyCommand nc -X 5 -x ${ssh_proxy} %h %p" >> ~/.ssh/config
else
lino=$(($(awk '/Host github.com/{print NR}' ~/.ssh/config)+2))
sed -i "${lino}c\ ProxyCommand nc -X 5 -x ${ssh_proxy} %h %p" ~/.ssh/config
fi
}
winip_() {
getIp
echo ${winip}
}
wslip_() {
getIp
echo ${wslip}
}
x11() {
getIp
if [ ! $1 ]; then
# null
export DISPLAY=${winip}:0.0
else
export DISPLAY=${winip}:$1.0
fi
echo $DISPLAY
export XDG_SESSION_TYPE=x11
export XDG_RUNTIME_DIR=/tmp/runtime-root
export LIBGL_ALWAYS_INDIRECT=1
export PULSE_SERVER=tcp:$winip
}
ip_() {
getIp
# https --follow -b https://api.ip.sb/geoip/$1
echo "WIN ip: ${winip}"
echo "WSL ip: ${wslip}"
}
proxy_npm() {
getIp
npm config set proxy ${PROXY_HTTP}
npm config set https-proxy ${PROXY_HTTP}
yarn config set proxy ${PROXY_HTTP}
yarn config set https-proxy ${PROXY_HTTP}
}
unpro_npm() {
npm config delete proxy
npm config delete https-proxy
yarn config delete proxy
yarn config delete https-proxy
}
proxy() {
getIp
# pip can read http_proxy & https_proxy
export http_proxy="${PROXY_HTTP}"
export HTTP_PROXY="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}"
export HTTPS_PROXY="${PROXY_HTTP}"
export ftp_proxy="${PROXY_HTTP}"
export FTP_PROXY="${PROXY_HTTP}"
export rsync_proxy="${PROXY_HTTP}"
export RSYNC_PROXY="${PROXY_HTTP}"
export ALL_PROXY="${PROXY_SOCKS5}"
export all_proxy="${PROXY_SOCKS5}"
proxy_git
if [ ! $1 ]; then
ip_
fi
echo "Acquire::http::Proxy \"${PROXY_HTTP}\";" | sudo tee /etc/apt/apt.conf.d/proxy.conf >/dev/null 2>&1
echo "Acquire::https::Proxy \"${PROXY_HTTP}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf >/dev/null 2>&1
}
unpro () {
unset http_proxy
unset HTTP_PROXY
unset https_proxy
unset HTTPS_PROXY
unset ftp_proxy
unset FTP_PROXY
unset rsync_proxy
unset RSYNC_PROXY
unset ALL_PROXY
unset all_proxy
sudo rm /etc/apt/apt.conf.d/proxy.conf
git config --global --unset http.https://github.com.proxy
ip_
}