2019年6月11日火曜日

[WSL] Windows Subsystem for Linux (WSL) に X Window を実装する

Windows Subsystem for Linux (WSL)のインストール

・コントロールパネル → プログラム → Windowsの機能の有効化又は無効化 を選択
・Windows Subsystem for Linuxにチェックを入れる


MicrooftストアからUbuntu 18.04をインストール

・Ubuntuのコンソールが起動しインストールが始まる(数分かかる)
・インストール終了後、ユーザー名(仮に'usr_name'とする)とパスワードの設定が求められるので適当に決める
・Ubuntuをアップデートする
$ cd /etc/apt
$ sudo sed -i.bak -e "s/http:\/\/archive\.ubuntu\.com/http:\/\/jp\.archive\.ubuntu\.com/g" sources.list
* source.list中の「http://archive.ubuntu.com」という文字列を
 「http://jp.archive.ubuntu.com」という文字列に置き換える。元のファイルは sources.list.bakという名前でバックアップ
$ cd
* HOMEに戻しておく
$ sudo apt update
$ sudo apt upgrade
* "-y"を付けると更新するかどうかを聞いてこない
$ sudo apt upgrade -y
・Ubuntuのバージョンを確認する
$ lsb_release -a

UbuntuでPPAを削除する方法
削除したいPPAを探す
$ sudo ls /etc/apt/sources.list.d
見つけたら
$ sudo rm -i /etc/apt/sources.list.d/PPA_Name



microのインストール

Linux初心者の悩みを解消!「micro」を使って簡単ファイル編集


設定ファイル .bashrc, .profile等を編集することになるが、初心者がvi(vim)を使うのは厳しいのでこれを入れておく。

特徴
・Windowsなどと共通のキーボード操作が使える(Ctrl-cでコピー、Ctrl-vで貼り付けなど)
・キーボード操作を自分好みにカスタマイズできる
・GUIアプリのようにマウスでカーソル移動や範囲選択ができる
・ファイルの形式を認識して色分けして分かりやすく表示できる
・デスクトップアプリとクリップボードを連動できる
* ターミナル上で動くため、新規ウインドウは不要

microのインストール

以下と書いてあったが、現在のWSLではsnapは未対応と出た
$ sudo snap install micro --classic

「~/bin/micro」にインストール
$ [ ! -e ~/bin ] && mkdir ~/bin && export PATH=$PATH:$HOME/bin
$ curl -sL https://gist.githubusercontent.com/zyedidia/d4acfcc6acf2d0d75e79004fa5feaf24/raw/a43e603e62205e1074775d756ef98c3fc77f6f8d/install_micro.sh | bash -s linux64 ~/bin

microをデフォルトのエディタに設定する
~/.bashrcに下記を追加
export VISUAL=micro
export LESSEDIT='micro ?lm-startpos %lm,0. %f'
# PATHを通す
export PATH=$PATH:$HOME/bin

デスクトップ環境のクリップボードとの連携
スクリーンエディタのコピーは通常、エディタ内部に保持されるだけで、デスクトップ環境のクリップボードには入らない。xclipコマンドをインストールすれば、コピーやカットした文字列をデスクトップ環境のクリップボードに入る。
$ sudo apt -y install xclip

microの標準キーバインド
Ctrl-O      ファイルを開く
Ctrl-S      ファイルを保存する
Ctrl-F      検索
Ctrl-N      次を検索
Ctrl-P      前を検索
Ctrl-Z      元に戻す(アンドゥ)
Ctrl-Y      やり直す(リドゥ)
Ctrl-C      コピー
Ctrl-X      切り取り(カット)
Ctrl-V      貼り付け
Ctrl-K      行を切り取り
Ctrl-D      行を複製して挿入
Ctrl-A      全て選択
F1        ヘルプの表示・非表示を切り替え(端末ウィンドウのヘルプに横取りされることが多い)
F2        保存
F3        検索
F4        終了
F7        検索
F10       終了
Ctrl-左     カーソルを行頭へ移動
Ctrl-右     カーソルを行末へ移動
Home      カーソルを行頭へ移動
End       カーソルを行末へ移動
Alt-a      カーソルを行頭へ移動
Alt-e      カーソルを行末へ移動
Ctrl-Shift-左 行頭まで選択
Shift-Home  行頭まで選択
Ctrl-Shift-右 行末まで選択
Shift-End   行末まで選択
Ctrl-Up     カーソルを先頭行へ移動
Ctrl-Down   カーソルを最終行へ移動
Ctrl-Home   カーソルを先頭行へ移動
Ctrl-End    カーソルを最終行へ移動
Ctrl-Shift-上 先頭行まで選択
Ctrl-Shift-下 最終行まで選択
Alt-左     カーソルを左の単語へ移動
Alt-右     カーソルを右の単語へ移動
Alt-b      カーソルを左の単語へ移動
Alt-f      カーソルを右の単語へ移動
Alt-Shift-右 右の単語を選択
Alt-Shift-左 左の単語を選択
Alt-上     行全体を上へ移動
Alt-下     行全体を下へ移動
PageUp    カーソルを1画面上へ移動
PageDown  カーソルを位置画面下へ移動
Ctrl-H     左の文字を削除(バックスペース)
Alt-Ctrl-H  左の単語を削除
Alt-Backspace 左の単語を削除
Ctrl-T     新しいタブを開く
Alt-,      前のタブ
Alt-.      次のタブ
Ctrl-G     ヘルプの表示・非表示を切り替え
Ctrl-R     行番号の表示・非表示を切り替え
Ctrl-L     行番号を指定してカーソルを移動
Ctrl-B     シェルモード
Ctrl-Q     終了
Ctrl-E     コマンドモード
Ctrl-W     次の分割バッファへ移動
Ctrl-U     マクロの記録開始・終了
Ctrl-J     マクロの実行


ページャーlvのインストール

$ sudo apt install lv
エディタをviからvimに変える。~/.bashrcに以下を追加
alias lv="lv -c -E'vim -c %d'"


日本語環境の設定

・以下のパッケージをインストールする
$ sudo apt install language-pack-ja
・エラーメッセージなどを日本語にする
$ sudo update-locale LANG=ja_JP.UTF-8
・Ubuntuを終了する
$ exit
・Ubuntuを起動し確認する
$ echo $LANG
日本語になっていればOK
・タイムゾーンを日本(JST)にする
$ sudo dpkg-reconfigure tzdata
アジア → 東京 を選択する
・Manの日本語化
$ sudo apt install manpages-ja manpages-ja-dev

・Windowsのフォントが使えるようにする
* かなり時間がかかる
* 2019/7/9 削除、再インストールしたらエラーがでた。fontconfigが無くなっているためみたい
$ sudo apt install fontconfig
$ sudo ln -s /mnt/c/Windows/Fonts /usr/share/fonts/windows
$ sudo fc-cache -fv
* Windowsでフォントをインストールする時に「すべてのユーザーに対してインストール」を選ばないとフォントがC:\Windows\Fontsにインストールされないみたい。

・~/.bashrcに以下の行を追加
export LC_MESSAGES=ja_JP.UTF-8
export LC_IDENTIFICATION=ja_JP.UTF-8
export LC_COLLATE=ja_JP.UTF-8
export LANG=ja_JP.UTF-8
export LC_MEASUREMENT=ja_JP.UTF-8
export LC_CTYPE=ja_JP.UTF-8
export LC_TIME=ja_JP.UTF-8
export LC_NAME=ja_JP.UTF-8


Xサーバ(VcXsrv)のインストール

WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編)

・Windows上でXサーバとしてVcXsrvをインストールする
https://sourceforge.net/projects/vcxsrv/

・~/.bashrcに以下の行を追加
export DISPLAY=localhost:0.0
export LIBGL_ALWAYS_INDIRECT=1 <- 追加、意味は不明

・Ubuntu上でライブラリ、パッケージをインストール
$ sudo apt install git build-essential libssl-dev libreadline-dev zlib1g-dev x11-apps x11-utils x11-xserver-utils libsqlite3-dev nodejs fonts-ipafont libxml2-dev libxslt1-dev dbus-x11
* Xサーバを動かすだけなら下記でいいみたい
$ sudo apt install x11-apps x11-utils x11-xserver-utils dbus-x11

・動作確認のためxeyesを起動してみる
* 事前にWindows側でVcXsrvを起動させておく
$ xeyes
目玉のウインドウが表示さればOK

・gnome-terminalの利用
$ sudo apt install gnome-terminal
$ dbus-uuidgen | sudo tee /etc/machine-id

・gtermというコマンド名でgnome-terminalを呼び出せるように設定する
$ echo 'alias gterm="/usr/bin/gnome-terminal"' >> ~/.bash_profile
$ source ~/.bash_profile
* ~/.bashrcに追加した

Windowsのユーザ名として日本語(全角文字、2バイト文字)を用いていると、VcxSrvを起動時に「fatal error cannot open a log file」というエラーメッセージがでる。原因と対処法は以下のページのとおり。
WSLでwindows上にLinuxのGUI環境を作る


以下の記事を使ってプロンプトを変える


【Bash】ターミナルのプロンプトのカスタマイズ方法まとめ

~/.bashrcに追加
-------------------
# 出力の後に改行を入れる
function add_line {
  if [[ -z "${PS1_NEWLINE_LOGIN}" ]]; then
    PS1_NEWLINE_LOGIN=true
  else
    printf '\n'
  fi
}
PROMPT_COMMAND='add_line'
PS1="\[\e[30;47m\] \u@ \[\e[37;46m\]\[\e[30m\] \w \[\e[36;49m\]\[\e[0m\] \$ "
-------------------
で、こんな感じ


lsで表示される色を変える

Ubuntu on Windows Subsystem for Linux 移行備忘録

$ cd /usr/local/src
$ sudo git clone https://github.com/seebi/dircolors-solarized
$ sudo chown -R usr_name dircolors-solarized
$ ln -s /usr/local/src/dircolors-solarized/dircolors.ansi-dark ~/.dir_colors


lsコマンドの表示形式を変える

~/.bashrcに追加
alias lsl="ls -l --time-style=long-iso"
alias lsal="ls -al --time-style=long-iso"

こんな感じ


Vimの設定

Vim初心者に捧ぐ実践的入門

.vimrc
$ gedit .vimrc
----------
filetype plugin indent on
syntax on
set nowrap
set hlsearch
set ignorecase
set smartcase
set autoindent
set ruler
set number
set list
set wildmenu
set showcmd
set shiftwidth=4
set softtabstop=4
set expandtab
set tabstop=4
set smarttab
set clipboard=unnamed
----------


エディタをインストール

1. gedit
$ sudo apt install gedit
プラグインのインストール
$ sudo apt install gedit-plugins

2. leafpad
$ sudo apt install leafpad


nautilusをインストール

$ sudo apt install nautilus


uimをインストールして日本語入力できるようにする

$ sudo apt install -y uim-fep uim-anthy

uimの設定ファイル .uim を作る(Ctrl+Spaceで日本語入力の切り替え)
-----
(define default-im-name 'anthy)
(define-key generic-on-key? '("<Control> "))
(define-key generic-off-key? '("<Control> "))
-----
全角/半角で切り替えるように変更(最後の2行は何か不明)
(define default-im-name 'anthy)
(define-key generic-on-key? '("Henkan_Mode" "zenkaku-hankaku" "<Control> " "<Control>\\"))
(define-key generic-off-key? '("Muhenkan" "zenkaku-hankaku" "<Control> " "<Control>\\"))
(define-key anthy-extend-segment-key? '("<Control>o"))
(define-key anthy-shrink-segment-key? '("<Control>i"))

・~/.bashrcに以下の行を追加
export XIM=uim
export XMODIFIERS=@im=uim
export UIM_CANDWIN_PROG=uim-candwin-gtk
export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim


WSLのコンソールを便利で高機能な「wsltty」に置き換える

https://www.atmarkit.co.jp/ait/articles/1812/13/news031.html
wslttyのダウンロード元

* インストール時の注意
Windows Defender SmartScreenによって実行がブロックされ、「WindowsによってPCが保護されました」という画面が出るので、画面の「詳細情報」をクリックして、「実行」ボタンを押す。


こんな感じ(色、透過率等設定を変えている)

/etc/wsl.conf を作成して設定を書く
https://laboradian.com/installation-and-setting-of-wsl/

$ sudo leafpad /etc/wsl.conf
--------------------
[automount]
enable = true
root = /mnt/
options = "metadata,uid=1000,gid=1000,umask=22"
--------------------
[転載]
・metadata オプションをつけると、Windows側のファイル・フォルダに、WSL側用のパーミッション情報を追加できるようになります。Windows側のパーミッション情報と WSL側のパーミッション情報は別々に設定することができますが、同じ項目に異なるパーミッションを設定した場合、Windows側の設定が優先されます。
・umask=22 により、Windows側のファイル・フォルダのパーミッションから、グループとその他ユーザーに対する書き込み権限を外します。

* 起動時に~/.bashrcを読み込まなくなったので~/.bash_profileに下記を追加
多分、この時に何かミスをしたと思う
### ・gtermというコマンド名でgnome-terminalを呼び出せるように設定する
### $ echo 'alias gterm="/usr/bin/gnome-terminal"' >> ~/.bash_profile
### $ source ~/.bash_profile
----------
if [[ -f ~/.bashrc ]] ; then
    . ~/.bashrc
fi
----------


ターミナルにConsole2を使う

タブ機能があるコマンドプロンプト(Windowsターミナル)環境の構築方法
ダウンロード先:Console2 IME patch(b148) 64bit version
32ビット版のconsole.exeは64ビットのアプリを扱えないようです(SourceForge.netにある物は32ビット版です)

1. Edit → Settingsを開く
2. Tabs → Add
3. bash.exeを登録して"Move up"を押してリストのトップにする
4. Startup Dirを設定したがうまくいかないので~/.bashrcの最後にcd ~を追加

* 2020-01-28 追記
ホットキー"Ctrl+R"がfishの検索キーと重複するので変える


タイル型ウィンドウマネージャー awesome

インストール
$ sudo add-apt-repository ppa:klaus-vormweg/awesome
$ sudo apt update
$ sudo apt install -y awesome
$ awesome --version
awesome (version 4.3)

設定ファイルの修正
$ mkdir -p ~/.config/awesome/
$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
$ leafpad ~/.config/awesome/rc.lua
---------------------------------------
-- デフォルトのターミナルをgnome-terminalにする
-- terminal = "x-terminal-emulator"
terminal = "gnome-terminal"
...
-- 画面上のバーを下に変える (Windowsのツールバーが上にあるため)
--    s.mywibox = awful.wibar({ position = "top", screen = s })
    s.mywibox = awful.wibar({ position = "bottom", screen = s })
...
-- Superキー(Window)をAltにする
-- modkey = "Mod4"
modkey = "Mod1"
---------------------------------------


ubuntuからwindowsのアプリケーションを開く方法

% cmd.exe /C start <filename>
で開くことが出来る。このとき¥マークはエスケープ文字\になるので<filename>の記述は適宜修正する必要がある。
例えばC:\foo\bar\config.xlaunchを開きたいときは次のようになる。
% cmd.exe /C start 'C:\foo\bar\config.xlaunch'
% cmd.exe /C start  C:\\foo\\bar\\config.xlaunch

2 コメント:

渡波 空 さんのコメント...

> このとき¥マークは...
/でも行けますよ

Hida さんのコメント...

ありがとうございます(コメントに気が付きませんでした)。