-
-
Save ThYpHo0n/349f1f6473e207b866f65aca4728da3e to your computer and use it in GitHub Desktop.
# WSL? | |
if [[ "$(< /proc/sys/kernel/osrelease)" == *microsoft* ]]; then | |
export $(dbus-launch) | |
export LIBGL_ALWAYS_INDIRECT=1 | |
export WSL_VERSION=$(wsl.exe -l -v | grep -a '[*]' | sed 's/[^0-9]*//g') | |
export WSL_HOST=$(tail -1 /etc/resolv.conf | cut -d' ' -f2) | |
export DISPLAY=$WSL_HOST:0 | |
# pip path if using --user | |
export PATH=$PATH:$HOME/.local/bin | |
# SSH | |
eval $(/mnt/c/weasel-pageant/weasel-pageant -r) | |
fi |
@jamesharris-
Is there a resaonable way to determine which IP address we should use? i.e. some way to test available IP addresses to detect if the xserver is accessable?
It may depend on how you installed WSL/WSL2 and perhaps your network layout. This works for me, because my Windows computer and my WSL2 VM both use an external DNS server:
$ cat /etc/resolv.conf
nameserver 192.168.46.1
export DISPLAY=$(ipconfig.exe | grep IPv4 | head -1 | rev | awk '{print $1}' | rev | tr -d '\r'):0.0
Use set -x
for debugging purposes. This way I found that ipconfig.exe
prints an carriage return, which needs to be removed with tr -d '\r'
$ export foo=$(ipconfig.exe | grep IPv4 | head -1 | rev | awk '{print $1}' | rev):0.0
++ ipconfig.exe
++ grep --color=auto IPv4
++ head -1
++ rev
++ awk '{print $1}'
++ rev
+ export $'foo=192.168.46.151\r:0.0'
+ foo=$'192.168.46.151\r:0.0'
$ export foo=$(ipconfig.exe | grep IPv4 | head -1 | rev | awk '{print $1}' | rev | tr -d '\r'):0.0
++ ipconfig.exe
++ grep --color=auto IPv4
++ head -1
++ rev
++ awk '{print $1}'
++ rev
++ tr -d '\r'
+ export foo=192.168.46.151:0.0
+ foo=192.168.46.151:0.0
Disable debug set +x
Edit: if the above fails, use
export DISPLAY=$(ip -4 route | awk '{ if ($1~/default/) print $3 }'):0.0
if /etc/resolve.conf
can't get what you want, iproute2 util is another proper way to get the gateway address:
ip -o route get 1.1.1.1 | cut -d' ' -f 3
the 1.1.1.1
can be any address of foreign network, it just show how kernel visit that address.
export DISPLAY=$(ipconfig.exe | grep IPv4 | head -1 | rev | awk '{print $1}' | rev | tr -d '\r'):0.0
I used this approach but added a grep to extract just the Wi-Fi adapter because the IPv4 part was just fetching the first match so:
export DISPLAY=$(ipconfig.exe | grep -A 6 'Wireless LAN adapter Wi-Fi' | grep IPv4 | head -1 | rev | awk '{print $1}' | rev | tr -d '\r'):0.0
I came up with this: HOST_IP=$(route.exe print | grep "0.0.0.0 0.0.0.0" | awk '{print $4}')
I changed the routing inside my wsl as a workaround for my VPN software. So there is no way to get the Windows external IP on the linux side.
Is there a resaonable way to determine which IP address we should use? i.e. some way to test available IP addresses to detect if the xserver is accessable?