|
現: 2023-01-15 (日) 09:16:18 yuji  |
| + | * Windows10でWSLを使ってみる [#e11e2763] |
| + | Windows10の目玉機能の一つにWSL(Windows Subsystem for Linux)がある。~ |
| + | WSLはWindows10でLinuxの実行環境を実現するサブシステムのこと。~ |
| | | |
| + | Linuxプログラムからのシステムコール(APIやファイルアクセス要求など)をWindows APIに変換して実行することにより,Linuxのプログラムを実行可能にしているようだ。~ |
| + | #ref(wsl_linux_image01.png,50%);~ |
| + | |
| + | これまでWindowsマシンでLinuxを使用したい場合は,以下のようなやり方で行っていた。~ |
| + | - ストレージに別のパーテーションを作成し,そこにLinuxをインストールしてOSを切り換えてブートする方法~ |
| + | WindowsとLinuxを切り換えて使用するので,同時に使用するということは出来ない。~ |
| + | - 仮想マシン環境を構築して,そこでWindowsとLinuxの2つのOSを同時に動かす方法~ |
| + | WindowsとLinuxを同じPCで同時に動かすことが出来るが,仮想マシンにメモリー等のリソースを割り当てるために,PCには多くのリソース(メモリやストレージ)が必要になる。~ |
| + | このため,コストや手間が結構かかってしまう。~ |
| + | |
| + | つまり,手軽に利用するのにはちょっと難しかった。~ |
| + | |
| + | WSLを使うとそんなに多くのリソースをかけずにWindowsマシンでLinux(すべての機能ではないが)を動かして,同時に利用することが出来るようになる。~ |
| + | |
| + | * WSLの仕組み [#v25f4f77] |
| + | WSLは''Picoプロセス''と呼ばれる実行環境の中でLinux環境を使用出来るようにしているが,その処理の流れは以下のようになっている。~ |
| + | |
| + | Linuxアプリを実行するには,まずLinuxアプリが実行できる環境を用意する必要がある。~ |
| + | ユーザーモードのWindows環境側のWin32プロセスで''wsl.exe(またはbash.exe)''を起動すると,''LX Session manager service''が起動される。~ |
| + | ''LX Session manager service''は,Linuxのプログラム(/bin/bash)の動作環境を用意するためにカーネルドライバーの''LXCore/LXSS''を呼び出す。~ |
| + | ''LXCore/LXSS''はLinux Kernelに代わってカーネル機能の一部を処理するレイヤーで,これにより''Picoプロセス''と呼ばれるプログラムが起動される。''Picoプロセス''は通常のLinux起動時と同様にinitを起動して,その後,initから''/bin/bash''を起動するようになっている。~ |
| + | |
| + | 起動したLinuxのShellである/bin/bashからのLinux KernelへのシステムコールはLXCore/LXSSへ送られ,LXCore/LXSSでWindows APIに変換(エミュレーション)して実行する。~ |
| + | #ref(wsl_linux_image02.png,50%);~ |
| + | |
| + | つまり''LXCore/LXSS''は,機能が限定されたLinuxのシステムコールをWindowsで処理できるようにする''エミュレーションプログラム''でLinux Kernelの代わりに使用される。~ |
| + | |
| + | Linux Kernelの全機能をエミュレーションしているわけではないので,Linuxが動作すると言うよりも一部の限定的なLinuxコマンドが使えるということになる。~ |
| + | |
| + | しかし,仮想マシンのようにOSから全ての環境を用意するわけではないのと,サポートするAPI機能は限定的なものなので,比較的高速に動作すると思われる。~ |
| + | |
| + | WSLの利点は,動くプログラムは限定的ではあるがLinuxバイナリがそのままで動作することと,手軽にすぐに利用できる点がある。~ |
| + | |
| + | APIの提供ということでは''Cygwin''と似ているが,''Cygwin''ではDLLによるPosixのWindows APIへの変換・足りないAPIの追加をして完全なPosixサポートを行っているため,WSLに比べ遥かに重くなるのとLinuxバイナリをそのままで動かせるわけでは無い。~ |
| + | |
| + | また多くのPosixコマンドが使えるという意味では''MSYS/MSYS2''があるが,''MSYS/MSYS2''は限定したPosix APIを使ったWindowsのアプリケーションを実行しているので,Linuxのアプリケーションを実行しているのではないのが大きな違い。~ |
| + | |
| + | WSLではLinuxのファイルシステムは使えないので,Windowsのファイルシステムへのアクセスに変換してフアクセスするが,この処理速度がかなり遅い。~ |
| + | | |WSL |MSYS/MSYS2 |Cygwin |Virtual Machine |h |
| + | |Windowsとの連携 |◯ |◎ |◎ |× | |
| + | |実行時の速度,メモリ使用効率 |◯ |◎ |△ |× | |
| + | |Linuxバイナリの動作 |◯(GUI/一部×)|× |× |◎ | |
| + | |
| + | * WSLを用いたLinux環境の構築と利用 [#p1146dac] |
| + | Windows10でWSLを利用してLinux環境を試してみた。~ |
| + | |
| + | ** WSLの有効化 [#k1dffa72] |
| + | WSLを利用するには,WSLを使えるようにWindows10の機能のいくつかを有効にする必要がある。~ |
| + | - ''コントロールパネル>プログラム>プログラムと機能''を開く。~ |
| + | - 左にある''Windowsの機能の有効化または無効化''をクリック。~ |
| + | - ''Windows Subsystem for Linux''にマークを入れてOK。~ |
| + | どのバージョンからかは不明だが,''Linux用 Windows サブシステム''に名前が変わっている。~ |
| + | - PCを再起動する~ |
| + | |
| + | これで,WSLがWindows10で使用出来るようになる。~ |
| + | |
| + | ** WSLとLinuxのインストール [#mc51213c] |
| + | WSLをインストールする場合,現在ではなんらかのLinuxディストリビューションのインストールが必要になるようだ。~ |
| + | |
| + | Microsoft Storeで''Linux''を検索すると,インストールできるLinuxディストリビューションの一覧が表示される。~ |
| + | 好きなディストリビューションを選択して使用できるが,今回は''Ubuntu 18.04 LTS''にしてみる。入手をクリックすると,WSLとLinuxディストリビューションがインストールされる。~ |
| + | |
| + | インストールされるとUbuntuのルートディレクトリは以下の場所になる。~ |
| + | C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\ |
| + | |
| + | ** Ubuntuを起動 [#ae67759d] |
| + | インストールしたUbuntuの起動は,スタートメニューでUbuntuを検索してクリックすれば起動される。~ |
| + | |
| + | 初回起動時は初期設定が行われるためなのか結構時間がかかる(5~6分)。~ |
| + | 初期設定が終わるとアカウントを作成する画面になる。~ |
| + | 好きなユーザー名/パスワードを入れるとそのユーザーアカウントが作成される。~ |
| + | |
| + | これで,見慣れたbashの画面になる。~ |
| + | #ref(bash.png,50%);~ |
| + | |
| + | ** Ubuntuの環境設定等 [#g1996397] |
| + | パッケージ管理ツールaptのリポジトリを,日本のリポジトリに変更しておく。~ |
| + | ''/etc/apt/source.list''の http://archive.ubuntu.com を, http://jp.archive.ubuntu.com に変更してみた。~ |
| + | $ cd /etc/apt |
| + | $ sudo sed -i.bak -e "s/http:\/\/archive\.ubuntu\.com/http:\/\/jp\.archive\.ubuntu\.com/g" sources.list |
| + | |
| + | その後パッケージ管理ツールaptを使ってUbuntuの更新をした。~ |
| + | $ sudo apt update |
| + | $ sudo apt upgrade |
| + | |
| + | ユーザーのホームディレクトリを変更してみた。~ |
| + | これはデフォルトのホームディレクトリが長いパスになっているので,移動しやすいところに変更したいから。~ |
| + | ''/etc/passwd''ファイルを,~ |
| + | yuji:x:1000:1000:,,,:/home/yuji:/bin/bash |
| + | ↓ |
| + | yuji:x:1000:1000:,,,:/mnt/c/home/yuji_wsl:/bin/bash |
| + | のように変更した。~ |
| + | |
| + | 日本語環境をインストールして,ロケールを日本語(ja_JP.UTF-8)に変更する。~ |
| + | $ sudo apt install language-pack-ja |
| + | $ sudo update-locale LANG=ja_JP.UTF-8 |
| + | これで,再ログインするとメッセージなんかが日本語になる。~ |
| + | |
| + | タイムゾーンを,日本(JST)にする。~ |
| + | $ sudo dpkg-reconfigure tzdata |
| + | アジア/東京に設定した。~ |
| + | |
| + | 日本語マニュアルをインストールしておく。~ |
| + | $ sudo apt install manpages-ja manpages-ja-dev |
| + | |
| + | GCCなどをインストールする。~ |
| + | $ sudo apt install build-essential openjdk-11-jdk |
| + | |
| + | ** WindowsとLinuxでのファイルへのアクセス [#tcc86fe9] |
| + | *** LinuxからWindowsのファイルへのアクセス [#e207bb58] |
| + | WSLでは一部のLinuxカーネルのシステムコールをエミュレーションして動作させているので,Windowsのファイルへはファイルシステムとして直接アクセスできる。~ |
| + | |
| + | Windowsの各ドライブへは, |
| + | c:\ /mnt/c/ |
| + | d:\ /mnt/d/ |
| + | : |
| + | : |
| + | のように,Windowsの各ドライブはLinux上の/mnt/{ドライブ名}でのファイルシステムとしてアクセスできる。~ |
| + | |
| + | この機能により,WindowsとLinuxでシームレスな連携をしながら作業ができる。 |
| + | |
| + | また,Linuxで''explorer.exe''と実行してみると,カレントディレクトリでWindowsのエクスプローラーが起動します :) |
| + | |
| + | *** WindowsからLinuxのファイルへのアクセス [#pca941f8] |
| + | Windowsのエクスプローラを起動して,ファイルのパスのところに''\\wsl$\''を入力すると,WSLのディストリビューション毎のファイルシステムに直接アクセスできる。~ |
| + | #ref(exp.png,,50%) |
| + | |
| + | コマンドプロンプトからは, |
| + | > dir \\wsl$\Ubuntu-18.04 |
| + | とかすると,直接アクセスできます。 |
| + | |
| + | ** GUIを使えるようにする [#y29f2811] |
| + | WSLでインストール出来るUbuntu 18.0.4 LTSにはGUI環境(デスクトップ環境)は無い。~ |
| + | これは,WSLではGUI(デスクトップ環境)がサポートされていないので動作しないから。~ |
| + | |
| + | しかし,Windows10でX Windowサーバーを動かして,WSLのLinuxアプリケーションからWindows10側のX ServerにGUIを表示・操作することは出来る。~ |
| + | #ref(XWindow構成.png,80%);~ |
| + | 図は[[X Window System>https://ja.wikipedia.org/wiki/X_Window_System]]構成だが,今回はWorkstationマシンがWindows10マシンで,Remote Machineが''WSLで動作しているUbuntu''となる。(両方とも同じPCで動いている)~ |
| + | |
| + | この方法でGUIを使えるようにしてみる。~ |
| + | |
| + | *** Windows10にX Serverをインストール [#h211f54c] |
| + | WSLでGUIアプリを実行するために,Windows10に[[X Server>https://ja.wikipedia.org/wiki/X_Window_System]]をインストールすることが必要になる。~ |
| + | |
| + | 昔からX Serverとしては[[ASTEC-X>http://www.astec-x.com/]]を使っている。~ |
| + | |
| + | フリーで使用できるWindowsのX Serverとしては,[[VcxSrv>https://vcxsrv.com/]]がある。~ |
| + | まだX Serverをインストールしていない場合は,[[公式サイト>https://vcxsrv.com/]]のFREE DOWNLOADボタンからか,[[こちら>https://github.com/marchaesen/vcxsrv/releases]]からダウンロードしたインストーラーを実行してインストールする。~ |
| + | |
| + | 起動は,XLaunchアイコンをクリックする。 |
| + | - Select Display settingsでMultiple windowsを選択して,次へをクリック~ |
| + | - Select how to start clientsでStart no clientを選択して,次へをクリック~ |
| + | - Extra settings画面で,次へをクリック~ |
| + | - 完了をクリック~ |
| + | |
| + | ''Windowsファイアウォール''絡みの表示が出るが,許可ボタンをクリックしておく。(まあ,同じマシン内の通信なのでキャンセルでも問題ないが・・・) |
| + | |
| + | VcXSrvを終了するとなぜかWindowsのキーボードのレイアウトがUSキーボードになってしまう。~ |
| + | こんな時は,Windows+スペースで入力方式を切り替えてもとに戻せる。 |
| + | |
| + | *** X Windowを使用できるようにいくつかツールと日本語フォントをインストールする [#z303c10e] |
| + | $ sudo apt install x11-apps x11-utils x11-xserver-utils dbus-x11 fonts-ipafont |
| + | |
| + | Xアプリから接続するX Serverを指定するために環境変数をセットする。~ |
| + | $ echo 'export DISPLAY=localhost:0.0' >> ~/.bashrc |
| + | $ source ~/.bashrc |
| + | |
| + | 試しにxeyesを実行して,Windows側のX Serverで表示して動作を確認してみる。~ |
| + | - X ServerをWindowsで起動する~ |
| + | - WSLのbashでxeyesを実行する~ |
| + | $ xeyes |
| + | 目玉が表示されたらOK。~ |
| + | #ref(xyes.png,50%);~ |
| + | |
| + | *** Windows10のフォントを使えるようにする [#rf053494] |
| + | Windows10にインストールされているフォントを,wslのLinuxで使えるようにする。~ |
| + | まず,fontconfigをインストールする。 |
| + | $ sudo apt install fontconfig |
| + | |
| + | Windowsにインストールされているfontを,Ubuntuから参照できるようにする。 |
| + | $ sudo ln -s /mnt/c/Windows/Fonts /usr/share/fonts/windows |
| + | $ sudo fc-cache -fv |
| + | |
| + | *** デスクトップ環境XFceのインストール(おすすめ) [#m03b25e4] |
| + | デスクトップ環境としてXFce(XFceは比較的軽いデスクトップ環境)をインストールしてみる。~ |
| + | $ sudo service dbus start |
| + | $ sudo apt install xfce4-terminal xfce4-session xfce4 |
| + | |
| + | インストールがうまく行ったら,以下のようにしてみる。 |
| + | $ startxfce4 |
| + | |
| + | 以下のようなデスクトップ画面が表示されればOK。~ |
| + | #ref(xfce4.png,40%);~ |
| + | |
| + | *** デスクトップ環境LXDEのインストール [#mdc328ce] |
| + | デスクトップ環境としてXFceではなくLXDE(LXDEは比較的軽いデスクトップ環境。)をインストールしてみる場合。~ |
| + | $ sudo service dbus start |
| + | $ sudo apt install lxde (or lubuntu-desktop) |
| + | |
| + | インストールがうまく行ったら,以下のようにしてみる。 |
| + | $ startlxde |
| + | |
| + | *** デスクトップ環境mateのインストール [#na6fb751] |
| + | デスクトップ環境をXFceやLXDEではなくmateにする場合。~ |
| + | $ sudo service dbus start |
| + | $ sudo apt install ubuntu-mate-desktop mate-desktop-environment mate-common mate-core |
| + | |
| + | mate-sessionがうまく動作しなかったのでXDMCP経由でログインする方法にしてみる。~ |
| + | LightDMの/etc/lightdm/lightdm.confを作成する。 |
| + | [LightDM] |
| + | start-default-seat=false |
| + | |
| + | [XDMCPServer] |
| + | enabled=true |
| + | port=177 |
| + | |
| + | lightdmデーモンを起動する。 |
| + | $ sudo service lightdm start |
| + | |
| + | X ServerをXDMCPで接続するように設定して,実行する。~ |
| + | connect host: 127.0.0.1 |
| + | |
| + | ログイン画面が出ればOK。 |
| + | |
| + | *** 日本語入力IMのインストール [#ped37db9] |
| + | 必要なパッケージをインストールする。日本語変換はmozc(Google日本語入力)を使ってみる。~ |
| + | $ sudo apt install fcitx fcitx-mozc |
| + | $ sudo sh -c "dbus-uuidgen > /var/lib/dbus/machine-id" |
| + | machine-idに生成したUUIDを書き込む。 |
| + | |
| + | 一度,ログアウトする。 |
| + | |
| + | 再度,WSLのubuntuにログインして,以下のように環境変数などを''.bashrc''に追加する。~ |
| + | export GTK_IM_MODULE=fcitx |
| + | export XMODIFIERS=@im=fcitx |
| + | export QT_IM_MODULE=fcitx |
| + | export DefaultIMModule=fcitx |
| + | if [ $SHLVL = 1 ] ; then |
| + | fcitx-autostart > /dev/null 2>&1 |
| + | xset -r 49 |
| + | fi |
| + | |
| + | fcitx-autostartを実行する。~ |
| + | $ xset -r 49 |
| + | $ fcitx-autostart |
| + | Fcitx is running correctly |
| + | と表示される。または, |
| + | I/O warning : failed to load external entity "/usr/share/X11/xkb/rules/xorg.extras.xml" |
| + | と表示されるかもしれないが,warningは気にしない。~ |
| + | |
| + | もし, |
| + | Connection Error (Failed to connect to socket /tmp/dbus-XXXXXXXXXX: Connection refused) |
| + | のようなエラーになったら,再度fcitxを起動してみる。 |
| + | $ killall fcitx |
| + | $ sudo sh -c "dbus-uuidgen > /var/lib/dbus/machine-id" |
| + | $ fcitx-autostart |
| + | |
| + | 日本語入力のOn/Offキー設定をする。~ |
| + | $ fcitx-config-gtk3 |
| + | と実行する。一覧にmozcがなかったら,+ボタンでmozcを追加する。~ |
| + | 次に,全体の設定タブで,「入力メソッドのオンオフ」で半角/全角キーを押してZenkakuhankakuを指定する。~ |
| + | 「入力メソッド起動のその他のキー」は,無効を指定する。~ |
| + | これで日本語入力の設定はOK。~ |
| + | |
| + | 実際の日本語入力は,半角/全角キーを押すと日本語入力出来る。 |
| + | |
| + | * WSLの起動方法と管理 [#e56dd9e9] |
| + | WSLでLinux(bash)を動かすには,いくつかの方法がある。~ |
| + | - ''wsl.exe''から起動する(管理者権限)~ |
| + | wsl.exeを実行したディレクトリで,bashが起動される。~ |
| + | wsl.exeは,C:\Windows\System32 にある。~ |
| + | 単に一つのコマンドのみを実行する場合は, |
| + | wsl [command] |
| + | のようにする。 |
| + | - ''bash.exe''から起動する(管理者権限)~ |
| + | bash.exeを実行したディレクトリで,bashが起動される。~ |
| + | bash.exeは,C:\Windows\System32 にある。~ |
| + | 単に一つのコマンドのみを実行する場合は, |
| + | bash -c [command] |
| + | のようにする。複数のコマンド渡す場合は,クオーテーションでくくるようにする必要がある。~ |
| + | - ''ubuntu1804.exe''から起動する(ユーザー権限)~ |
| + | exeの名前はインストールしたLinuxディストリビューションで違う名前のコマンドになる。~ |
| + | ubuntu1804.exeがある場所は,C:\Users\<ユーザー名>\AppData\Local\Microsoft\WindowsApps ディレクトリにインストールされている。 |
| + | Ubuntu上のホームディレクトリで,bashが起動される。~ |
| + | 単に一つのコマンドのみ実行する場合は, |
| + | ubutnu1804 -c [command] |
| + | とようにする。~ |
| + | |
| + | ** wslconfigコマンドでの管理 [#zdd88463] |
| + | WSL環境に複数のLinuxディストリビューションを入れたときなどの管理に,''wslconfig.exe''が使用できる。~ |
| + | wslconfig.exeは,C:\Windows\System32 にある。実行には管理者権限が必要。~ |
| + | |
| + | コマンドプロンプトを管理者権限で起動してみる。 |
| + | C:\WINDOWS\system32> wslconfig |
| + | Windows Subsystem for Linux の管理操作を実行します |
| + | |
| + | 使用法: |
| + | /l, /list [Option] |
| + | 登録されているディストリビューションを一覧表示します。 |
| + | /all - 現在インストール中またはアンインストール中のものを含めて、すべての |
| + | ディストリビューションを一覧表示します (オプション)。 |
| + | |
| + | /running - 現在実行中のディストリビューションのみを一覧表示します。 |
| + | |
| + | /s, /setdefault <ディストリビューション名> |
| + | ディストリビューションを既定として設定します。 |
| + | |
| + | /t, /terminate <ディストリビューション名> |
| + | ディストリビューションを終了します。 |
| + | |
| + | /u, /unregister <ディストリビューション名> |
| + | ディストリビューションの登録を解除します。 |
| + | |
| + | /upgrade <ディストリビューション名> |
| + | ディストリビューションを WslFs ファイル システム形式にアップグレードします。 |
| + | |
| + | wsl.exeやbash.exeだと,デフォルト設定されているLinuxディストリビューションが起動されるようになっている。~ |
| + | |
| + | 複数のLinuxディストリビューションをインストールした場合,wslconfig.exeでデフォルトを変更できる。~ |
| + | |
| + | * コンソールの文字色を見やすくする [#c5a983bb] |
| + | Windowsのコマンドプロンプトやコンソールアプリで使われているデフォルトの色だと,青なんかが暗くて見にくい。~ |
| + | Windows10だと,多少見やすい配色に変更されている。 |
| + | |
| + | だが,この新しい配色はWindows10をクリーンインストールした時にのみ変更されて,アップグレードでWindows10にした場合は前のままの色が使われる。~ |
| + | ComEmu等のターミナルエミュレータを使用すれば良いのだが,コマンドプロンプトなどの色を変更したい。 |
| + | |
| + | ** 専用ツールを使用する方法 [#u6bfd84a] |
| + | コマンドプロンプトの色設定は,以下のツールでテンプレートからサクッと変えることが出来ちゃいます。~ |
| + | [[Introducing the Windows Console Colortool>https://blogs.msdn.microsoft.com/commandline/2017/08/11/introducing-the-windows-console-colortool/]] |
| + | |
| + | ** レジストリエディタを使って変更する方法 [#r00d2bf5] |
| + | レジストリエディタregeditで,変更することも出来ます。 |
| + | - Windows + R キーで,regeditと入れOKボタンを押す |
| + | - HKEY_CURRENT_USER\Console キーをクリックする~ |
| + | - ColorTable00からColorTable15を変更~ |
| + | ColorTable00からColorTable15がdword型でコンソールアプリで使われるカラーパレット値が設定されているので,これを少し変更する。 |
| + | ColorTable01(暗い青) :800000(R0/G0/B128) -> ff4221(R33/G66/B255)へ変更する。 |
| + | ColorTable09(明るい青):ff0000(R0/G0/B255) -> ff8021(R33/G128/B255)へ変更する。 |
| + | |
| + | これで,コマンドプロンプト(cmd.exe)やWSLのbashターミナルを起動した時のコンソールの青が明るい青で表示されるようになる。 |
| + | |
| + | * WSLを利用するメリット [#h278fbd8] |
| + | WSLのメリットは,複数のPCで構成されていた環境を1台のPCで実現できるところ。~ |
| + | Windowsマシンで不得意だった作業も,Linux環境で行うことで効率よく作業ができる。~ |
| + | |
| + | プログラムなどの開発環境としては,やはりLinux環境の方が優れている。~ |
| + | 各種アセンブリ言語,C/C++,Ada,Java,Fortran,Perl,Python,Ruby,PHPなどといった多くの言語環境がサポートされており,それに対応する膨大なライブラリなどのミドルウェアもほとんどが無償で提供されている。~ |
| + | また,IoT分野なんかに限らず多くの製品・機器では,Linuxが組み込まれて製品化されている。~ |
| + | |
| + | WindowsマシンでLinux環境を利用するには,WSL以外にも仮想マシンでのLinux起動や,CygwinによるPosixエミュレーション,MinGWによるbash等各種ツールの実行環境などでも実現出来る。~ |
| + | |
| + | Hyper-Vを使うWSL2と違い仮想環境を使っていないので,他の仮想環境と共存でき,直接Windowsマシンのファイルへのアクセスも出来る。~ |
| + | WSLでは制限された機能ではあるが,実に手軽にLinux環境を使用することが出来る。~ |
| + | この手軽さこそがWSLのメリットになっている。~ |