2016/10/31(月)bash on Ubuntu on Windowsを試してみる

Windows10の夏の大型アップデート(Anniversary Update)で搭載された、Windows Subsystem for Linux (bash on Ubuntu on Windows)を使ってみたので、記録を残しておきます。

cygwinやmsys2など、Windows上でunixツールを使うためのものは以前からいろいろありますが、Microsoft本家が出してきたこいつは、「ubuntuのバイナリがそのまま動く」という点が今までと違います。使うための条件は、
  • Windows10の64bit版であること
  • Windows10のバージョン1607以降であること
です。バージョンは、「スタート→歯車アイコン→システム→バージョン情報」で確認できます。
version1607.png

8月のリリース以降、少しずつ時間をずらしながらWindows Updateを降らせていたようですが、そろそろほとんどのWindows10が1607になった頃ではないでしょうか。

インストール

インストール方法の情報は検索すればたくさん出てきますが、次のような手順です。
  • 「スタートを右クリック→プログラムと機能→Windowsの機能の有効化または無効化」で、「Windows Subsysyem for Linux (Beta)」をチェックする。再起動。
    wsl.png

  • 「スタート→歯車アイコン→更新とセキュリティ→開発者向け」で、「開発者モードを使う」を、「サイドロードアプリ」から「開発者モード」に変更。再起動。
    developermode.png

  • 「スタートを右クリック→コマンドプロンプト」でコマンドプロンプトを起動し、bashとタイプ。"y"でダウンロードとインストールが始まります。数分かかります。ユーザIDとパスワードを聞かれてインストール完了。
    install.png

  • 次回以降は、スタートメニューに「Bash on Ubuntu on Windows」が登録されているのでそこから起動できます。
    startmenu.png

アンインストール

いろいろ試しにパッケージを入れたりしてシステムが壊れることもあるかと思いますが、コマンドプロンプトで
lxrun /uninstall /full
と入れるときれいさっぱり削除できます。上の「bashとタイプ」のところからやりなおすことが出来ます。
uninstall.png

簡単な使い方など

  • 中身はubuntu 14.04です。いつものubuntuの作法通り、
    sudo apt update
    sudo apt upgrade
    
    で最新に更新しておきましょう。
  • これで、端末内で完結するような作業は大体できます。最初は最低限しかインストールされていないので、いつものubuntuの作法で必要なパッケージをインストールしましょう。とりあえず
    sudo apt install build-essential
    
    でCコンパイラなど最低限の開発環境を入れることをお勧めします。
  • ubuntu側からは、windows側のファイルが例えばCドライブなら
    /mnt/c/
    
    以下に見えます。逆にwindows側から見てubuntuのファイルシステムは
    c:\Users\(windowsユーザ名)\AppData\Local\lxss\ 
    
    にあり、このフォルダがubuntu側の"/"に対応しています。隠しファイルになっているので普通の状態では見えないかも知れません。恐らく、ubuntu側からwindowsのファイルシステムを操作することはOK、windows側からubuntuのファイルシステムを操作するのはNG、だと思われます。
プログラミングして楽しむだけならこれで十分と思われます。が、次のような問題点があり、生活の全てをこの環境で行なうのは難しそうです。
  • X windowを使うソフトウェアが動かない。gnuplotくらい使いたい!
  • (文字幅を正しく扱えないせいか)日本語が頻繁に文字化けする。
  • そもそも日本語が入力できない。

X環境を作る

買ったままのwindowsでソフトウェア追加無しにunix環境が使えるのがbash on ubuntu on windowsのメリットですが、windows用のX serverを入れてしまえば使えるソフトウェアが一気に増え、また日本語の問題も解決できる可能性があります。そこで、上記問題点を解決すべく、X serverを入れてみます。

X serverは有料、無料いろいろあると思いますが、いろいろ検索してみると無料では
の2つがよく使われているようです。今回はXmingの方を使ってみました。Xming X Serverによると、Public Domain Releasesという無料版と、Website Releaseという新しいが寄付が必要な版があるようです。今回はPublic Domain Releasesの方を使いました。
  • Xming 6.9.0.31
  • Xming-fonts 7.7.0.10
をダウンロードしてインストールしました。途中sshクライアントを入れるか聞かれますが、自分は不要だったので「Don't install SSH client」としました。

スタートメニューから「Xming」を起動します。(「XLaunch」の方だといろいろオプションを設定してから起動します。今回はデフォルトのままで十分。) すると、右下に
xming.png

のようなアイコンが出ます。これで、bash on ubuntu on windowsからの描画命令を受け止める準備が出来たことになります。動作チェックします。
sudo apt install x11-apps
sudo apt install x11-utils
sudo apt install x11-xserver-utils
といくつかのx11の基本アプリをインストールして、
DISPLAY=localhost:0.0 xeyes &
とxeyesを起動してみます。
xeyes.png

のようにマウスカーソルを追う目玉が表示されたら、正常に動作しています。

gnuplotを試してみましょう。
sudo apt install gnuplot-x11
としてインストールし、
DISPLAY=localhost:0.0 gnuplot
として起動します。
gnuplot.png

のように、ちゃんと動作しました。毎回「DISPLAY=localhost:0.0」とするのが面倒なら、
export DISPLAY=localhost:0.0
とすると、端末を閉じるまで有効になります。

驚くべきことに、日本語フォントを追加してやると、少しエラーが出るもののfirefoxを動かすことができます。
sudo apt install fonts-ipafont
sudo apt install firefox
firefox.png

日本語環境を整える

ここまでちゃんと動作するとなると、日本語の読み書きがまともにできないのが惜しくなってきます。そこで、少し頑張って環境を整えてみました。いろいろ試行錯誤した結果ではありますが、もっといい方法もありそうなので情報が欲しいところです。以下、自分が試した方法を書きます。X serverがwindows側にインストールしてあって、また上で書いたように、
sudo apt install fonts-ipafont
で日本語フォントを追加してあるものとします。

まず、端末は、windows側を捨ててXの方で動かすことにします。いろいろ試しましたが、lxterminalが良さそうでした。
sudo apt install lxterminal
でインストールし、
DISPLAY=localhost:0.0 lxterminal &
で起動します。起動後に「編集→設定」でフォントをMonoSpace 10からMonospace 15くらいにしてあげると見やすい感じになりました。
lxterminal2.png

windows側の端末を使わずにこちらを使うことにします。こちらからだと「DISPLAY=locahost:0.0」をいちいち打たなくてよくなります。windows側の端末を閉じると全部落ちてしまうので、アイコンにでもしておきましょう。

かな漢字変換のシステムを入れます。いろいろ試しましたが、uim-anthyが何とか動作しました。
sudo apt install uim uim-xim uim-anthy
のようにインストールします。そして、windows側のbashターミナルで、
DISPLAY=localhost:0.0 UIM_CANDWIN_PROG=uim-candwin-gtk uim-xim &
のようにかな漢字変換サーバを起動し、lxterminalの起動は
DISPLAY=localhost:0.0 XMODIFIERS="@im=uim" GTK_IM_MODULE=uim QT_IM_MODULE=uim lxterminal &
とします。これで、「半角/全角」キーで日本語入力ができるようになりました。
uimanthy.png

terminal起動時の設定が長いですが、このterminalから起動したものにはこの設定が伝わるので、ここからいろいろ起動することにすれば楽です。

その他もろもろ

他にもいろいろ入れてみました。

TeX環境。
sudo apt install texlive-lang-cjk
で簡単に入ります(ちょっと時間がかかります)。ついでに
sudo apt install evince
でpdfビューアも。
tex.png

java。
sudo apt install default-jdk
あちこちでjavaは動かないという記述を見かけましたが、普通に動いているように見えます。

自分はvimで十分ですが、もう少し普通のエディタを使いたいなら、
sudo apt install geany
あたりはいかがでしょうか。
geany.png

ま、windows側のお気に入りのエディタを使えば済むことではありますが。

vmwareなどの仮想化ソフトを使うよりずっと軽いのが嬉しいです。windowsとの分業がしやすいのも大きな利点かと。次はsshdなどサーバ系のソフトをいろいろ試してみたいと思います。

追記

上で書いたかな漢字変換サーバとlxterminalの起動を自動化するなら、例えばhome directoryの.bashrcの末尾に
if [ $SHLVL -eq 1 ]; then
  if DISPLAY=localhost:0.0 xset q > /dev/null 2>&1 ; then
    DISPLAY=localhost:0.0 UIM_CANDWIN_PROG=uim-candwin-gtk uim-xim &
    DISPLAY=localhost:0.0 XMODIFIERS="@im=uim" GTK_IM_MODULE=uim QT_IM_MODULE=uim lxterminal &
  fi
fi
のように書けばいいでしょう。最初に起動されたbashで、なおかつXが利用可能なら、かな漢字変換サーバとlxterminalを起動します。

次のwindows10の大型アップデートでubuntu 16.04になるとか日本語入力も普通に出来るようになるとか噂が聞こえてくるので、そのときにはここに書いたことの大半は無意味になってしまうかもしれません。

この記事は、次のページを参考に書きました。
貴重な情報を公開して下さった皆様に感謝します。

2016/04/30(土)ubuntu 16.04インストール(11) リモートデスクトップ(xrdp)

ubuntu 16.04にリモートデスクトップを入れたときのメモです。大量にいろいろ突っ込むのであまりお勧めしませんが一応記録を残しておきます。

リモートのubuntuに何かさせたいとき、普通は単にsshで、GUIなアプリを使いたければssh -Xで済みますが、稀にデスクトップ全体を転送したいことがあります。それを実現するものとしては、windowsのリモートデスクトップとVNCが有名ですが、素のwindowsで使えるし速度も速いのでリモートデスクトップを愛用しています。

ところが、unityを採用している最近のubuntuは、リモートデスクトップやVNCのサーバになれません。代わりに標準で「デスクトップの共有」という機能があるのですが(プロトコルはVNC)、これは本体にログインしている状態でしか使えず、ログアウトしてしまうとリモートからログイン出来ないというとても不便なものです。

以下は、ubuntu 16.04に無理やりリモートデスクトップをやらせたときの記録です。
sudo apt install xrdp
これで、サーバそのものは簡単に入ります。しかし、全く動作せず、灰色の画面が出るだけです。動作させるには、リモートから接続した場合はunityを捨てて他のデスクトップを使うしかありません。gnome2の操作性で軽く、見た目を重視しているということで最近人気のある、「MATE」を入れてみました。「メイト」ではなく「マテ」と読むらしいです。
sudo apt install mate-desktop-environment
sudo apt install mate-desktop-environment-extras
リモートでない本体の方でも使えるようになります。いったんログアウトするとデスクトップを選択するためのメニューが出るようになります。

さて、これだけではダメで、/etc/xrdp/startwm.sh を書き換えて、最終行の
. /etc/X11/Xsession
を消して
mate-session
にします。これで一応動いたようですが、日本語キーボードにならず、またかな漢字変換も出来ません。

まず、キーボードを何とかします。これは検索するとたくさん見つかって、/etc/xrdp で
sudo wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini
sudo mv km-e0010411.ini km-0411.ini
sudo ln -s km-0411.ini km-e0010411.ini
sudo ln -s km-0411.ini km-e0200411.ini
sudo ln -s km-0411.ini km-e0210411.ini

sudo systemctl restart xrdp
としたら直りました。

かな漢字変換は、fcitxがダメでibusにすれば大丈夫という情報がいくつか見つかりました。
sudo apt install ibus-mozc (すでに入っていた)
/etc/xrdp/startwm.shのmate-session起動前に
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS="@im=ibus"
ibus-daemon -d
を挿入したらうまく行きました。

ここまであれこれ入れると環境依存で不具合が出そうな気もしますが、参考になれば幸いです。

追記(2017年5月29日)

この方法を使ってNvidiaのGPUを積んだマシンをリモートで管理しようと思ったところ、なぜかNvidiaドライバを有効にするとxrdp経由で入ったときうまく動かず、firefoxが起動しなかったりかな漢字変換が起動しなかったりしていました。xorgドライバなら大丈夫なのですが、それだとcudaが使えず困ります。全く原因が分からずにしばらく放置していたのですが、偶然

nvidiaドライバを入れたubuntuにVNC接続する際に一部のプログラムが起動しない(segmentation fault)場合の解決策

を見かけて解決しました。
cd /usr/lib/x86_64-linux-gnu/
sudo ln -s /usr/lib/nvidia-375/libGLX_indirect.so.0 .
でうまくいきました。nvidia-375の数字の部分は今後のアップデートで変わっていく可能性があるので、そのときはまたやり直す必要があると思います。

2016/04/30(土)ubuntu 16.04インストール(10) IntlabとBLAS

さて、研究に関係のある、IntlabとBLASについでです。

Intlabは、INTLAB version 9をubuntu上のoctaveで使うの記事の通りで大丈夫です。

numpy, octave, Intlabなどは、高速なBLASが無いと本来の性能を発揮できないので、BLASを入れます。こちらも大体ubuntu 14.04でBLASを使うの記事と同じです。
sudo apt install libatlas-base-dev
sudo apt install libatlas-doc

sudo apt install libopenblas-base (既に入っていた)
sudo apt install libopenblas-dev
この時点で有効になっているライブラリを見ると、
$ sudo update-alternatives --config libblas.so.3
alternative libblas.so.3 (/usr/lib/libblas.so.3 を提供) には 3 個の選択肢があります。

  選択肢    パス                                  優先度  状態
------------------------------------------------------------
* 0            /usr/lib/openblas-base/libblas.so.3      40        自動モード
  1            /usr/lib/atlas-base/atlas/libblas.so.3   35        手動モード
  2            /usr/lib/libblas/libblas.so.3            10        手動モード
  3            /usr/lib/openblas-base/libblas.so.3      40        手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 

$ sudo update-alternatives --config liblapack.so.3
alternative liblapack.so.3 (/usr/lib/liblapack.so.3 を提供) には 3 個の選択肢があります。

  選択肢    パス                                    優先度  状態
------------------------------------------------------------
* 0            /usr/lib/openblas-base/liblapack.so.3      40        自動モード
  1            /usr/lib/atlas-base/atlas/liblapack.so.3   35        手動モード
  2            /usr/lib/lapack/liblapack.so.3             10        手動モード
  3            /usr/lib/openblas-base/liblapack.so.3      40        手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 
のような感じでした。14.04のときと違って、openblas版のlapackが入るようになってそれが有効になっていました。

更に、octave+openblas+intlabで丸め変更を検証の記事と同様に丸めの向きが正しく変わっているか検証すると、やはりマルチコアでopenblasは丸めの向きが変わりませんでした。そこで、先の記事と同様にopenblasを作り直します。

やり方は先の記事とほとんど同じですが、ひとつだけ注意点があって、Ubuntu 16.04 LTSをインストールする - Narrow Escapeの記事にあるように、16.04ではデフォルトでaptでパッケージのソースが落とせないようになっています。記事にあるように、
/etc/apt/sources.listでコメントアウトされているdeb-srcをコメントアウトを外す。
sudo apt update
を実行し、パッケージのソースを落とせるようにします。

後は14.04のときとほとんど同じです。
apt source openblas
sudo apt build-dep openblas (必要なものを入れる。liblapack-picが入った)
cd openblas-0.2.18/
Makefile.ruleを編集し、コメントアウトされている
CONSISTENT_FPCSR = 1
を有効化する。
dch -i で、version番号を進め、changelogを書く。
dpkg-buildpackage -b -uc -us
cd ..
sudo dpkg -i libopenblas-base_0.2.18-1ubuntu2_amd64.deb
sudo dpkg -i libopenblas-dev_0.2.18-1ubuntu2_amd64.deb
これで、マルチコアでもきちんと丸めの向きが変わるようになりました。

2016/04/28(木)ubuntu 16.04インストール(9) その他

その他入れた細々としたもの。
sudo apt install openssh-server
これでsshログイン出来るようになります。
sudo apt install git
gitはいまどきは必修科目ですね。(使えるとは言ってない)

後は個人的に必要なもの。
sudo apt install lv
sudo apt install checkinstall
これは14.04の頃からあるのですが、bashでccとc++に対してファイル名補完が効きません。これを解決するため、/usr/share/bash-completion/completions/gcc の末尾の方の2行
    cc  --version 2>/dev/null | grep -q 'GCC\|Debian' && complete -F _gcc cc  || :
    c++ --version 2>/dev/null | grep -q 'GCC\|Debian' && complete -F _gcc c++ || :

    cc  --version 2>/dev/null | grep -q 'GCC\|Debian\|ubuntu' && complete -F _gcc cc  || :
    c++ --version 2>/dev/null | grep -q 'GCC\|Debian\|ubuntu' && complete -F _gcc c++ || :
のように修正しました。

また、ホームディレクトリに作られる「ダウンロード」などのディレクトリが日本語だと何かと不便なので、英語表記に直します。
LANG=C xdg-user-dirs-gtk-update
として「Update Names」をクリックします。これでホームディレクトリが
examples.desktop  テンプレート  ドキュメント  ピクチャ      公開
ダウンロード      デスクトップ  ビデオ        ミュージック
から
Desktop    Downloads  Pictures  Templates  examples.desktop
Documents  Music      Public    Videos
に変わりました。

さらに、ふと目を離すとロックされてパスワードが要求されるのが嫌なので、システム設定(左側の歯車アイコン)→画面の明るさとロック で「ロックする」をオフに。ついでに、「サスペンドからの復帰時にパスワードを要求する」のチェックを外しました。

また、時計の表示が寂しかったので、上部の時刻をクリックし、時刻と日付の設定→時計 で、時計の表示設定の「曜日」と「月日」をクリックしました。

これで大体14.04で日頃使っている環境が出来た気がします。使ってみた感想は後ほど報告します。Intlabやopenblas関連についても後ほど試して報告します。

2016/04/27(水)ubuntu 16.04 インストール(8) マルチメディア系

研究には全然関係ないけど、マルチメディア系?のいろいろを入れた記録です。
sudo apt install ubuntu-restricted-extras
で、著作権上の制限があってインストーラには入れられないアプリケーション群が入ります。flashのプラグインもこれで入りました。

市販dvdの再生を可能にするには、以前は
sudo /usr/share/doc/libdvdread4/install-css.sh
でしたが、15.10から
sudo apt install libdvd-pkg
sudo dpkg-reconfigure libdvd-pkg
になりました。

その他、
sudo apt install handbrake
sudo apt install vlc
sudo apt install ffmpeg
sudo apt install ffmpeg-doc
を入れました。ffmpegは14.04では消されていたのが復活したようです。

なお、画像ビューアはデフォルトで入っているものを使っています。名前が分かりにくいですが「eog」です。
OK キャンセル 確認 その他