Linux Mintインストールした時にまずしたこと

P&Dアドベントカレンダー23日目担当ぽこつんです。

本当は前回からの続きのkotlinでopenCVについて書くつもりだったんですが、このたび自身の知識のなさ故に開発環境として使っていたZorin OSがご臨終なされたのでLinux Mintで入れ直しました。Linux入れるたびに同じようなことを何回も調べているので備忘録かつ誰かのためになればと書いていきます。Zorin気に入ってたんですがやっぱ動作が少し重かったです。やっぱ**Linux人気ナンバーワン**のMintだね！

##環境
- Thinkpad25
 - Windows10
 - Linux Mint 18.3 "Sylvia" - Cinnamon (64-bit)

デュアルブートしてますが、今回の記事の内容に影響はないはず、、、。
 
###1. vimを入れる###
まずエディタ入れないと話にならないので入れる

```shell:
$ sudo apt-get install vim
```

###2. trackpointの動作を速くする###
thinkpad使っているので次はトラックポイントの動きを良くする。
bootするたびに読み込まれるように`/etc/rc.local`に書いていく。

```shell:/etc/rc.local
echo -n 255 > /sys/devices/platform/i8042/serio1/serio2/speed
echo -n 190 > /sys/devices/platform/i8042/serio1/serio2/sensitivity
exit 0
``` 
そのあと、

```shell:
$ sudo /etc/rc.local
```

これでOK


*追記*
`/etc/rc.local`に書いていくのはもう古いらしいです。`/etc/init.d/`以下に書いてサービスで管理しましょう。

今回の場合は`/etc/init.d/track-point`というファイルの中に

```shell:/etc/init.d/track-point
#! /bin/bash

start() {
   echo -n 255 > /sys/devices/platform/i8042/serio1/serio2/speed
   echo -n 255 > /sys/devices/platform/i8042/serio1/serio2/sensitivity
}

stop() {
    echo "call when this service stopped"
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        # code to check status of app comes here
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0
```

と書いていく。
そのあと以下のコマンドを叩く

```shell:
$ sudo chmod +x /etc/init.d/track-point
$ sudo /etc/init.d/track-point start
```

これでOK

###3. Caps-LockとCtrlを置き換え###
Caps-LockとCtrlを置き換える
/etc/default/keyboardにXKBOPTIONS="ctrl:nocaps"を書けばよし。

```shell:/etc/default/keyboard
# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
XKBOPTIONS="ctrl:nocaps"
BACKSPACE="guess"
```
再起動する必要あり。

###4. 端末のプロファイル変更###
文字色: #DBE1F8
背景色: #333E2D
組み込みのスキーム: Tango に設定
(＊ 個人の好みです)

###5.ディレクトリを英語にする###
インストール時に日本語を選択するとHOMEディレクトリ以下のディレクトリが日本語表記になってしまうので英語表記に変える。

```shell
LANG=C xdg-user-dirs-gtk-update
```
これで`update name`を選択

###5. gitをインストール###
sudo apt-get install git

###6. chromeをインストール###
[こちらのサイト](https://www.google.co.jp/chrome/browser/desktop/index.html)からインストール

###7. git cloneして.dotfilesを取ってくる ###
.vimrcや.bashrcなんかを取ってきてリンクを貼っていきましょう。

```shell
ln -s 元ファイル　貼りたい場所
```

###8. Rictyフォントを作成 ###
全角をちゃんと見えるようにしたいです。Rictyフォントを作成する。
こちらのサイトを参考にさせてもらいました。
[Ubuntu 16.04 LTSでRictyフォント作成 » sa-sa-ki.jpのblog](https://www.sa-sa-ki.jp/blog/2016/11/ubuntu-16-04-lts-ricty/)
もしフォントを~/.fontsに入れてもうまくいかなかったら`/usr/share/fonts/Ricty`以下に作ったフォントをおいて

```shell
fc-cache -vf
```
と叩いてください。

###9. f.luxを入れる。###
ブルーライトに弱い目なのでf.luxを入れます。

```shell:
$ sudo add-apt-repository ppa:nathan-renniewaldock/flux
$ sudo apt-get update
$ sudo apt-get install fluxgui
```

これでよし。

###10. thinkpadのスクロールボタンで左クリックできてしまうのを止める ###
`xinput list`と叩いてください。
んで、*↳ TPPS/2 IBM TrackPoint                   	id=15	[slave  pointer  (2)]* こんなふうに表示されているデバイスのIDを覚えといてください。僕の場合は15です。あとは`/etc/profile.d/xinput.sh`というファイルを作成して,そこに以下のように書いてください。

```shell:/etc/profile.d/xinput.sh
xinput set-button-map 15 1 0 3
```

これで再起動するか`source /etc/profile.d/xinput.sh` と叩けばOK。

###11. タッチパネルがついていたので無効化する
10 と同様に`xinput list`と叩きタッチパネルに割り振られているIDを覚えとく。
僕の場合は、↳ Raydium Corporation Raydium Touch System	id=10	[slave  pointer  (2)]
と表示されたので10です。

以下を追記。

```shell:/etc/profile.d/touch_panel.sh
xinput disable 10
```
これでタッチパネルが無効化できる

###12. Android Studioなどを入れた時にホーム画面で表示されない
Android StudioやIDEA, PycharmなどIntellijのIDEに多いのですがtarファイルなどを展開してインストールするタイプのアプリケーションではubuntuのデスクトップアプリケーションとして認識されずタスクバーに表示できません。。実行したい時にわざわざshellを実行しなくてはいけません。aliasするというのもひとつの手ですがタスクバー上に表示させてワンクリックで起動させたいです。

####方法
`~/.local/share/applications/`以下に拡張子desktopのファイルを書くことでアプリケーションとして登録できます。

android studioの場合はこんな感じです。

```shell:~/.local/share/applications/android_studio.desktop
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=Android Studio
Icon=/home/pokotsun/.bin/android-studio/bin/studio.png
Path=/home/pokotsun/.bin/android-studio/bin
Exec=/home/pokotsun/.bin/android-studio/bin/studio.sh
Categories=Development;IDE;
Terminal=false
StartupNotify=true
StartupWMClass=jetbrains-android-studio
```
英語記事はありましたが日本語記事がなかったので以下簡単に各パラメータの説明を和訳したいと思います。僕の英語力では大雑把にしか内容を掴めておらず、また途中で疲れたので最低限必要そうなところしか書いてませんがあしからず。

| オプション名 | 値の型 | 必ず必要か | 簡単な説明 | 
|:-:|:-:|:-:|:-:|:-:|:-:|
| Type  | string | yes| Application, Link, Directoryの3種類があります。今回はアプリケーションとして登録したかったのでApplicationにしてます。 |
| Version | string | no | デスクトップエントリーのバージョンを示します。現在は特に必要ないみたいです。 |
| Name  | localestring | yes | アプリケーションの名前です。 |
| GenericName | localestring | no | アプリケーションの一般的な名前です | 
|  NoDisplay | boolean | no | アプリケーションは存在するけどメニューとして表示するかしないかを決めます。 |
| Comment | localestring | no | 簡単なコメントをここにかけます。 |
| Icon | localestring | no | 絶対パスを指定することでアプリケーションのアイコンをここで表示できます。 |
| Exec | string | no | アイコンが押された時に実行するスクリプトを絶対パスで指定します。 |
| Path | string | no | TypeでApplicationを選んだ場合プログラムが実際に実行されるスクリプトが含まれたディレクトリの絶対パスを指定します。それ以外の場合は必要ないです。 |
| Terminal | boolean | no | ターミナルで実行するかどうかを決めます。 |
| Categories | string | no | メニュー上でカテゴライズするためのカテゴリーを指定できます。複数指定することができます。ex) Development;IDE; |

###13. pyenv virtualenvでpython使えるようにする###
pyenvとvirtualenvで入れる。
mkdirで作成されるディレクトリの権限がおかしくエラーが出たのでまずmkdir, touchで作成されるディレクトリ、ファイルのデフォルトの権限を変える。

```shell:
echo 'umask 0002' >> ~/.bashrc
source ~/.bashrc
```
pyenvとvirtualenvを入れていく

```shell:
$git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$sudo mkdir -p ~/.pyenv/versions ~/.pyenv/shims
$git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\n 
 eval "$(pyenv virtualenv-init -)"\nfi' >> ~/.bashrc
$exec "$SHELL"
```
これでよし

```shell:
$ pyenv --version
pyenv 1.2.0-4-g69d47d5

$ pyenv virtualenv --version
pyenv-virtualenv 1.1.1 (virtualenv unknown)
```

こんな感じに表示されたらOK

###14. goenvでgo環境を作る
go言語を使えるようにする

```shell:
$ git clone https://github.com/syndbg/goenv.git ~/.goenv
$ echo 'export GOENV_ROOT="$HOME/.goenv"\nexport GOPATH="$HOME/.go"\nexport GOBIN="$GOPATH/bin"\nexport PATH="$GOBIN:$PATH"\nexport PATH="$GOENV_ROOT/bin:$PATH"\neval "$(goenv init -)"\n' >> ~/.bashrc
$ exec "$SHELL"
```
これでよし

```shell:
$ goenv version
1.9.0 (set by /home/pokotsun/.goenv/version)
```

こんな感じに表示されたらOK

###15. apache2を入れる

```shell:
$ sudo apt-get update
$ sudo apt-get install apache2
```
これでOK

###16. phpを入れる

```shell:
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update
$ sudo apt-get install php
```

以上のコマンドを叩いたら、

```php5:/var/www/html/phpinfo.php
<?php
phpinfo();
```
このあと以下のコマンドを叩いて

```shell:
$ sudo systemctl restart apache2
```

これで`http://localhost/phpinfo.php`をブラウザで確認して

て感じに表示されたらOK

###17. dockerを入れる
[こちらのサイト](https://qiita.com/koara-local/items/ee887bab8c7186d00a88)を参考にする。



##最後に
急遽開発環境がリセットされるという非常事態に陥ったのでこちらを書かせてもらいました。

明日、明後日のクリスマスイブ、クリスマスは@meta713, @seaaaaaaaaaの二人です。いよいよ大詰めですが頑張ってください！

##参考
[Ubuntu 16.04 CapsLockをControlに置換する方法](https://qiita.com/hirooooooaki/items/f404e76c6f171769412a)
[How to Install f.lux in Ubuntu 16.04, Ubuntu 15.10](http://ubuntuhandbook.org/index.php/2016/03/install-f-lux-in-ubuntu-16-04/)
[Ubuntuでホームディレクトリの中身を英語にする](https://qiita.com/taiko19xx/items/d1a001bfc25245b91354)
[Desktop Entry Specification](https://developer.gnome.org/desktop-entry-spec/)
[Simple Python Version Management: pyenv](https://github.com/pyenv/pyenv)
[pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv)
[pyenv-virtualenvでディレクトリ単位のpython環境構築](https://qiita.com/niwak2/items/5490607be32202ce1314)
[[Docker] ubuntu 14.04/16.04にDockerをインストール](https://qiita.com/koara-local/items/ee887bab8c7186d00a88)