2020年7月23日木曜日

[WSL] wslのインストールと設定(簡易版)[更新 2020年7月31日]

Windows 10 Build 19041 (2020 May update)にUbuntu 20.04LTをインストールする


以降$HOME(/home/hida)にある事を明示するために
$ leafpad ~/.bashrc
と記述しているが、$HOMEにいるのであれば
$ leafpad .bashrc
でかまわない。


[wslセットアップ]
以下2項目は既に出来ている
・コントロールパネル → プログラム → Windowsの機能の有効化又は無効化 を選択
・Windows Subsystem for Linuxにチェックを入れる
・Linux用 Windowsサブシステムにチェックを入れる

・PowerShellを管理者権限で起動し、以下コマンドを実行する。
 PS > dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
 PS > dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
・PCを再起動 
・MicrooftストアからUbuntu 20.04LTをインストール
・Ubuntuのコンソールが起動しインストールが始まる(数分かかる)
・インストール終了後、ユーザー名('hida'とする)とパスワードの設定が求められるので適当に決める
* デフォルトではユーザー名に大文字が使えない。原因は、adduser コマンドの内部で使用されている NAME_REGEX という変数の値が「^[a-z][-a-z0-9_]*\$」となっているため。
・PowerShellを管理者権限で起動し、以下コマンドを実行する。
現在のバージョンを確認する。
PS > wsl -l -v
以下コマンドを実行してUbuntuをWSL 2へ変換する。
PS > wsl --set-version Ubuntu-20.04 2
* ”WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください”と表示されたら上記のリンク先より
”x64 マシン用の最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロード”してインストールする。
再度実行
PS > wsl --set-version Ubuntu-20.04 2

PS > wsl --set-default-version 2
変換後のバージョンを確認する。
PS > wsl -l -v
・Ubuntuをアップデートする
$ cd /etc/apt
* 日本のサーバーからデータを取得するようにリストを書き換える
$ sudo sed -i.bak -e "s/http:\/\/archive\.ubuntu\.com/http:\/\/jp\.archive\.ubuntu\.com/g" sources.list
* $HOME(home/hida)に戻しておく
$ cd
$ sudo apt update
$ sudo apt upgrade -y


[microのインストール]
* vi(vim)のような私には敷居が高いエディタの代わりに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


[デスクトップ環境のクリップボードとの連携]
$ sudo apt -y install xclip


[lvのインストール]
$ sudo apt -y install lv


[日本語環境の設定]
$ sudo apt -y install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
$ exit
$ sudo dpkg-reconfigure tzdata
$ sudo apt install manpages-ja manpages-ja-dev
$ 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 PATH=$PATH:$HOME/bin
export VISUAL=micro
export LESSEDIT='micro ?lm-startpos %lm,0. %f'
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

# wls
# export DISPLAY=localhost:0.0
# wsl 2
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
export LIBGL_ALWAYS_INDIRECT=1


# Xクライアント起動時に 「Couldn't connect to accessibility bus: ... 接続を拒否されました」
# とワーニングが出る場合に、これが出ないように防止
export NO_AT_BRIDGE=1

alias lv="lv -c -E'vim -c %d'"
alias lsl="ls -l --time-style=long-iso"
alias lsal="ls -al --time-style=long-iso"


[GUIとCLIで起動するテキストエディタを自動で切り替える]
$ micro ~/.bashrc
-----
if [[ $DISPLAY ]];then
  export EDITOR=gedit
else
  export EDITOR=micro
fi
-----


[Xサーバ(VcXsrv)が使えるようにする]
* 事前にWindows側でVcXsrvをインストールしておく事
$ 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
動作確認 事前にWindows側でVcXsrvを起動させておく
* WindowsのファイヤーウォールでVcXsrvをプライベート、パブリック共に許可にしておく
$ xeyes

Xサーバ(VcXsrv)の自動起動
https://demura.net/lecture/15290.html
ディスクトップのXLaunchのショートカット(無ければ作る)の「リンク先」を下記に変更し、スタートアップホルダーに入れる (WSL 1の場合)
"C:\Program Files\VcXsrv\vcxsrv.exe" :0 -ac -multiwindow -reset -terminate -nowgl


gedit/leafpadで文字列の範囲指定が出来ない場合の対策
XLaunchのclipboardに関する部分のチェックを外す


config.xlaunch
----------
<?xml version="1.0" encoding="UTF-8"?>
<XLaunch WindowMode="MultiWindow" ClientMode="NoClient" LocalClient="False" Display="-1" LocalProgram="xcalc" RemoteProgram="xterm" RemotePassword="" PrivateKey="" RemoteHost="" RemoteUser="" XDMCPHost="" XDMCPBroadcast="False" XDMCPIndirect="False" Clipboard="False" ClipboardPrimary="False" ExtraParams="-ac" Wgl="True" DisableAC="True" XDMCPTerminate="False"/>
----------


[lsで表示される色を変える]
$ cd /usr/local/src
$ sudo git clone https://github.com/seebi/dircolors-solarized
$ sudo chown -R usr_name dircolors-solarized
* usr_name は自分の名前に変える
$ ln -s /usr/local/src/dircolors-solarized/dircolors.ansi-dark ~/.dir_colors


[gnome-terminalのインストール]
$ sudo apt install gnome-terminal
$ dbus-uuidgen | sudo tee /etc/machine-id


[エディタをインストール]
$ sudo apt install gedit gedit-plugins

* Ubuntu20ではleafpadが無いのでplumaを入れる
$ sudo apt install pluma
~/.bashrcに以下を追加
-----
alias leafpad="pluma"
-----
plummaの文字化け対策 [2020/7/23追記]
https://linuxfan.info/pluma-editor
$ gsettings set org.mate.pluma auto-detected-encodings "['UTF-8', 'CURRENT', 'CP932', 'EUC-JP-MS', 'ISO-2022-JP', 'ISO-8859-15', 'UTF-16']"
$ gsettings set org.mate.pluma shown-in-menu-encodings "['CP932', 'EUC-JP-MS', 'ISO-2022-JP', 'ISO-8859-15', 'UTF-16']"

[nautilusをインストール]
$ sudo apt install nautilus


[python, Powerlineをインストール]
$ sudo apt update
$ sudo apt upgrade
* gitはインストールしてあるばず
$ sudo apt install git
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc


$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
$ sudo apt-get install libffi-dev

$ pyenv install 3.8.3
$ pyenv global 3.8.3
$ git clone https://github.com/b-ryan/powerline-shell
$ cd powerline-shell
$ python setup.py install

~/.bashrcに追加
-----
function _update_ps1() {
    PS1=$(powerline-shell $?)
}

if [[ $TERM != linux && ! $PROMPT_COMMAND =~ _update_ps1 ]]; then
    PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
-----

Powerline用の設定ファイル2本
$ mkdir -p ~/.config/powerline-shell && \
powerline-shell --generate-config > ~/.config/powerline-shell/config.json
$ leafpad ~/.config/powerline-shell/config.json
-----
{
  "segments": [
    "newline",
    "virtual_env",
    "ssh",
    "cwd",
    "git",
    "hg",
    "jobs",
    "newline",
    "root"
  ],
  "mode": "patched",
  "cwd": {
    "max_depth": 5
  },
  "theme": "~/.config/powerline-shell/themes/soft-era.py",
  "vcs": {
    "show_symbol": "true"
  }
}
-----
$ mkdir  ~/.config/powerline-shell/themes
$ leafpad ~/.config/powerline-shell/themes/soft-era.py
-----
# this theme file placed in "~/.config/powerline-shell/themes/soft-era.py"
# this is a powerline shell theme for use with soft-era iTerm2 theme: https://github.com/soft-aesthetic/soft-era-iterm2

# dark colors:
# 0  black
# 1  darker red (salmon)
# 2  green
# 3  light pink
# 4  blue
# 5  violet?
# 6  purple
# 7  light bg color

# light colors:
# 8  deep purple
# 9  lighter read (coral)
# 10 green
# 11 yellow
# 12 blue
# 13 violet?
# 14 purple
# 15 white

from powerline_shell.themes.default import DefaultColor

class Color(DefaultColor):
    # USERNAME_FG = 15
    # USERNAME_BG = 6
    # USERNAME_FG = 15
    # USERNAME_BG = 13
    USERNAME_FG = 15
    USERNAME_BG = 13
    USERNAME_ROOT_BG = 0

    # HOSTNAME_FG = 15
    # HOSTNAME_BG = 10
    # HOSTNAME_FG = 15
    # HOSTNAME_BG = 14
    # HOSTNAME_FG = 3
    # HOSTNAME_BG = 14
    HOSTNAME_FG = 0
    HOSTNAME_BG = 4

    HOME_SPECIAL_DISPLAY = False
    HOME_BG = 4
    HOME_FG = 0
    PATH_FG = 0
    PATH_BG = 4
    CWD_FG = 0
    SEPARATOR_FG = 14

    READONLY_BG = 0
    READONLY_FG = 15

    SSH_BG = 0
    SSH_FG = 15

    REPO_CLEAN_FG = 0
    REPO_CLEAN_BG = 7
    REPO_DIRTY_FG = 5
    REPO_DIRTY_BG = 7

    JOBS_FG = 4
    JOBS_BG = 7

    CMD_PASSED_FG = 15
    CMD_PASSED_BG = 2
    CMD_FAILED_FG = 15
    CMD_FAILED_BG = 1

    SVN_CHANGES_FG = REPO_DIRTY_FG
    SVN_CHANGES_BG = REPO_DIRTY_BG

    GIT_AHEAD_BG = 7
    GIT_AHEAD_FG = 4
    GIT_BEHIND_BG = 7
    GIT_BEHIND_FG = 6
    GIT_STAGED_BG = 7
    GIT_STAGED_FG = 2
    GIT_NOTSTAGED_BG = 7
    GIT_NOTSTAGED_FG = 5
    GIT_UNTRACKED_BG = 7
    GIT_UNTRACKED_FG = 5
    GIT_CONFLICTED_BG = 7
    GIT_CONFLICTED_FG = 1
    GIT_STASH_BG = 7
    GIT_STASH_FG = 6

    VIRTUAL_ENV_BG = 7
    VIRTUAL_ENV_FG = 2

    BATTERY_NORMAL_BG = 7
    BATTERY_NORMAL_FG = 2
    BATTERY_LOW_BG = 7
    BATTERY_LOW_FG = 1

    AWS_PROFILE_FG = 15
    AWS_PROFILE_BG = 2

    TIME_FG = 15
    TIME_BG = 10
-----


[uimをインストール]
$ sudo apt install -y uim-fep uim-anthy
$ leafpad ~/.uim
-----
(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"))


[Vimの設定]
$ leafpad ~/.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
----------


[GNU nano ver 4.0のインストールと設定]
$ cd ~/
オリジナルを削除
$ sudo apt remove nano
$ sudo apt-get install libncursesw5-dev
$ wget https://www.nano-editor.org/dist/v4/nano-4.0.tar.gz
$ tar -zxvf nano-4.0.tar.gz
$ cd nano-4.0
$ ./configure --enable-utf8
$ make
$ sudo make install
$ cd ~/
$ rm -rf nano-4.0*

設定ファイル
$ leafpad ~/.nanorc
----------
# Settings
set autoindent    #インテンドを揃える
set backup        #[file name]~で保存
set cutfromcursor #切取を現在地から行末までに
set linenumbers   #左端に行表示
set multibuffer   #^Rで新しいファイル編集に
set zap           #指定範囲を削除可能に
#set nohelp       #暗記したら(画面の有効活用)

# syntax highlight
include "/usr/share/nano/c.nanorc"
include "/usr/share/nano/python.nanorc"
include "/usr/share/nano/tex.nanorc"
include "/usr/share/nano/sh.nanorc"
#include "/usr/share/nano/*"
#include "~/.nano/*"

# Color 文字,背景
set titlecolor white,green
set numbercolor white,green
set selectedcolor white,green
#set statuscolor white,green
#set keycolor white,green
#set functioncolor white,green
----------


[Cmderの設定]
Cmderにデフォルトで設定されているCtrl+Cのショートカットキーを「なし」にします(通常このキーは、プロセスに対して割り込みシグナルを送るキーであるため)。




[brewのインストール]

$ sudo apt-get install build-essential curl git m4 ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev
$ sudo apt-get install gettext
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
$ test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
$ test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
$ echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile
$ brew doctor
* エラーがでなければOK
動作確認
$ brew install sl
$ sl
* SLが走った

* pyenvをインストールしてるとbrew doctorで出るWarning を消す方法
参考にしたサイト

下記のような警告が出る
-----
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and which additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew-provided
script of the same name. We found the following "config" scripts:
  /home/hida/.pyenv/shims/python-config
  /home/hida/.pyenv/shims/python3-config
  /home/hida/.pyenv/shims/python3.8-config
-----

PATH環境変数に/Users/hida/.pyenv/shimsのようにpyenvのディレクトリが含まれてしまうのが原因。brewを実行するときにだけPATH環境変数にpyenvのディレクトリが含まれない形にする。
.profileに下記を追加する
-----
alias brew="PATH=/home/linuxbrew/.linuxbrew/bin:/usr/bin brew"
-----


[fishのインストール]
$ sudo apt-add-repository ppa:fish-shell/release-3
$ sudo apt update
$ sudo apt install -y fish
$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher
$ fish
> fish -v
> fisher -v
> fisher add oh-my-fish/theme-agnoster
* fish set_color: Unknown color '~' とエラーが出る
> fisher add oh-my-fish/theme-bobthefish

デフォルトシェルの設定
$ chsh -s /usr/local/bin/fish
* こっちが無難
~/.bashrcの最終行に追記
-----
exec fish
-----

プラグインのインストール
・jethrokuan/fzf
Ctrl + R でコマンド履歴を検索可能になる
> fisher add jethrokuan/fzf # https://github.com/jethrokuan/fzf
> git clone --depth 1 https://github.com/junegunn/fzf.git $HOME/.fzf
> $HOME/.fzf/install --all
・fish-bd
親ディレクトリに bd コマンドで移動可能になる
> fisher add 0rax/fish-bd
・edc/bass
bash script を fish で実行可能
> fisher add edc/bass
・jethrokuan/z
すべてのディレクトリへ直接移動できる(行ったことあるディレクトリにしか行けない)
> fisher add jethrokuan/z
・z
*  jethrokuan/zと同じみたいなので、使っていない
> git clone https://github.com/rupa/z
> sudo cp z/z.sh /usr/local/bin/
~/.config/fish/config.fishに以下を追加
set -gx Z_SCRIPT_PATH /usr/local/bin/z.s

プラグインのインストール完了後にやること
> fish_update_completions

fishの設定ファイル(~/.bashrcに相当)
~/.config/fish/config.fish
----------
# fish起動時のメッセージを削除
function fish_greeting
  echo ""
end
# Powerline用
function fish_prompt
    powerline-shell --shell bare $status
end

# bashのaliasは無効なので再設定する
alias lv="lv -c -E'vim -c %d'"
alias gterm="/usr/bin/gnome-terminal"
alias lsl="ls -l --time-style=long-iso"
alias lsal="ls -al --time-style=long-iso"
alias leafpad="pluma"
alias brew="PATH=/home/linuxbrew/.linuxbrew/bin:/usr/bin brew"
* これはエラーが出る

# lsの色を見やすく変更
if test ! -e ~/.dircolors/dircolors.ansi-dark
    git clone https://github.com/seebi/dircolors-solarized.git ~/.dircolors
end
eval (dircolors -c ~/.dircolors/dircolors.ansi-dark)

# 色配置は次のコマンドの出力に基づいています
# fish-vimcolor onedark

# commandline
set fish_color_normal         brwhite
set fish_color_autosuggestion brblack
set fish_color_cancel         brcyan
set fish_color_command        brpurple
set fish_color_comment        brblack
set fish_color_cwd            brred
set fish_color_end            brwhite
set fish_color_error          brred
set fish_color_escape         brcyan
set fish_color_host           brgreen
set fish_color_host_remote    bryellow
set fish_color_match          brcyan --underline
set fish_color_operator       brpurple
set fish_color_param          brred
set fish_color_quote          brgreen
set fish_color_redirection    brcyan
set fish_color_search_match   --background=brblack
set fish_color_selection      --background=brblack
set fish_color_user           brblue

# pager
set fish_pager_color_progress              brblack --italics
set fish_pager_color_secondary_background  # null
set fish_pager_color_secondary_completion  brblack
set fish_pager_color_secondary_description brblack
set fish_pager_color_secondary_prefix      brblack
set fish_pager_color_selected_background   --background=brblack
set fish_pager_color_selected_completion   bryellow
set fish_pager_color_selected_description  bryellow
set fish_pager_color_selected_prefix       bryellow

# base16_theme -t monokai でテーマ変更が可能
function base16_theme -V BASE16_DIR -d "set base16 theme"
    argparse -n=base16_theme 't/transparent' -- $argv; or return
    test -z "$argv"; and return

    set -l theme $argv[1]
    set -lq _flag_transparent
        and set -x BASE16_SHELL_SET_BACKGROUND false # clear
        or  set -x BASE16_SHELL_SET_BACKGROUND true  # non-clear

    sh $BASE16_DIR/scripts/base16-$theme.sh
end

function pick_themes -V BASE16_DIR -d "list themes to complete base16_theme argument"
    find $BASE16_DIR/scripts/*.sh -type f -printf '%f\n' \
        | string replace -ar '^base16-(.*)\.sh$' '$1' \
        | string join ' '
end

complete -c base16_theme -s t -l transparent -d "make transparent background"
complete -c base16_theme -xa (pick_themes)
functions -e pick_themes

set -g theme_newline_cursor yes
set -g theme_display_git_master_branch yes
# set -g theme_color_scheme dracula
set -g theme_color_scheme gruvbox
# set -g theme_powerline_fonts no
set -g theme_display_date no
set -g theme_display_cmd_duration no
----------


[使用しているOSのロゴとシステム情報を表示する]
$ sudo apt install neofetch
$ neofetch


[fcitxのインストール]
WindowsでいうIMEにあたるものがLinuxでは「日本語変換エンジン」と「入力インタフェース」に分かれており、エンジンにはGoogle製のmozc(モズク)を、インタフェースにはfcitxを使う。

$ sudo apt -y install fcitx-mozc dbus-x11 x11-xserver-utils
$ sudo sh -c "dbus-uuidgen > /var/lib/dbus/machine-id"

$ leafpad ~/.profile
-----
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
export DefaultIMModule=fcitx
xset -r 49 # 半角全角点滅防止
# 起動時に自動的に起動させる
if [ $SHLVL = 1 ] ; then
  xset -r 49  > /dev/null 2&>1
  (fcitx-autostart > /dev/null 2&>1 &)
fi
-----
* ~./bashrcのuimに関する所はコメントアウトしておく
$ source .profile
またはシェルを再起動する

fcitxの設定
$ fcitx-config-gtk3

[nomacs(画像ビューアー)のインストール]
* nomacsを初めて起動すると言語を選択するウィンドウが表示されるので、日本語を選択、「OK」ボタンをクリックした後、nomacsを再起動するとUIが日本語化されます。
$ sudo add-apt-repository -y -n ppa:sicklylife/ppa
$ sudo apt update
$ sudo apt install nomacs

***

0 コメント: