現: 2023-01-15 (日) 09:16:18 yuji ソース
Line 1: Line 1:
 +* 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を使用する場合は,以下のようなやり方で行っていた。~
 +- HDDなどのストレージに別のパーテーションを作成し,そこに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のカーネル機能を提供するもので,これにより''Picoプロセス''が生成される。''Picoプロセス''は,通常のLinuxと同様にinitが起動されて/bin/bashが起動するようになっている。~
 +起動した/bin/bashは,LXCore/LXSSへのシステムコールによりWindowsカーネルの機能と併用して処理が行われるようになる。~
 +#ref(wsl_linux_image02.png,50%);~
 +
 +つまりLXCore/LXSSは,機能が限定されたLinuxのシステムコールをWindowsで処理できるようにするエミュレーションプログラムになっている。~
 +このため,全てのLinuxの機能が使えるわけではなくエミュレーションしている機能のみが使える。~
 +
 +しかし,仮想マシンのようにOSから全ての環境を用意するわけではないのと,サポートするAPI機能は限定的なものなので,比較的高速に動作すると思われる。動くプログラムは限定的ではあるがLinuxバイナリがそのままで動作することが利点です。~
 +
 +APIの提供ということでは''Cygwin''と似ているが,''Cygwin''ではDLLによるPosixのWindows APIへの変換・足りないAPIの追加を行い,完全なPosixサポートを行っているため,WSLに比べ遥かに重くなるのとLinuxバイナリをそのまま動かせるわけでは無い。~
 +また多くのPosixコマンドが使えるという意味では''MSYS/MSYS2''があるが,''MSYS/MSYS2''はあくまでWindowsのアプリケーションを実行していてLinuxのアプリケーションを実行しているのではないのが大きな違い。~
 +
 +WSLではLinuxのファイルシステムは使えないのでWindowsのファイルシステムに変換してファイルへのアクセスを行うが,この処理がかなり速度がかなり遅い。~
 +|                                    |WSL            |MSYS/MSYS2  |Cygwin              |Virtual Machine |h
 +|Windowsとの連携                      |◯              |◎          |◎                  |×              |
 +|実行時の速度,メモリ使用効率        |◯              |◎          |△                  |×              |
 +|Linuxバイナリの動作と互換性          |◯(GUI/一部×)|×          |×                  |◎              |
 +
 +* WSLを用いたLinux環境の構築と利用 [#p1146dac]
 +WSLを利用してLinux環境を使用してみる。~
 +
 +** WSLの有効化 [#k1dffa72]
 +WSLを利用するにはWSLを使えるようにWindows10の機能を有効にする必要がある。~
 +-「コントロールパネル>プログラム>プログラムと機能」の画面左側にある「Windowsの機能の有効化または無効化」をクリックする~
 +-「Windows Subsystem for Linux」にマークを入れてOKを押す~
 +- PCを再起動する~
 +
 +これで,WSLがWindows10で使用できるようになる。~
 +
 +** Linuxのインストール [#mc51213c]
 +現在のWSLでは,なんらかのLinuxディストリビューションのインストールが必要になっている。(将来はWindowsにLinuxカーネルが搭載される予定なので,必要なくなるかもしれない。)~
 +
 +Microsoft Storeで''Linux''を検索すると,インストールできるLinuxディストリビューションの一覧が表示される。~
 +好きなディストリビューションを選択して使用できるが,今回は''Ubuntu 18.04 LTS''にしてみる。入手をクリックするとインストールされる。~
 +
 +インストールされると,Ubuntuのルートディレクトリは以下の場所になる。~
 + C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_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/d/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
 +
 +** GUIを使えるようにする [#y29f2811]
 +WSLでインストール出来るUbuntu 18.0.4 LTSにはGUI環境は無い。これは,WSLではGUIがサポートされていないので動作しないから。~
 +しかし,Windows10でX Windowsサーバーを動かして,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をインストールすることが必要になる。~
 +昔からX Serverとして[[ASTEC-X>http://www.astec-x.com/]]をインストールしているので,それをそのまま使用する。~
 +
 +フリーで使用できるWindowsのX Serverとしては,[[VcxSrv>https://sourceforge.net/projects/vcxsrv/]]があります。まだ,Windows10マシンにX Serverをインストールしていない場合は,このVcxSrvをインストールすればいいと思う。~
 +上記の配布サイトからダウンロードしたインストーラーを実行して,VcxSrvをインストール出来る。~
 +起動は,XLaunchアイコンをクリックする。
 +- Select Display settingsでMultiple windowsを選択して,次へをクリック~
 +- Select how to start clientsでStart no clientを選択して,次へをクリック~
 +- Extra settings画面で,次へをクリック~
 +- 完了をクリック~
 +
 +''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' >> ~/.bash_profile
 + $ source ~/.bash_profile
 +
 +試しに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にログインして,以下の環境変数を''.profile''または''.bashrc''に追加する。
 + export GTK_IM_MODULE=fcitx
 + export XMODIFIERS=@im=fcitx
 + export QT_IM_MODULE=fcitx
 + export DefaultIMModule=fcitx
 +
 +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でデフォルトを変更できる。~
 +
 +* 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等各種ツールの実行環境などでも実現出来る。~
 +WSLでは制限された機能ではあるが,実に手軽にLinux環境を使用することが出来ます。この手軽さこそがWSLのメリットになっている。~
 +
 +* コンソールの文字色を見やすくする [#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ターミナルを起動した時のコンソールの青が明るい青で表示されるようになる。
  

  • PC/Windows/Windows Subsystem for Linux/Windows10でWSLを使ってみる のバックアップ差分(No. All)
    • 現: 2023-01-15 (日) 09:16:18 yuji

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 193, today: 1, yesterday: 0