78024
**概要**  
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を起動するにはどうすればいいのでしょうか。
CC BY-SA 4.0
2021-07-07T09:40:43.530
78021
2021-07-09T08:29:33.697
2021-07-09T08:29:33.697
-1
26673
question
ubuntu windows-10 google-chrome wsl-2
WSL2にChromeをインストールしたのにWindows側が起動されてしまう
質問者自己回答です。  
いただいたコメントをきっかけに真相に到達しましたが、もとの問題は完全に私の失敗でした。  
（質問ごと消したほうがいいか、バカ事例として残すのも意味があるのか思案中です。ご教示賜れば幸いです）

**まとめ**  
結論としては、`/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の相互運用性という機能を使います。

<https://docs.microsoft.com/ja-jp/windows/wsl/interop#disable-
interoperability>

これを無効化してみました。

上記のドキュメントによると以下のコマンドを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が起動しました。

以上です。すみませんでした。
CC BY-SA 4.0
2021-07-07T11:31:20.917
78024
2021-07-09T08:19:10.607
2021-07-09T08:19:10.607
26673
26673
78021
answer