0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2で aws sso login時に xdg-open がブラウザを開けない問題を解決する

0
Posted at

はじめに

WSL2上で aws sso login を実行すると、認証用のブラウザを自動で開こうとして xdg-open が走るのですが、こいつがあらゆるブラウザを順番に試して全部失敗する現象に陥ります。
もちろんこの現象は aws sso login に限った話ではなくWSL2上からブラウザを開こうとした場合全般に当てはまります。

TL; DR

以下を実行すればOK

sudo apt update
sudo apt install wslu

環境

  • Windows 11 + WSL2 (Ubuntu)
  • AWS CLI v2
  • Windows側のデフォルトブラウザ: Google Chrome

問題の挙動

aws sso login を叩くと、こんな感じで延々とブラウザを探しに行って全部コケます。

$ aws sso login --profile my-profile
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.ap-northeast-1.amazonaws.com/?user_code=XXXX-XXXX

/usr/bin/xdg-open: 882: www-browser: not found
/usr/bin/xdg-open: 882: links2: not found
/usr/bin/xdg-open: 882: elinks: not found
/usr/bin/xdg-open: 882: links: not found
/usr/bin/xdg-open: 882: lynx: not found
/usr/bin/xdg-open: 882: w3m: not found
xdg-open: no method available for opening 'https://device.sso.ap-northeast-1.amazonaws.com/?user_code=XXXX-XXXX'

WSL2にはGUIブラウザが入っていないので当然と言えば当然です。AWS CLIは内部で xdg-open を呼んでいるだけなので、xdg-open がWindows側のブラウザを開いてくれるようになれば解決します。

解決策: wslu を入れる

wslu (Windows Subsystem for Linux Utilities) には wslview というコマンドが含まれていて、これがWSL内から呼ばれた xdg-open の処理をWindows側のデフォルトブラウザに横流ししてくれます。

インストール

sudo apt update
sudo apt install wslu

これだけです。

wslu をインストールすると xdg-open の代替として wslview が使われるようになり、URLがWindows側のデフォルトブラウザで開くようになります。

動作確認

xdg-open https://www.google.com

Windows側のChromeが立ち上がればOKです。

aws sso login を再実行

aws sso login --profile my-profile

今度はちゃんとWindows側のChromeが立ち上がって認証画面が表示されます。コピペ作業から解放されました。

仕組みの補足

wslu を入れると /usr/bin/xdg-open の挙動が wslview 経由でWindows側に転送されるようになります。wslview は内部で cmd.exe /c start 相当の処理をやっていて、Windowsの既定ブラウザ設定に従ってブラウザを起動します。

つまり、Windows側で既定のブラウザをEdgeにしていればEdgeが、Firefoxにしていればfirefoxが開きます。Chromeを使いたければWindows側の既定ブラウザをChromeにしておけばOKです。

Chromeを名指しで起動したい場合

「既定ブラウザは別のやつにしているけど、WSLからの起動だけはChromeで開きたい」みたいな捻れた要求がある場合は、xdg-open を自前のスクリプトで差し替える手もあります。

~/.local/bin/xdg-open にこんな感じで置いておきます。

#!/bin/bash
CHROME="/mnt/c/Program Files/Google/Chrome/Application/chrome.exe"
arg="$1"
# URLじゃない場合はWindowsパスに変換
if [[ "$arg" != http* ]]; then
  arg="$(wslpath -w "$arg")"
fi
exec "$CHROME" "$arg"
chmod +x ~/.local/bin/xdg-open

~/.local/binPATH の先頭側にあれば、こちらが優先されます。ただし普通の用途なら wslu で十分です。

まとめ

  • WSL2で aws sso loginxdg-open でコケるなら sudo apt install wslu で一発解決
  • Windows側のデフォルトブラウザがそのまま使われる
  • Chromeを名指しで開きたい場合は xdg-open を自前スクリプトで差し替え

地味ですが開発体験が一段上がるので、WSL2勢にはおすすめです。
また、今回はwsluのなかのwslviewだけの話でしたが他にも機能があるので気になる方はぜひ調べてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?