💻
WSL2からWindowsホストのNICのIPアドレスを取得する
X11したいなって
1. /etc/resolv.confを読む
grep /etc/resolv.conf -e nameserver | awk '{print $2}'
WSL2は名前解決をWindowsホストにお願いしているので、そこから取りましょうという話。
イーサネットアダプター vEthernet (WSL) のIPv4アドレスがとれる
limitation
/etc/resolv.confで nameserver 8.8.8.8
とかを設定してると使えない
(これが原因で DISPLAY
環境変数に 8.8.8.8:0
を設定してしまい手元のemacsの描画をGoogleにお願いしてしまいました)
2. ipconfig.exe を叩く
ipconfig.exe | sed -e 's/\r//' | grep 'IPv4 Address' | head -n 1 | cut -d ':' -f 2 | awk '{print $1}'
ipconfig.exeの出力内容・順番にもよると思いますが自分の環境ではeth0のIPv4アドレスがとれます
余談
WSL2から ipconfig.exe
を叩くと:
ipconfig.exe
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv6 アドレス . . . . . . . . . . . .: ...
一時 IPv6 アドレス. . . . . . . . . .: ...
リンクローカル IPv6 アドレス. . . . .: ...
IPv4 アドレス . . . . . . . . . . . .: ...
サブネット マスク . . . . . . . . . .: ...
デフォルト ゲートウェイ . . . . . . .: ...
...
イーサネット アダプター Bluetooth ネットワーク接続:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
イーサネット アダプター vEthernet (WSL):
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: ...
IPv4 アドレス . . . . . . . . . . . .: ...
サブネット マスク . . . . . . . . . .: ...
デフォルト ゲートウェイ . . . . . . .:
CRLF改行であることに注意する
CRを消すために sed
にパイプすると:
ipconfig.exe | sed -e 's/\r//'
Windows IP Configuration
Ethernet adapter �C�[�T�l�b�g:
Connection-specific DNS Suffix . :
IPv6 Address. . . . . . . . . . . : ...
Temporary IPv6 Address. . . . . . : ...
Link-local IPv6 Address . . . . . : ...
IPv4 Address. . . . . . . . . . . : ...
Subnet Mask . . . . . . . . . . . : ...
Default Gateway . . . . . . . . . : ...
...
Ethernet adapter Bluetooth �l�b�g���[�N�ڑ�:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Ethernet adapter vEthernet (WSL):
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : ...
IPv4 Address. . . . . . . . . . . : ...
Subnet Mask . . . . . . . . . . . : ...
Default Gateway . . . . . . . . . :
アメリカ語になりました
stdoutのファイルディスクリプタがttyかどうかで変わるみたいですね
(ls
なんかも出力形式が変わりますよね)
Discussion