毎日もくもく

毎日もくもく

日記,そして備忘録

俺にやる気をくれ!!!!!

俺にやる気をくれ!!!!!

卒業への危機感

最近卒業できるのか危機感を覚えた.
9 月の中旬に卒業研究の中間審査の報告書を出さないといけないのだが,テーマが細かく決まっているわけではないから何も書けない.
まだ 2 ヶ月あるから余裕と思いきや,院試の勉強もしないといけないので,もう本当にやばい.
なぜ今の大学にいて,なぜ今の研究室にいるのか最近分からなくなった.
もう終わりだ……

2017/7/1 の日記

私が通っている大学には卒業アルバムがある.
そして今日は教養課程のクラスの写真撮影があったのだが,寝坊してしまい,参加できなかった.
とても悲しい.
これから早寝早起きを心がけようと思う.

alwsl で遊ぶ

Bash on Ubuntu on Windows で遊ぼうと思ったが,なんかつまらないと思っていたところ,github.com を見つけたので,これで遊ぶことにした.

alwsl とは

名前をちょっと考えたら Arch Linux + Windows Subsystem for Linux (WSL) だと分かる.通常の WSL だと Ubuntu, OpenSUSE, Fedora が使えるが,Arch Linux も使えるようにしようというプロジェクトっぽい.

alwsl のインストー

まずは GitHub - alwsl/alwsl: Install archlinux as the WSL (Windows Subsystem for Linux) host. から alwsl.bat をダウンロードする. Windows PowerShellalwsl.bat を置いた場所まで移動し,次のコマンドを実行する.

> ./alwsl.bat install

するとインストールが始まる.実行してみると分かるが,alwsl.bat の中で最初に Bash on Ubuntu on Windows を落として,それからいろいろ書き換えているっぽい.
インストールが終わると今すぐ Bash やって行くか?と聞かれるので, Yes と入力すると Bash やっていける.

                 ,                       _     _ _                    |  ___ ___ _______ ___
                /#\        __ _ _ __ ___| |__ | (_)_ __  _   ___  __  | |   Y   |   _   |   |
               /###\      / _` | '__/ __| '_ \| | | '_ \| | | \ \/ /  | |.  |   |   1___|.  |
              /#####\    | (_| | | | (__| | | | | | | | | |_| |>  <   | |. / \  |____   |.  |___
             /##,-,##\    \__,_|_|  \___|_| |_|_|_|_| |_|\__,_/_/\_\  | |:      |:  1   |:  1   |
            /##(   )##\                                               | |::.|:. |::.. . |::.. . |
           /#.--   --.#\                                              | '--- ---'-------'-------'
          /`           `\   A simple, elegant gnu/linux distribution. | edition (v0.05) by turbo.

インストール後のいろいろ

pacman の設定

最初は root で入っていることが分かる.最初に一般ユーザを作りたいが,その前に pacman を更新しておく.pacman のミラーリストが書いてあるファイルがある /etc/pacman.d/ を見てみる.mirrorlistmirrorlist.pacnew があり,mirrorlist を見てみると全然ミラーが書いていないので,一応 mirrorlist のバックアップを取り,mirrorlist.pacnew をミラーリストとして使っていく.

# mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
# mv /etc/pacman.d/mirrorlist.pacnew /etc/pacman.d/mirrorlist

次に mirrorlist を編集し,日本のミラーを使うために,該当箇所をアンコメントする.

## Japan
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch

mirrorlist を編集したら次のコマンドを実行し,pacman の全てのパッケージリストを更新する.

# pacman -Syyu

一般ユーザの作成

ここから一般ユーザを作っていくが,その前に root のパスワードを設定しておく.

# passwd

次に一般ユーザを wheel グループで作成する.

# useradd -m -g wheel [username]
# passwd [username]

次に visudo コマンドで /etc/sudoers を編集し,wheel グループで sudo が使えるようにする.

# visudo
# 次をアンコメント
%wheel ALL=(ALL) ALL

必要に応じて他のところもアンコメントする.例えば

# 次をアンコメント
# sudo 時に HOME にある設定ファイルを読み込めるようにする
Defaults env_keep += "HOME"

これで一般ユーザを作成し,かつそのユーザで sudo が使えるようになった.この段階ではまだ root がデフォルトユーザなので,先ほど作成した一般ユーザをデフォルトユーザにする.PowerShell で次のコマンドを実行する

> lxrun /setdefaultuser [username]

PowerShell を再起動し,bash と打ち込むと,先程の一般ユーザでログインしていることが分かる.

HOME ディレクトリを Windows と共有する

ざっとインターネットを見たところ,複数やりかたあるかなという感じ.

シンボリックリンク

以下のコマンドを実行する.このブログ記事を参考にした.hogeWindows のユーザ名,fuga は alwsl の一般ユーザ名である.

$ ln -s /mnt/c/Users/hoge /home/fuga

HOME ディレクトリを変える

/etc/passwd を編集する.このブログ記事を参考にした.

fuga:x:1000:10::/home/fuga:/bin/bash

fuga:x:1000:10::/mnt/c/Users/hoge:/bin/bash

に変える.hoge, fuga については先程と同様である.

デフォルトシェルを zsh にする

とりあえず zsh をインストールする.

$ sudo pacman -S zsh

Linux だと chsh で終わるが,alwsl だと上手くいかなかったので,~/.bashrc に以下を書いて終わりにする.

exec /bin/zsh

これで zsh が起動するはず.

所感

特に上の手順で困ることはなかったので言及しなかったが,実は /etc/pacman.confpacman などが IgnorePkg に設定されていた./etc/pacman.conf.pacnew では特にそんなことなかったので

# mv /etc/pacman.conf /etc/pacman.conf.backup
# mv /etc/pacman.conf.pacnew /etc/pacman.conf

としてから

# pacman -Syyu

とした(あまり pacman のオプションを理解していない……).いろいろ設定ファイルを自分で入れ替えているが,もしかしたら良くないのかもしれない.
まあでも遊べたので良い.多分今後はこれを使わない.普通に Bash on Ubuntu on Windows を使おうと思う.

院試

やっていくぞ.
ちなみに今所属している研究室とは異なるところを第一希望にした.
ただ受験勉強と言うか試験勉強と言うか,そういったものの方法を忘れてしまっているので,厳しそう.
あと研究テーマを大きく変えることになるから,面接も厳しそう.
まあ,ほどほどに頑張っていきますか.

Powerline を導入する(tmux のステータスラインのカスタマイズ)

前の記事: xartaky.hatenablog.jp

zsh, tmux に Powerline を入れたので設定をいじる. といっても zsh の方は文句ないし,tmux の方も色は文句ないので,tmux のステータスラインをいじっていく. インストールガイドのこれを見てやっていく.
設定ファイルをいじる前に,元からある設定ファイル ~/.local/lib/python3.6/site-packages/powerline/config-files/*.config/powerline にコピーする.

$ cp -r ~/.local/lib/python3.6/site-packages/powerline/config-files ~/.config/powerline

今後は ~/.config/powerline 以下のファイルをいじる.
~/.config/powerline を見ると,config.json というファイルがあり,このファイルで,どの設定ファイルを読むか決めている. config.json の中身を見ると,tmux に関するところでは以下のようになっている.

"tmux": {
  "colorscheme": "default",
  "theme": "default"
},

自明に “colorscheme” は色について,"theme" はステータスラインで表示するものについて設定していることが分かる. 今回は色はいじらないので,"theme" だけいじる.
tmux の theme 設定ファイルは ~/.config/powerline/themes/tmux に入っている. 最初は default.json だけ入っていて,上記の config.json では "theme": "default" として default.json を指定している.
ステータスラインをいじっていくので,まずは default.jsonmytheme.json としてコピーして,mytheme.json をいじっていく.

$ cp default.json mytheme.json

特にいじっていない mytheme.json(つまり default.json)は拙者の環境では以下のようになっていた.

{
    "segments": {
        "right": [
            {
                "function": "powerline.segments.common.sys.uptime",
                "priority": 50
            },
            {
                "function": "powerline.segments.common.sys.system_load",
                "priority": 50
            },
            {
                "function": "powerline.segments.common.time.date"
            },
            {
                "function": "powerline.segments.common.time.date",
                "name": "time",
                "args": {
                    "format": "%H:%M",
                    "istime": true
                }
            },
            {
                "function": "powerline.segments.common.net.hostname"
            }
        ]
    }
}

これを見ると

  • powerline.segments.common.sys.uptime
  • powerline.segments.common.sys.system_load
    • Return system load average
  • powerline.segments.common.time.date
    • Return the current date
  • powerline.segments.common.net.hostname
    • Return the current hostname

といった segment が読み込まれていることが分かる. これに通信の状態(powerline.segments.common.net.network_load)やバッテリーの残量(powerline.segments.common.bat.battery)などを加えた. 最終的に mytheme.json は以下のようになった.

{
    "segments": {
        "right": [
            {
                "function": "powerline.segments.common.sys.uptime",
                "priority": 60
            },
            {
                "function":"powerline.segments.common.sys.cpu_load_percent",
                "before": "CPU:",
                "width": 7,
                "align": "c",
                "priority": 50
            },
            {
                "function":"powerline.segments.common.sys.system_load",
                "before": "System:",
                "width": 3,
                "align": "c",
                "priority": 50
            },
            {
                "function":"powerline.segments.common.net.network_load",
                "width": 15,
                "align": "c",
                "priority": 40
            },
            {
                "function": "powerline.segments.common.bat.battery",
                "before": "Battery:",
                "width": 16,
                "align": "c"
            },
            {
                "function": "powerline.segments.common.time.date"
            },
            {
                "function": "powerline.segments.common.time.date",
                "name": "time",
                "args": {
                    "format": "%H:%M",
                    "istime": true
                }
            },
            {
                "function": "powerline.segments.common.env.user"
            },
            {
                "function": "powerline.segments.common.net.hostname"
            }
        ]
    }
}

この変更を反映させるために ~/.config/powerline/config.json の tmux の部分を以下のようにする.

"tmux": {
  "colorscheme": "default",
  "theme": "mytheme"
},

これで tmux のステータスラインがそれっぽくなった. ちなみに tmux のステータスラインの segment として使えるものはこれCommon segmentsTmux segments に載っているものだと思う(多分). また,before などについてはこれを参照.

  • before
    • A string which will be prepended to the segment contents.

  • width
    • Enforces a specific width for this segment. This segment will work as a spacer if the width is set to auto. Several spacers may be used, and the space will be distributed equally among all the spacer segments. Spacers may have contents, either returned by a function or a static string, and the contents can be aligned with the align property.

  • align
    • Aligns the segments contents to the left (l), center © or right ®. Has no sense if width key was not specified or if segment provides its own function for auto width handling and does not care about this option.

  • priority
    • Optional segment priority. Segments with priority None (the default priority, represented by null in json) will always be included, regardless of the width of the prompt/statusline. If the priority is any number, the segment may be removed if the prompt/statusline width is too small for all the segments to be rendered. A lower number means that the segment has a higher priority. Segments are removed according to their priority, with low priority segments (i.e. with a greater priority number) being removed first.

  • args
    • A dict of arguments to be passed to a function segment.