elementary OS 5.0 Juno をインストールして最初にやったこと & 入れたツール16個

つい先日、2018年10月に[elementary OS](https://elementary.io/ja/) 5.0 Juno (Ubuntu 18.04 LTSベース) が[リリースされた](https://medium.com/elementaryos/elementary-os-5-juno-is-here-471dfdedc7b3)ので評価用にサブマシンに入れて一通りセットアップした。
んでその時のメモ

![Screenshot from 2018-11-17 17.21.56.png](https://qiita-image-store.s3.amazonaws.com/0/47983/8a1b6643-1442-a46d-a0f4-9261fb7d9cb5.png)

## 環境

- elementary OS 5.0 Juno

## やったこと

### インストール

elementary OS 5.0 Junoは以前の0.4 Lokiから直接Upgradeすることは出来ないので基本的にはクリーンインストールになる。
マシンに0.4 Lokiが入っている場合は、5.0 JunoのLive USBでインストールする際に「0.4と共存させるか？」ということを聞かれるので「はい」で進めると5.0用の別パーティションが作成されそちらにインストールされる

#### ハマったこと

0.4 Lokiをインストールしていたので別パーティションで共存させてみたが再起動してもGrubのメニューに5.0 Junoが現れなかったので[Grub Customizer](https://launchpad.net/~danielrichter2007/+archive/ubuntu/grub-customizer)でGUIで確認したところエントリ自体は存在した。再現出来るか分からないけど一度Grub Customizerでコンフィグを保存して再起動したらGrubのメニューに5.0 Junoが出てくるようになった

### アップデート

とりあえずデフォルトのパッケージを最新に

```bash
$ sudo apt-get update
$ sudo apt-get dist-upgrade
```

### 日本語設定

デフォルトでMozcとibus-mozcが設定されているので `Ctrl+space` で入力方法を切り替えてMozcの時に「ひらがな」を入力方法として指定すれば日本語を入力することが出来るようになる

![Screenshot from 2018-11-17 17.39.55.png](https://qiita-image-store.s3.amazonaws.com/0/47983/f8f7f5a9-4924-2225-b698-ba9da0998acb.png)

このホットキーに慣れてるならこれで問題ないが個人的にはAltのワンショットでIMEのToggleをしたいのだが、ibus-mozcだとキーをタップではなくholdした状態でもIMEが切り替わってしまったためうまく使えなかった。`fcitx-mozc`ならもう少し細かい挙動まで設定出来るのでAltのみでToggleすることも出来た。が結局普段使っているLet's Splitキーボードのqmk firmwareでMod-Tap機能を使ってholdしてる時はAlt、タップした時は変換用のキー(KC_LANG1)を割り当てることでOS agnosticな感じにした。



## 入れたツール

### [Google Chrome](https://www.google.com/chrome/)

何をするにもとりあえずこれという感じではあるが
[公式](https://www.google.com/chrome/)から落とした.debファイルを直接dpkgで入れようとしても依存が足りないのかエラーになったので`gdebi`で自動的に依存関係を解決してもらってインストールする

```bash
sudo apt-get install gdebi
sudo gdebi google-chrome-stable_current_amd64.deb 
```

4Kディスプレイのため、HiDPI 設定を入れる。`--force-device-scale-factor`で倍率を指定。また `--force-dark-mode` でダークモードにする。

```bash
$ sudo vim /usr/share/applications/google-chrome.desktop
~~中略~~
Exec=/usr/bin/google-chrome-stable --force-device-scale-factor=1.5 --force-dark-mode
~~中略~~
Exec=/usr/bin/google-chrome-stable --incognito --force-device-scale-factor=1.5 --force-dark-mode
```

```bash
$ sudo cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications/
```

### Git

他のツールを入れるにもかなりの確率で必要になるのでこれも最初に入れる

```bash
$ sudo apt-get install git
```

### [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)

もはや脳死でoh-my-zshを入れている気がするけどシェル環境をさっと整備したい時は楽なので

```bash
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
```

プラグインは以下のプラグインを使っている

```bash
plugins=(
  git 
  ubuntu 
  z 
  per-directory-history 
  sudo 
  aws 
  docker 
  ubuntu 
  pantheon_terminal_notify 
  zsh_reload 
  mix 
  extract 
  gitignore 
  colorize 
  common-aliases 
  elixir 
  zsh-autosuggestions
  zsh-syntax-highlighting
  dotenv
  virtualenv 
  virtualenvwrapper
)
```

好きなプラグインは

`per-directory-history`: ディレクトリごとのコマンド履歴を保持してくれる。プロジェクトごとによく使うコマンドは大抵決まっているのでグローバルの履歴を追うよりディレクトリ単位の履歴の方が便利
[`zsh-autosuggestions`](https://github.com/zsh-users/zsh-autosuggestions): fishのように半透明で以前使ったコマンドをサジェストしてくれる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/47983/3910612b-7af9-06f7-51e3-b10ae6dbd689.png)
[`zsh-syntax-highlighting`](https://github.com/zsh-users/zsh-syntax-highlighting): fishのようにコマンドを打ってる際にハイライトしてくれる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/47983/86e9e0cb-d780-a018-a526-ad66b5310dc8.png)
`git`, `ubuntu`: 長いコマンドの短縮エイリアスを定義してくれる (例: `sudo apt-get install` -> `agi` など)
`extract`: `extract foo.zip`, `extract bar.tar.gz` のようにすると圧縮ファイルをいい感じに解凍してくれるwrapper。たまにフォルダが存在しないtarボールを展開すると作業用ディレクトリがひどいことになるが`extract`はちゃんとフォルダを作成した上で展開してくれる。zipコマンドとかtarコマンドの引数忘れがちなので

### [gnome-terminal](https://github.com/GNOME/gnome-terminal)

elementary OS デフォルトのターミナルはpantheon-terminalだけどgnome-terminalの方が早いらしいとのことでgnome-terminalにしてみた

まずpantheon-terminalをアンインストールする。後で必要になったら再インストール出来るのでアンインストール自体は問題ない

```
sudo apt-get remove pantheon-terminal
```

```
sudo apt-get install gnome-terminal
```

applicationsのエントリでOnlyShowInの行をコメントアウトしてメニューから検索出来るようにする

```bash
$ vim /usr/share/applications/gnome-terminal.desktop

#OnlyShowIn=GNOME;Unity;
```

### [Visual Studio Code](https://code.visualstudio.com/)

最近はもっぱらVSCodeのエコシステムが充実しているのでプログラミングはVSCodeでやっている

```bash
$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
$ sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
$ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
$ sudo apt-get update
$ sudo apt-get install code
```

### [Docker](https://docs.docker.com/install/)

もはや開発で避けて通れないが、Ubuntuデスクトップを使う場合でも環境を汚さずにパッケージのビルドやら出来て便利

```bash
$ sudo apt-get install apt-transport-https ca-certificates software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
$ sudo apt-get install docker-ce
$ sudo systemctl start docker

# docker-compose
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
```

### [Mozc UT2](https://sicklylife.jp/ubuntu/1804/mozc_ut2.html) (日本語辞書強化)

Mozcはよく出来ているもののGoogle本家の日本語辞書のように常にアップデートされている訳ではないので少し変換が弱い

例えば「インターネット」を「Internet」と変換することは本家Google日本語入力では出来るがMozcでは出来ない。また流行り物系の単語にも弱い（「ユーチューバー」→「Youtuber」と変換出来なかったり）

そこでUTUMI Hirosiさんが辞書ファイルを強化したパッチ版のMozcを[公開している](https://sicklylife.jp/ubuntu/1804/mozc_ut2.html)のでそれを使うことにする

mozc-ut2用のdockerイメージを[作った](https://hub.docker.com/r/shufo/mozc-ut2/)のでpullして中の.debファイルをコピーする

```bash
$ sudo docker run -d --name mozc-ut2 shufo/mozc-ut2:bionic
$ sudo docker cp mozc-ut2:/app/ ./deb/
$ sudo docker rm mozc-ut2
$ sudo dpkg -i ./mozc-data_*.deb ./mozc-server_*.deb ./mozc-utils-gui_*.deb ./ibus-mozc_*.deb
```

以下は**手動**でビルドする場合

ダウンロードして解凍

```bash
$ wget https://ja.osdn.net/frs/chamber_redir.php?m=iij&f=%2Fusers%2F22%2F22942%2Fmozc-2.23.2815.102%2Bdfsg%7Eut2-20171008d%2B20181028.tar.xz
$ tar xavf ./mozc-* && cd mozc-*/
```

ビルドに必要な依存パッケージが多くシステムを汚しかねないのでDocker上でビルドする
Docker上ならビルドが終わればコンテナをkillするだけで環境を破棄出来るのでクリーンに保たれてよい

```bash
# ホストにマウントしビルド結果を共有出来るようにする
$ docker run -it -v $(pwd):/app -w /app ubuntu:bionic
# 依存インストール
$ apt update && apt upgrade -y && apt install -y devscripts debhelper libibus-1.0-dev pkg-config libxcb-xfixes0-dev libgtk2.0-dev python-dev gyp protobuf-compiler libprotobuf-dev qtbase5-dev libqwt-qt5-dev libgwengui-qt5-dev libuim-dev libzinnia-dev fcitx-libs-dev gettext desktop-file-utils ninja-build
# ビルド
$ ./build_mozc_plus_utdict
```

ビルドが終わると`.deb`パッケージが出力されるのでインストールする

```bash
$ sudo dpkg -i ./mozc-data_*.deb ./mozc-server_*.deb ./mozc-utils-gui_*.deb ./ibus-mozc_*.deb
```

マシンを再起動して「インターネット」→「Internet」で変換出来ることを確認する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/47983/214cadf2-5218-cb87-4147-c38c2c42191f.png)


### [Synergy](https://symless.com/synergy)

[Logicool Flow](https://www.logicool.co.jp/ja-jp/product/options/page/flow-multi-device-control)のようにPC間をまたいでマウス、キーボードを共有出来るツール
Logicool Flowと違うのはLogicool製品じゃなくても使えるところとLinuxでも使えるところ

![ワークスペース 2_002.png](https://qiita-image-store.s3.amazonaws.com/0/47983/6779b8f5-f072-3e53-63ce-b0dd5f4b195a.png)


これもセットアップする際には慣れたPCから慣れたキーボードとマウスで作業を行えるので最初に入れている

ちなみに有料だが買い切りなので一度買えばずっと使えるのでおすすめ


### [Clipped](https://github.com/davidmhewitt/clipped)

elementary OS専用だがクリップボードマネージャ
シンプルでインクリメンタルサーチ、履歴の保持と基本的な機能が揃っていたのでこれにした


![スクリーンショット 2018-11-18 17.56.37.png](https://qiita-image-store.s3.amazonaws.com/0/47983/65d32a46-5dff-ea22-eefa-60b27daeebee.png)

### [Wine](https://www.winehq.org/)

たまにWindowsバイナリを動かしたい時があるので

```bash
$ sudo dpkg --add-architecture i386 
$ wget -nc https://dl.winehq.org/wine-builds/Release.key  
$ sudo apt-key add Release.key
$ sudo apt-add-repository -y -n https://dl.winehq.org/wine-builds/ubuntu/
$ rm Release.key
$ sudo apt-get update && sudo apt-get install winehq-stable winetricks
```

### [Albert](https://albertlauncher.github.io/)

Macの[Alfred](https://www.alfredapp.com/)のようなランチャ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/47983/a836c477-a120-1198-cc7e-26fb8f127702.png)


### [jumpapp](https://github.com/mkropat/jumpapp)

`jumpapp chrome`といったコマンドでアプリを切り替えてくれるコマンドラインツール
現在開いているウィンドウの名前を参照し最初にマッチしたものをショートカットを押すごとに循環して切り替えてくれる
xbindkeysと併用し特定のキーを押した時特定のアプリに切り替えるというようなことが出来る

```bash
$ cat ~/.xbindkeysrc
# Chromeにジャンプ
"jumpapp chrome"
  control + alt + c

"jumpapp pantheon-terminal"
  control + alt + t

"jumpapp slack"
  control + alt + s

"jumpapp code"
  control + alt + v
```

コンテナ内でビルドしたパッケージをホスト側でインストールする

```bash
$ docker run -it $(pwd):/app -w /app ubuntu:bionic
$ apt-get update && apt-get install build-essential debhelper pandoc shunit2 git -y
$ git clone https://github.com/mkropat/jumpapp.git
$ cd jumpapp
$ make deb
$ exit
$ cd jumpapp
$ sudo apt-get install wmctrl
$ sudo dpkg -i jumpapp*all.deb
```

### [Shutter](http://shutter-project.org/)

スクリーンショット作成ソフト

![image.png](https://qiita-image-store.s3.amazonaws.com/0/47983/003947c4-d784-767c-2466-1ae3b972374b.png)

デフォルトだと編集機能が無効になっているが有効化するには以下の3つのパッケージをダウンロードしてインストールする

https://launchpad.net/ubuntu/+archive/primary/+files/libgoo-canvas-perl_0.06-2ubuntu3_amd64.deb
https://launchpad.net/ubuntu/+archive/primary/+files/libgoocanvas3_1.0.0-1_amd64.deb
https://launchpad.net/ubuntu/+archive/primary/+files/libgoocanvas-common_1.0.0-1_all.deb

```bash
sudo gdebi libgoo-canvas-perl_0.06-2ubuntu3_amd64.deb
sudo gdebi libgoocanvas3_1.0.0-1_amd64.deb
sudo gdebi libgoocanvas-common_1.0.0-1_all.deb
```

Shutterのプロセスをkillして再起動すると編集機能が使えるようになっている

### [Peek](https://github.com/phw/peek)

Gifでスクリーンキャストを作成出来る

![スクリーンショット 2018-11-19 04.45.24.png](https://qiita-image-store.s3.amazonaws.com/0/47983/83de1c59-91b6-403c-a4eb-134039d79c2e.png)

以下でインストール

```bash
sudo add-apt-repository ppa:peek-developers/stable
sudo apt update
sudo apt install peek
```

### [Slack](https://slack.com/intl/ja-jp/)

slackも忘れずに

```bash
wget https://downloads.slack-edge.com/linux_releases/slack-desktop-3.3.3-amd64.deb
sudo dpkg -i slack-desktop-3.3.3-amd64.deb
```

### [DBeaver](https://dbeaver.io)

LinuxでGUIでDBを扱うならDBeaverが中々いい
MySQLやPostgreSQL, Refshiftなど多様なDBに対応していて扱いやすい

DBeaverの最新バージョンでelementary OSでメモリリークするバグが起こっていたのだけどelementary OSのシェル(Pantheon)が問題を引き起こしていたみたいなので解決方法を以下に書く

dbeaver.iniでGTKのバージョンを直接指定する行を先頭に足す

```bash
$ sudo vim /usr/share/dbeaver/dbeaver.ini
```

以下の2行を先頭に足す

```
--launcher.GTK_version 
2
```

最終的にこんな感じになる

```ini:dbeaver.ini
--launcher.GTK_version 
2
-startup
plugins/org.eclipse.equinox.launcher_1.5.100.v20180827-1352.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.800.v20180827-1352
-vmargs
-XX:+IgnoreUnrecognizedVMOptions
--add-modules=ALL-SYSTEM
-Xms64m
-Xmx1024m
```

※2019-06-04追記 最新版の6.0.5だとGTK 2が無効にされてしまったためこの方法がうまくいかない。6.0.0にダウングレードすると動く

## まとめ

elementary OS 5.0 Junoをセットアップした.
elementary OSを仕事でも使い始めてから2年ほど経つが相変わらず特に不満等はなくシンプルでとてもいいOSだと思う。
5.0になりOS標準のツール類も色々整備され普通に使う分には特に困らなくなった。

Linuxデスクトップに求めるものを何とするかは人によって好みは変わると思うが、個人的にはデスクトップ環境の過度な属人化はポータビリティが下がるような気がしてあまり好きではないのでどちらかというとMacのような環境に人が最適化するようなOSに近いelementary OSの考え方は合ってるのかなと思う。

若干リリースサイクルが遅いことが心配されたelementary OSだが0.4 Lokiからバージョンの振り方も変わりリリースサイクルの改善への意欲があるように思えるので今後にも期待したい。