質問: **概要** WindowsでWSL2を有効化し、UbuntuにChromeをインストールして、bashのコマンドラインで起動すると、以前はUbuntu版のChromeが起動していたが、ある日急にWindows版が起動されるようになってしまった。Ubuntu版が起動するように戻したい。 **詳細** Windows 10において、WSL2を有効化し、Ubuntu 20.04をインストールしました。 目的はPython3+Selenium+ChromeDriverを使って、Chromeブラウザーを自動化することです。 XサーバーとしてVcXsrvをインストールし、設定しました。 xeyesおよびEmacsは正常に動作しているので、ここまでに問題はないと思います。 次に、以下のコマンドによって、UbuntuにChromeをインストールしました。 ``` $ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' # 供給元を追加する $ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - # 公開鍵を追加する $ sudo apt update $ sudo apt install google-chrome-stable ``` 次に、Chromeを起動しました。 ``` $ google-chrome& ``` これで、最初のうちは、Ubuntu側のChromeが起動していました。 しかし、ある日急に、同じコマンドでWindowsのChromeが起動してしまうようになりました。 ``` $ google-chrome ``` とフォアグラウンド実行しても$プロンプトが表示され、`ps`コマンドを入力してもgoogle-chromeプロセスが見えません。(以前Ubuntu側のChromeが実行できていたときは見えていました) ``` $ which google-chrome ``` で`/home/user_name/bin/google-chrome`と返るので、フルパスを指定して ``` $ /home/user_name/bin/google-chrome ``` と書いて起動しても同じ結果になります。 関係あるかどうか分かりませんが、WindowsのChromeをすべて閉じても、Windowsのタスクマネージャーでプロセスを見ると「Google Chrome」というプロセスが11個走っています。これが問題かと思いすべて右クリックしてプロセスを殺して、再度Ubuntuで ``` $ /home/user_name/bin/google-chrome ``` と書いても同じ結果になります。 Windowsを再起動して、まったくChromeを起動しない状態でも、Windowsのタスクマネージャーでプロセスを見ると「Google Chrome」というプロセスが11個走っています。この時点で ``` $ /home/user_name/bin/google-chrome ``` と書いても同じ結果になります。 Windowsを再起動して、まったくChromeを起動しない状態で、タスクマネージャーを開いて「Google Chrome」というプロセスをすべて右クリックしてプロセスを殺して、再度Ubuntuで ``` $ /home/user_name/bin/google-chrome ``` と書いても同じ結果になります。 SeleniumはFirefoxもサポートしているので、Chromeを使わなければいいような気がしますが、Google Driveなどのサービスと連携するワークフローを設計している関係で、出来ればChromeを使いたい状態です。 元のようにUbuntu側のChromeを起動するにはどうすればいいのでしょうか。
回答: 質問者自己回答です。 いただいたコメントをきっかけに真相に到達しましたが、もとの問題は完全に私の失敗でした。 (質問ごと消したほうがいいか、バカ事例として残すのも意味があるのか思案中です。ご教示賜れば幸いです) **まとめ** 結論としては、`/home/user_name/bin/google-chrome`という名前で、以下のようなシェルスクリプトを作っていました。 ``` #! /bin/sh exec /mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe "$@" ``` こちらは、WSL1を使っていた頃に、Windows版のChromeを起動するために、わざわざ置いていたものでした。 質問の中で書いた`apt install`でインストールされたUbuntu版の実体は`/usr/bin/google-chrome`にありますが、`/home/user_name/bin`の方が`PATH`に先に入っていたので優先実行されていました。 **判明までの過程** どうやって分かったかは以下の通りです。 WSL2のUbuntuからWindowsのexeファイルを実行するのはWSL2の相互運用性という機能を使います。 これを無効化してみました。 上記のドキュメントによると以下のコマンドをsuとして実行します。 ``` # echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop ``` こちらは、一般ユーザーとしてログインした状態で`sudo`を使っても「/proc/sys/fs/binfmt_misc/WSLInteropの権限がありません」と言われ、`su`でスーパーユーザーとしてログインしないと操作できません。 Ubuntuでは、デフォルトでrootユーザーのパスワードが設定されていないので、以下の操作を行います(xxxxxは任意のパスワード)。 ``` $ sudo su - # passwd Enter new UNIX password: xxxxx Retype new UNIX password: xxxxx passwd: password updated successfully ``` そして以下のようにsuとしてログインして以下の操作を行います。 ``` $ su Password: # echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop # exit ``` これで、Windows版のChromeをUbuntu側から実行できなくなりました。 この状態でもう一度google-chromeを起動してみました。 エラーが発生します。 ``` $ /home/user_name/bin/google-chrome: 3: exec: /mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe: Exec format error [1]+ 終了 2 /home/user_name/bin/google-chrome ``` これで、さすがの私も、`/home/user_name/bin/google-chrome`はシェルスクリプトであると分かったので変名し、改めてgoogle-chromeの場所を探しました。 ``` $ which google-chrome /usr/bin/google-chrome ``` で、`/usr/bin/google-chrome`を改めて起動すると、ちゃんとUbuntu版のChromeが起動しました。 以上です。すみませんでした。