ここのことはなかったことにするかもしれない

仕事がらみの記事を主として扱いますが、あくまで個人ブログです。2013年以前の記事は https://yellow-73.hatenablog.com/ にあります。

WSL+Ubuntu(+cygwin X/VcXsrv)+Android Studio for Win+ Android Studio for WSL

はじめに

Windows 10には WSL (Windows Subsystem for Linux) というものがあります。仮想機械を作らずに、LinuxのプロセスとWindowsカーネルをつなぐレイヤを差し込んでいるようなかんじではないかと(ちがうかも)。
UbuntuとかSUSEとかのディストリビューションごとにアプリとして提供されています。

ここで、WSL側からAndroid Studioが立ち上がるんじゃね?と考えました。

前提

これまでに作っている環境を駆使するので、普通とは違う部分があるかも知れません。次のことを前提としていることにご注意下さい。

  1. CygwinのXサーバを持っています。
  2. WindowsAndroid SDKを持っています (Android Studioもあるけど、とりあえず関係ない)。

WSLの有効化 #1

PowerShellで次を入力します。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

WSLの有効化 #2

Windowsの機能の有効化または無効化」を開き、「Windows Subsystem for Linux」にチェックを入れます。

Windowsの機能の有効化または無効化」を開くには、設定を開き(スタート→設定(歯車アイコン))、「プログラムと機能」(関連設定)を開き、「Windowsの機能の有効化または無効化」(左サイドバー)を開きます。

コルタナから「機能」で探すと出たので、個人的にはこちらから行きます。

Ubuntuのインストール

有効化後、「Microsoft Store」を開き、Ubuntuをインストールします(無償です)。

一回目の起動

一回目の起動は、初期設定のため、数分程度の時間がかかるので、待ちます。

その後、インストールパッケージの更新を行います。

sudo apt-get update
sudo apt-get upgrade

WSL側からWindows側のファイルを見る

/mnt/(ドライブレター)/

にマウントされています。

なお、Windows側のファイルシステムパーミッションは変更できません。

Windows側からWSL側のファイルを見る

https://stackoverflow.com/questions/46921351/missing-lxss-folder-in-windows-cant-access-ubuntus-files を参照。

%LocalAppData%\Packages\CanonicalGroupLimited.UbuntuonWindows_(ランダム文字列)\LocalState\rootfs

にあります。

%LocalAppData%\lxss にある、とされているのは、ストアからubuntuを入れるようになるより前に入れた場合のようです。

CygwinのXにクライアントが出ない

C:\cygwin64\bin\bash.exe --login -c "XWin.exe -multiwindow -clipboard"

としたショートカットを作って、ワンタッチでXを上げるようにしています。

ここで、WSL側でDISPLAYを設定してxtermを上げても、Xに表示されない。

https://superuser.com/questions/1180005/cygwin-x-and-windows-subsystem-for-linux に "-listen tcp"とつけているのを発見。ただし、XWin.exeでなく/usr/bin/startxwinとなっていました。とはいえものは試し。

C:\cygwin64\bin\bash.exe --login -c "XWin.exe -multiwindow -clipboard -listen tcp"

に書き換えてみると、うまくいきました。

なお、WSL側で、次のように環境変数 DISPLAY を設定したうえで、xterm等を起動する必要があります。

export DISPLAY=:0

VcXsrvの場合

https://sourceforge.net/projects/vcxsrv/ からダウンロード、インストールして、Xlaunchを起動します。

なお、リモートのXクライアントが動かない問題が発生しました。ローカル側の環境変数DISPLAYを ":0" でなく "localhost:0" にするとうまくいきました。

export DISPLAY=localhost:0
export LIBGL_ALWAYS_INDIRECT=1

理由不明。なんでなんやろ…。

Javaのインストール

sudo apt install openjdk-11-jdk

(参考) 以前のJavaのインストール

https://www.linuxuprising.com/2018/04/install-oracle-java-10-in-ubuntu-or.html を参照しました。

次のコマンドを順次実行します。

sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java10-installer

Android Studio

https://qiita.com/TsutomuNakamura/items/ef4aeec32cdaaf9105cc を参照。

まずは、https://developer.android.com/sdk/index.html から、Linux用のAndroid Studioを落とします。
ダウンロードには wget が普通でしょうが、私は FireFox を使いました。

unzipして、自分のホームディレクトリ配下のどこかにおいて、android-studio/bin/studio.sh を実行します。
その際、勝手にSDKを $HOME/Android/Sdk に入れてくれます。

  1. android-studio/bin/
  2. $HOME/Android/Sdk/tools
  3. $HOME/Android/Sdk/platform-tools

にパスを通す設定を .profile なりに入れておいた方がよろしいかと思います。

adbサーバはWindows側を使用

コマンドラインから実行するadbは、あれはCUIクライアントです。サーバがAndroidインスタンスと繋がっています。サーバの起動、停止はadbクライアントから制御できます。

WSL側からadbサーバを動かすと失敗しました。

Windows側から

adb.exe start-server

としてやって、Windows用のadbサーバを立ち上げます。そうすると、Windows側のadbクライアントはもちろん、WSL側のadbクライアントも正常に動作しました。adbクライアントを使っているAndroid Studioも、WSL側で動きました。

パスワード忘れた

https://linuxfan.info/wsl-password-reset 参照。

そのまま引き写します。

コマンドプロンプトで次を実行します。

ubuntu config --default-user root

これで、次にubuntuを開くときにはrootで開きます。

ubuntuをrootで開いて

passwd (ユーザ名)

で、パスワードを設定できます(rootからpasswdを行う際には、もとのパスワードは求められません)

ubuntuのウィンドウは閉じて、もう一度コマンドプロンプトを開き次を実行します。

ubuntu config --default-user (ユーザ名)