はじめに
WSL をはじめて使うので,私の備忘録代わりのメモにします. DrvFS に metafata を付与して,Linux 側のパーミッションを保持できるようになったので,ホームディレクトリを DrvFS 上に持っていきます.一度,wsl.conf の設定が有効にならなかったので諦めてたのですが,もう一度試してみたら有効になったので変更しました.前回は typo していたのかもしれません.
Windows
HP Spectre 13-af000 を購入したのファンクションキーと Ctrl と Caps Lock の変更します.
- ファンクションキーの設定
電源投入後,ESC を押してメニューを表示させ、F10 から BIOS の設定をする.System Configuration → Action Keys Mode を Disabled に変更する.
- キーの入替え
Caps lock(0x003a) を 左Ctrl(0x001d) に、左Alt(0x0038) と 左Win(0xe05b) を入れ替える.
regrdit を起動して,【HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout】に【Scancode Map】(REG_BINARY) を追加する(参考: 1d,00,3a,00, (変更後)(変更前)).
00 00 00 00 00 00 00 00
04 00 00 00 1d 00 3a 00
5b e0 38 00 38 00 5b e0
00 00 00 00
WSL
いろいろなところに情報がありますが,取り敢えず作業した内容をメモします.
インストール
-
コントロールパネル→プログラム→Windows の機能の有効化または無効化からWindiws Subsystem for Linuxを有効にして再起動. -
Microsoft StoreからUbuntu 18.04をインストール
初期設定
スタートメニューから Ubuntu 18.04 を起動してユーザの作成をする.
- システムの更新
プロキシ環境なら下記の設定を行う.
$ export http_proxy=http://サーバ名:ポート番号/
$ export https_proxy=$http_proxy
$ export ALL_PROXY=$http_proxy
sudo apt update,sudo apt upgrade でシステムの更新を行う.プロキシ環境なら sudo -E apt update,sudo -E apt upgrade のように -E を付けてコマンドを実行する.
$ sudo -E apt update
$ sudo -E apt upgrade
- 日本語 Locale
$ sudo -E apt install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
exit で Ubuntu を終了して,もう一度 Ubuntu を起動する.echo $LANG でロケールが変更されているか確認する.
- 日本語 manpage の導入
$ sudo -E apt install manpages-ja manpages-ja-dev
$ sudo apt autoremove
- タイムゾーンの設定
$ sudo dpkg-reconfigure tzdata
- 開発環境のインストール
$ sudo -E apt install build-essential
$ sudo -E apt install gdb
- フォント関連
Windows と共通のフォントを利用する場合は,Windows にフォントをインストールする.
$ sudo ln -s /mnt/c/Windows/Fonts /usr/local/share/fonts/windows
$ sudo fc-cache -vf
Powerline のパッチを当てたフォントのような Linux からしか利用しないものに関しては,$HOME/.local/share/fonts にフォントをコピーして,fc-cache -vf を実行する.知らなかったのですが,$HOME/.local 以下に置くのがお作法みたいですね.
- Hyper ターミナル
https://hyper.is/ からダウンロードしてインストールする.
%USERPROFILE%\appdata\local\hyper に本体があるので,スタートにピン留めする.
WSL(Ubuntu 18.04) が起動するように,%USERPROFILE%\.hyper.js を編集する.
fontSize: 14,
shell: 'C:\\Windows\\System32\\wsl.exe',
shellArgs: [],
- VcXsrv Windows X Server
https://sourceforge.net/projects/vcxsrv/ からダウンロードしてインストールする.
(スタートメニューとデスクトップのショートカットのチェックを外す).
C:\Program Files\VcXsrv\vcxsrv.exe を右クリックして,プロパティを開き 高 DPI 設定 の変更 → 高 DPI スケール設定の上書き にチェックをいれ,アプリケーションにする.
ホームディレクトリの変更
WSL のデフォルトユーザを変更するのに必要な [distro.exe] が分からなくて悩みました.Microsoft Store の Ubuntu 18.04 の説明文に ubuntu1804 とあります.ただし,管理者権限の{コマンドプロンプト,PowerShell}からしか PATH が通っていないようで,気づくまで無駄に時間がとられました.
- Drvfs の
/mnt/cをmetadata付きで自動マウント
/etc/wsl.conf に下記内容で作成して,WSL を立ち上げ直します.
[automount]
options = "metadata,umask=22,fmask=11"
mount -l コマンドで
C: on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000,umask=22,fmask=11,metadata)
のように,metadata が付与されているのを確認する.
ホームディレクトリ の場所を C:\home 以下に変更するので,C ドライブに home フォルダを作成しておきます.
管理者権限でコマンドプロンプトを起動して,下記の手順でホームディレクトリを変更します.念のためバックアップをとることをおすすめします.
% ubuntu1804 config --default-user root
% wsl
# usermod -d /mnt/c/home/xxx -m xxx (xxx はユーザ名)
# exit
% ubuntu1804 config --default-user xxx
% wsl
pwd コマンドや /etc/passwd からホームディレクトリが変更できているか確認します.
usermod の -m は,現在のホームディレクトリを新たに指定したホームディレクトリに移すオプションです.
Emacs
NTEmacs @ ウィキ の設定です.ありがとうございます。
- インストール
$ sudo -E apt install emacs-25
$ sudo -E apt install cmigemo
.bashrc などに下記設定を追加.
# emacs setting
export DISPLAY=localhost:0.0
if [ "$INSIDE_EMACS" ] ; then
TERM=eterm-color
fi
(
command_path="/mnt/c/Program Files/VcXsrv/vcxsrv.exe"
command_name=$(basename "$command_path")
if ! tasklist.exe 2> /dev/null | fgrep -q "$command_name"; then
"$command_path" :0 -multiwindow -clipboard -noprimary -wgl > /dev/null 2>&1 & #
for us-keyboard
fi
)
alias emacs="NO_AT_BRIDGE=1 LIBGL_ALWAYS_INDIRECT=1 emacs"
ターミナルから emacs と打って,Emacs が起動するのを確認する.
- Google 日本語入力
Google 日本語入力 を利用するので,取り敢えずインストールします.Microsoft IME を使わないので,入力方式エディターから削除します.
設定 → 時刻と言語 → 地域と言語 → 日本語 を選択した,オプションをクリックっして,キーボードの Microsoft IME を削除する.
時刻と言語 → 地域と言語 → キーボードの詳細設定 → 言語バーオプション → キーの詳細設定 の入力言語のホットキーのキーシーケンスを無効にする.
IME のプロパティ のキー設定の編集から,
-
変換前入力中,変換中,入力文字なし→IMEを無効化 -
直接入力→IMEを有効化
の入力キーに C-\ を割り当てる.この設定は完全に私の好みです(普通は必要ないです).
mozc_emacs_helper については,WSL の Emacs で日本語入力 に書いています.
- emacsclient
init.el に追加する.
;;; server start for emacsclient
(use-package server
:if window-system
:config
(unless (server-running-p)
(server-start))
:diminish (server-buffer-clients . " ⓒ"))
コマンドプロンプトから wsl.exe emacsclient -n ファイル名 で開いています.wslpath が想定した動作をしてくれないので,カレントのファイルしか開くことができないです
.
[6/20 追記]
wslpath ですが引数を 'aaa.txt' か "..\aaa.tx " のようにすると想定した動作になってくれました.
どこに作成したもいいのですが,~/.local/bin に wslemacsclient.bat を下記に内容で作成する.
@echo off
for /f "usebackq" %%i in (`wsl wslpath '%1'`) do set unixpath=%%i
wsl emacsclient -q -n %unixpath%
このままでは,使いづらいので doskey (alias みたいなもの) に登録して,アクセスしやすいようにします.
レジストリエディタを起動して,HKEY_CURRENT_USER\Software\Microsoft\Command Processor に移動する.
文字列値 AutoRun を作成し,値のデータを doskey ee=C:\home\xxx\.local\bin\wslemacsclient.bat $1 に設定する(xxx:ユーザ名).
コマンドプロンプトを開き,doskey /macros で ee が登録されいることを確認します.ee ファイル名,ee フォルダ名\ファイル名 などで,emacsclient が動作することを確認します.もしくは,wslemacsclient.bat にファイルをドラッグして動作することを確認します(一瞬コマンドプロンプトの画面が表示される).
私は必要ないですが,右クリックの送るメニューに追加してもいいかもしれません.
コマンドプロンプトから start shell:sendto を実行して SendTo を開き, wslemacsclient.bat のショートカットを作成し,プロパティから実行時の大きさを最小化にでもすれば,いいのではと思います.
これで,MSYS2 の Emacs よりはるかに快適になりました.
[6/20 追記終]
[6/22]
なぜか PATH の通ったところにバッチファイルを置いても wslemacsclient.bat のように拡張子まで入力しないと,上手くいかなかったので doskkey にバッチファイルを登録していましたが,拡張子なしでも動作するようになった(?)ので,doskey の登録はやめました.
[6/22 追記終]