Bash on Ubuntu on Windows を使ってみたのと,環境構築
メモ書きに近い内容です.
Bash on Ubuntu on Windowsの使用感想と設定書き綴り
(以下,Linux初心者の発言)
はじめに
Bash on Ubuntu on Windows(BoW) という機能が今年の8月にWindows 10に実装されました.どうやらWindows上でLinuxのbashが実行できるようです.ということで今回これを少し触ってみました.
経緯
僕の通っている大学の授業でプログラムを書く場合は,基本的にLinux(CentOS)で行っています.大学には生徒が自由に使用できるCentOSの入ったマシンがあるのですが,自宅で大学と同環境を用意する場合,大学のサーバに接続する(重い)か,仮想マシンを構築するなどをしなくてはなりません.また,大学のアカウントはユーザに与えられる容量が非常に少ない(ブラウザのキャッシュなど含めて100Mb)です.以前はVirtual Boxを使っていたのですが,最近挙動が重くなってきたので,BoWを試してみることにしました.
ということで,大体以下の事をやってみました
- BoWの導入
- GUIの導入
- 日本語入力の対応
この記事ではbashを実行する際にコマンドプロンプトではなく,PowerShellを使用しています
参考にしたサイト
Bash on Ubuntu on Windowsをインストールしてみよう! - Qiita
Bash on Ubuntu on Windows + XmingによるGUI - Qiita
pc.casey.jp » Ubuntu で日本語が表示されない・文字化け
Bash on Ubuntu on Windows とX Windowの組み合わせで日本語表示と日本語入力: tonopぶらり
PowerShell で Profile を利用して スクリプトの自動読み込みをしてみよう - tech.guitarrapc.cóm
1.BoWの導入
まずはBoWを実行できるようにしないといけません. Windows10をアップデートしても,デフォルトではBashは使用できないようです.
[コントロールパネル]→[プログラム]→[プログラムと機能]→[Windowsの機能の有効化または無効化]で機能のチェックリストを開いて,"Windows Subsystem for Linux(Beta)"をチェックして,インストール,再起動
再起動後,ストアアプリの[設定]を開き,[更新とセキュリティ]→[開発者向け]から"開発者モード"にチェック.
あとは,PowerShellとかからbashと入力すると起動できます.初回時はユーザー名とパスワードの入力を要求されます.
2.GUIの導入
ここまでで,一応bashが動くようになったのですが,まだ問題があります.僕は現在,大学の実験で画像処理をしています.今のままでは画像処理を行うプログラムのコーディングと実行はできても,実行結果の画像を表示することができないのです.そこで,調べたところXmingを使用するとBoWからGUIが起動できると書いてありました.
Xmingの導入
ダウンロードファイル一覧 - Xming X Server for Windows - OSDN
↑公式サイトからXmingと,Xming-fontsをダウンロードしてきます.
Xmingを起動した後,bash上で以下のコマンドを実行します
$ export DISPLAY=localhost:0.0
これで,GUIを開く場合はXmingを通して実行できるようになりました.
ImageMagickもちゃんと開けます()
これGUIの導入ができたと思っていたのですが,実は問題点がありました.日本語表示ができませんでした.Sublime Textを開いて実験のソースコードを確認してみると,日本語コメントが全て文字化けではなく,文字コード(?)で表示されていました.FireFoxも開いてみましたが,同じように日本語の記事は全て読めませんでした.
日本語表示を可能にする
調べたところ,unifontをインストールすることで解決するみたいです.
bash上で以下のコマンドを実行すると日本語が表示できるようになりました.
↓僕のブログもちゃんと日本語で表示されています
実行時に自動でGUIを使用可能にする
さて,GUI環境は整ったわけですが,今のままではXmingの起動,bashの起動,DISPLAYのパス設定と,起動するたびに余計な作業を行う必要があります.bashコマンドでbashを開くと,すぐにGUIが使えるようにしたいので,そのあたりを自動化してみました.
バッチファイルの作成(Windows側)
まず,Xmingを起動する必要があるのですが,面倒です.シェルでbashと打つだけで,Xmingを起動しながらbashを実行するようにしたいです.というわけで,バッチファイルを作成しましょう.
[コントロールパネル]→[システムとセキュリティ]→[システム]→[システムの詳細設定]→[環境変数]→○○(ユーザー名)のユーザ環境変数の一覧から,"path"を選択→[編集]→[新規]で,バッチファイルを保存するディレクトリを登録します.これで,そのフォルダの中にある"○○.bat"と書かれたバッチファイルは全て"○○"と入力するだけで実行できるようになります.
次に,pathに指定したフォルダの中にXmingのショートカットを作成します.バッチファイルと同様にpath内に存在するショートカットファイルは"○○.lnk"と入力すると実行することができます.
次にバッチファイルを作ります.
pathで指定したフォルダ内に,"好きな名前(既存のコマンドと被っているものはダメ).bat"という名前のファイルを作成します.今回は仮にmybash.batとでもしておきました.
mybash.batを好きなエディタ(meryおすすめやで)で開いて以下の内容を記述します.
@echo off
start xming.lnk
taskkill /im Xming.exe /F
1行目:実行したコマンドを表示しないようにします
2行目:Xmingを起動します,.lnk以左は作成したショートカットの名前
3行目:bashの起動
4行目:bashが終了した時点で実行されます.Xmingを終了します.なぜか/Fで強制終了モードにしないと終了できなかった
これで,bashコマンドの代わりにmybashコマンドを入力すると,Xmingを同時に起動してくれるようになりました.
ですが,さっきも書いたようにbashコマンドでXmingを同時に実行したいのです.
ということで,次はプロファイルの設定をします
PowerShellでは,起動時に特定のコマンドを実行するプロファイルを設定できます.
C:\Users\(ユーザー名)\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
がプロファイルのファイルです.存在しない場合は作成しましょう.
そのファイルの中に,コマンドを入力すると,PowerShell起動時に自動的に実行されます.このファイルの中で,以下を記述して,起動時にbashコマンドをmybashコマンドにすり替えるようにしましょう
set-alias bash mybash
set-aliasはコマンドをコマンドを別の名前にしたエイリアスを作成します
エイリアスで作成したコマンドのほうが,bashコマンドなどよりも優先されるようなので,これでbashコマンドがXmingを起動しながらbashを起動するようになりました!(パチパチ
あとは,プロファイルを実行できるようにします.
Windows10はデフォルトではps1ファイルの自動実行が制限されているようです.一旦PowerShellを管理者権限で実行して,次のコマンドを入力し,実行権限を変更します.
set-executionpolicy -executionpolicy remotesigned
これで,次回からは起動時にprofileが自動で読み込まれ,bashコマンドがすり替えられます.
bash起動時の設定(bash側)
Xmingを通してGUIを開くまでの手順の中に,bash側で行う操作もありました.
$ export DISPLAY=localhost:0.0
です.
これをbash起動時に実行するようにしましょう.
bashから~/.bashrcを適当なエディタで開きます. 末尾あたりに先のコマンドをそのまま書き込みます.
これでbash起動時にexportコマンドが実行されるので,bash側でのコマンド入力も不要になります.
よって,PoweShellからbashコマンドを入力するだけで,GUIを開く準備ができた状態でbashを起動するようになりました(疲れた
3.日本語入力の対応
ここはまだできたとは言えない状態です.
どうも通常のshell,コマンドプロンプトからは日本語入力ができなかったので,ターミナルエミュレータを使用するのがよさそうでした.
Bash on Ubuntu on Windows とX Windowの組み合わせで日本語表示と日本語入力: tonopぶらり
まず,uim-fep,uim-anthyをインストールします
次に,xtermをインストールします(多分他のソフトでもいけるんじゃないですかね)
$ sudo apt-get install xterm
uimの設定をします.~/.uimを適当なエディタで開き,以下を記述
(define default-im-name 'anthy)
(define-key generic-on-key? '("<Control> " "`"))
(define-key generic-off-key? '("<Control> " "`"))
反映するために一旦bashを再起動します.
再起動後xtermを実行し,xterm上で
を実行,左下に"anthy[An- R]"みたいなのが出てきます.この状態で,Ctrl+Spaceを押すと,"anthy[AnあR]"と変わり,日本語入力モードになります.これでターミナル上での日本語入力が実現できました.vimとか使って日本語のレポートも書けますね
まだできていないのが,任意のGUIアプリケーション上で日本語を入力することなのですが,これはどうやったらいいんでしょう...?わかりませんでした.
終わりに
というわけで,BoWを使ってみたのと,自分が試してみた設定でした.
正直仮想マシンとほぼ同じ感覚で使用できるので,あとはGUI上で日本語入力ができればもう仮想はいらない(?)かもって感じです.僕がまだBoWの不具合とかあまり知らないのかもしれませんが.PowerShell,コマンドプロンプトからbash開いた時点では,日本語が存在するだけでカーソル位置とかがずれたりしますね.
あとここで書いたことは一応権限の変更とか色々インストールしてるので,念のため,自己責任でお願いします.
2017/2/10:追記
3.日本語入力の対応について
コマンドプロンプトなど,純正でWindowsから提供されている環境でbashを起動した場合,日本語入力ができません.
この記事ではそれの解決策として,xtermというLinux用の端末を起動して,その中でuim-anthyで日本語入力を可能にしています.
wsl-terminal(https://github.com/goreliu/wsl-terminal)というものを教えてもらい,こちらならWindowsから起動したそのままの状態で日本語入力ができるようです.