UbuntuをMacOSXみたいにする話

個人的な話になるけど、20年前は Linux ばかり使っていた。当時は「ディストリビューションガー」「ウィンドウマネージャーガー」って言ってたけど、10年ぐらい前からMacを使い始め「全部Appleにお任せでいいんじゃね？」となってしまってからは、Linux や Ubuntu の事はすっかり頭から消えて無くなってしまっていた。

ところが最近、どうしても Linux を使わなきゃいけない事態が発生し、10年ぶりに Ubuntu を入れてみたら「あれ？Ubuntu もやっぱり楽しくない？」と思ってしまった。でもしばらく Mac OSX しか使ってなかったので、違和感はバリバリある。

ということで、UbuntuをMac OSXみたいにするインストール方法・設定をまとめる。

以下 `> command` とあるのは、gnome-terminal（端末）で command というコマンドを入力するという意味。

# Ubuntu のインストール
20.04 (Focal Fossa) LTS (Long Time Support) で日和らず、チャレンジングに毛むくじゃらのカバさん（21.04 : Hirsute Hippo）を使おう。

最も簡単なインストールの方法は DVD から入れる方法だろう。

* [Ubuntu 21.04 日本語 Remix](https://www.ubuntulinux.jp/News/ubuntu2104-ja-remix)のページから `ubuntu-ja-21.04-desktop-amd64.iso` をダウンロード
* 何らかの方法でこの ISO イメージを DVD-R に焼く
* 電源投入直後に `Esc` や `F12` を押して BIOS 設定画面に行く
* DVD ドライブから起動する優先順位を高くする
* DVD から起動して Ubuntu インストーラーを動かす

インストール時の設定は、基本的にデフォルトのままで良いと思うが、私のお薦めは「最小インストール」にして、なるべくインストールするパッケージを少なくすること。
ってか、「最小インストール」しかやったことないので、普通にインストールしたら以下の設定が変わってくるかもしれない。

## 不要なアプリの削除

そして、インストール直後にやる不要なアプリを削除する方法。

* 中身を綺麗にする
    * `> sudo apt update`
    * `> sudo apt upgrade`
    * `> sudo apt autoremove --purge`
* 古いカーネルを削除する
    * `> dpkg　--get-selections | grep linux-`
    * 最新の（一番値が大きい）もの以外は不要なので削除
        * 例）`5.11.0-16` が古くて要らないとする
        * `> sudo apt autoremove --purge linux-headers-5.11.0-16`
        * `> sudo apt autoremove --purge linux-modules-5.11.0-16-generic`
* 使わないアプリを削除する
    * `> sudo apt autoremove --purge gedit`

インストール直後の見た目はこんな感じ。

![ubuntu_default.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84885/2365945c-d424-2945-d65d-d1c738ac6574.png)

# 外観を Mac OSX に寄せる
Mac OSX に寄せるだけじゃなくて、個人的趣味でやっていることもあるので、やるやらはお任せ。

## 細かな設定

* Homeの下の「ドキュメント」とか「ピクチャ」のフォルダ名を英語にする
    * `> LANG=C xdg-user-dirs-update --force`
    * `> LANG=C xdg-user-dits-gtk-update --force`
    * 上記を行った後、Home 下の日本語のディレクトリを全部消す
    * 再起動すると「元に戻すか」と聞かれるが、「今後２度と聞くな」にチェックして、「そのままにする」を選択
* デスクトップに余計なものを表示させない
    * デスクトップを右クリックして「設定」
        * デスクトップにホームフォルダを表示する: OFF
        * デスクトップにごみ箱を表示する: OFF
* デスクトップのアイコンを Mac OSX みたいに右上から表示させる
    * デスクトップを右クリックして「設定」
        * New icons alignment: 右上
* gnome-shell（画面上のメニューバー等）の設定
    * `> sudo apt install chrome-gnome-shell`
    * firefox を起動
    * メニューから 設定 > 左下の「拡張機能とテーマ」をクリック > 「アドオンを探す」で `GNOME Shell integration` を探す > インストール
    * 拡張機能の GNOME アイコン（足跡）をクリックして、extensions.gnome.org に移動
    * 以下の extension を入れる
        * `User Themes`
        * `Blur my Shell`
        * `Dash to Dock`
        * インストールは、各々の拡張機能のページを開いて、右上の OFF を ON にすると自動的に行われる
    * インストール済み拡張機能をクリックして、`Dash to Dock` の設定
        * 位置とサイズ > 表示位置を「下」
        * 後はランチャーとか外観とか透明度とか、お好みで設定
* gnome-terminal（端末）の設定
    * タイトルバーの検索・設定アイコンを削除してタイトルバーの高さを普通にする
        * `> gsettings set org.gnome.Terminal.Legacy.Settings headerbar false`

## テーマ・アイコンのインストールと設定

* 以下で使うツールのインストール
    * `> sudo apt install git gnome-tweak-tool`
* Mac OSX (Big Sur) 風テーマの作成
    * 以下の GitHub repository を clone
        * [vinceliuice/WhiteSur-gtk-theme: MacOS Big Sur like theme for Gnome desktops](https://github.com/vinceliuice/WhiteSur-gtk-theme)
    * clone したディレクトリに行き、以下のインストールコマンドを叩く
        * `> ./install.sh --opacity solid --alt normal --theme blue --icon ubuntu --nautilus-style mojave --panel-size smaller`
        * `> sudo ./tweaks.sh --gdm default --opacity solid --color dark --theme blue --icon ubuntu`
        * `> ./tweaks.sh --firefox`
        * `> ./tweaks.sh --dash-to-dock --color dark`
        * 各オプションの意味は README を参照
* Mac OSX (Big Sur) 風アイコンの作成
    * 以下の GitHub repository を clone
        * [vinceliuice/WhiteSur-icon-theme: MacOS Big Sur style icon theme for linux desktops](https://github.com/vinceliuice/WhiteSur-icon-theme)
    * clone したディレクトリに行き、以下のインストールコマンドを叩く
        * `> ./install.sh --theme default --bold`
        * 各オプションの意味は README を参照
* Mac OSX (Big Sur) 風のカーソルアイコンの入手
    * [Releases · ful1e5/apple_cursor](https://github.com/ful1e5/apple_cursor/releases) から最新バージョンの `macOSBigSur.tar.gz`（もしくは `macOSBigSur-White.tar.gz` もしくは両方）をダウンロード
    * ダウンロードしたものを解凍する
    * `> mkdir ~/.icons`
    * 解凍したフォルダを上記のディレクトリに入れる
    * 以下の GitHub repository を clone して make しても良いんだけど、yarn とか必要だから、とりあえず簡単な方法を紹介する
        * [ful1e5/apple_cursor: 🍎 macOS Cursor Theme](https://github.com/ful1e5/apple_cursor)
* Mac OS の壁紙
    * [macOS Wallpapers](https://photos.google.com/share/AF1QipNNQyeVrqxBdNmBkq9ILswizuj-RYJFNt5GlxJZ90Y6hx0okrVSLKSnmFFbX7j5Mg?key=RV8tSXVJVGdfS1RIQUI0Q3RZZVhlTmw0WmhFZ2V3) 等から好きなものをダウンロード
        * ここに置いてあるものは解像度が低い
        * 他にも探せば色々ある
    * Home の Pictures 下に置く
    * デスクトップを右クリック > 背景を変更する > 画像を追加
    * 好きな画像を追加して設定
* gnome-tweaks（Tweaks）を起動して設定
    * ウィンドウ
        * ウィンドウフォーカス > ホバーでフォーカスを当てる：ON
            * ↑ これ、Mac OSX でも死ぬほど欲しい！
    * ウィンドウタイトルバー
        * タイトルバーボタン > 位置：左
    * 外観
        * アプリケーション：`WhiteSur-dark-solid`
        * 外観：`MacOSBigSur`
        * アイコン：`WhiteSur-dark`
        * GNOME Shell：`WhiteSur-dark-solid`

これで見た目はかなり Mac OSX に近づいたので、あとは趣味的な設定だったり、使いやすくする設定をする。

# ランチャーのインストールと設定
Linux のコマンド型ランチャーと言えば [Albert](https://albertlauncher.github.io/)、パネル型ランチャと言えば [Plank](https://launchpad.net/~ricotz/+archive/ubuntu/docky) なのだが、何故かどちらも上手く動かなかった。ウィンドウシステムの Wayland と相性が悪いのかも。

パネル型ランチャとしては `Dash to Dock` で Dash を設定してしまったので、後はコマンド型ランチャーを入れる。どうやら [Ulauncher](https://ulauncher.io/) が良いみたい。

* Ulauncher のインストール
    * `> sudo apt install wmctrl`
    * `> sudo add-apt-repository ppa:agornostal/ulauncher`
    * `> sudo apt update`
    * `> sudo apt install ulauncher`
* Ulauncher の設定
    * Ulauncher を起動し、メニューバーに出てくる Ulauncher のアイコンをクリックして Preferences を選択
        * Hotkey を `Ctrl+Super+Space` に
            * あなたが Spotlight を起動しているキーボードショートカットに！
        * Color Theme を `Elementary Dark` に
            * あなたの趣味で
        * Launch at Login にチェック
* gnome-control-center（設定）を起動して設定
    * キーボードショートカット
        * 一番下の「＋」をクリックして、カスタムショートカットを追加する
        * 名前: `ulauncher-toggle`
        * コマンド: `/usr/bin/ulauncher-toggle`
        * ショートカット: `Ctrl+Super+Space`
            * あなたが Spotlight を起動しているキーボードショートカットに！
* 同じ設定を２箇所でしているけど、両方やらないと上手く動かない
* おすすめ Extension
    * System Management
        * shutdown とか出来るようになる
        * [GitHub - leinardi/ulauncher-systemctl](https://github.com/leinardi/ulauncher-systemctl)
* 設定が終わったら、一旦 Ulauncher を終了してから、再び起動した方が良い

# キーボードショートカットの設定
私は Mac 用のキーボードを使っているので `Super` を多用しているけど、Windows 用のキーボードを使っている人は `Super` を `Alt` とか適当に置き換えて。
あと英語キーボードなんで、`#`, `$`, `%` はズレてるかも。（要するに `3`, `4`, `5`）
私が趣味でやっていることも含まれているので、やるやらはお任せ。
「Mac OSX では XXX に相当」という項目は、システム環境設定 > キーボード > ショートカットの画面を出した上での設定を意味している。

* gnome-control-center（設定）を起動して設定
    * キーボードショートカット
        * フルスクリーンモードを切り替える：`Ctrl+Super+F`
        * 画面をロック：`Ctrl+Super+Q`
        * アプリケーションを切り替える：`Super+Tab`
            * これらは Mac OSX では OS に組み込まれていて、変更もできない
        * ひとつのアプリケーション内のウィンドウを切り替える：`Super+｀`
            * 全角の`｀`で表示してあるけど、半角で
            * Mac OSX では キーボード > 次のウィンドウを捜査対象にする に相当
        * アクティビティ画面を表示する：`Ctrl+Up`
            * Mac OSX では Mission Control > Mission Control に相当
            * ２種類設定できるので、ひとつは無効にして良い
        * すべてのアプリケーションを表示：`Ctrl+Down`
            * これは私の趣味
            * Mac OSX では LaunchPad > LaunchPadを表示 に相当
        * すべての通常のウィンドウを隠す：`Ctrl+Super+X`
            * これも私の趣味
            * Mac OSX では Mission Control > デスクトップを表示 に相当
        * 次の入力ソースへ切り替える：`Ctrl+o`
            * Wnn, Egg とか使ってた古い人間なんで、`Ctrl+o` しか受け付けない
            * Mac OSX では 入力ソース > 前の入力ソース に相当
        * スクリーンショットを Pictures フォルダーに保存する：`Shift+Super+#`
        * スクリーンショットをクリップボードにコピーする：`Shift+Ctrl+Super+#`
        * ウィンドウのスクリーンショットを Pictures フォルダーに保存する：`Shift+Super+$`
        * ウィンドウのスクリーンショットをクリップボードにコピーする：`Shift+Ctrl+Super+#`
        * 選択領域のスクリーンショットを Pictures フォルダーに保存する：`Shift+Super+%`
        * 選択領域のスクリーンショットをクリップボードにコピーする：`Shift+Ctrl+Super+%`
            * Mac OSX では スクリーンショット の各項目に相当
        * `Super+何か１文字` は、他で使ったり間違える可能性が高いので、無効にする
            * ウィンドウを非表示にする
            * アクティブな通知にフォーカスを当てる
            * 通知リストを表示する
* gnome-terminal（端末）を起動して設定
    * ウィンドウを右クリックして出てくるメニューから設定を選択
    * ショートカット
        * 新しいタブを開く：`Super+T`
        * 新しいウィンドウを開く：`Super+N`
        * コピー：`Super+C`
        * 貼り付け：`Super+V`
* gnome-tweaks（Tweaks）を起動して設定
    * キーボードとマウス
        * Emacs入力：`ON`
            * 色んなアプリのテキスト入力が Emacs 的なキーバインドで動くようになる
        * アクテビティ画面のショートカット：`右 Super`
            * 要するに無効にしたいだけ

# 日本語入力環境の設定
日本語入力としては既に iBus+Mozc が入っている。しかし、Mozc の入力モード切り替えはキーボードショートカットで上手く操作できないので、起動時から ibus-mozc がデフォルトでひらがなモードになるようにソースを書き換え、入力ソースの切り替えで IME の切り替えを実現する。

このためには、iBus+Mozc のソースコードを持ってきて、ソースコードを（１行だけ）修正した後に、コンパイルしてインストールしなければならない。

* 適当なディレクトリを作って、そこに移動
* ibus-mozc のソースを取ってこられるように apt の設定を変更
    * `> sudo vi /etc/apt/sources.list`
        * `deb-src https://jp.archive.ubuntu.com/ubuntu/ hirsute main restricted` のコメントを外す
* ibus-mozc がコンパイル出来るよう整える
    * `> sudo apt update`
    * `> sudo apt upgrade`
    * `> sudo apt build-dep ibus-mozc`
* ソースコードを持ってきて修正
    * `> apt source ibus-mozc`
    * `> cd mozc-XXXXX`
    * `> vi $(find . -name property_handler.cc)`
        * （修正前） `const bool kActivateOnLaunch = false;`
        * （修正後） `const bool kActivateOnLaunch = true;`
            * ここのソースを見ると、iBus が 1.5 になったら修正しなくて良くなるかも
* コンパイルしてインストール
    * `> sudo apt install fakeroot`
    * `> dpkg-buildpackage -us -uc -b`
    * `> cd ..`
    * `> sudo dpkg -i mozc*.deb ibus-mozc*.deb`

後は Mozc の設定をするだけ。

* `mozc_tool`（Mozc の設定）を立ち上げて設定
    * コマンドで立ち上げたい場合は `> /usr/lib/mozc/mozc_tool --mode=config_dialog`
    * 「一般」で、 キー設定の選択を「ことえり」にする
* 念の為、再起動する

# シェル・エディタのインストール・設定
シェルは ZSH。エディタは VIM。異論は認めない。

## ZSH・VIM のインストール
* ZSH のインストール
    * `> sudo apt install zsh`
* 通常使うシェルを ZSH にする
    * `> chsh -s $(which zsh)`
    * 再ログイン後に有効になる
* VIM のインストール
    * `> sudo apt install vim-gtk3`
        * `vim-gtk3` じゃないと、Ubuntu との clipboard 連携が上手くいかない
* エディタ関連が全部 `/usr/bin/vim.gtk3` に設定されたか確認
    *  `> sudo update-alternatives --get-selections`
        * 万が一、変更したい場合
        * `> sudo update-alternatives --config [項目]`
* 今更ながら、ダウンロードするコマンドをちゃんとインストールする
    * `> sudo apt install wget curl`
* 高度なファイル名検索、ファイル内容検索ツールのインストール
    * `> sudo apt install fzf silversearcher-ag`
* VIM のプラグインマネージャーのインストール
    * `> curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim`

VIM の設定ファイルに使うプラグインを書いておけば、VIM を起動して `:PlugInstall` とコマンドを打つと、ゾロゾロとインストールしてくれる。

## ZSH・VIM の設定
ZSH の設定は `~/.zshrc`、VIM の設定は `~/.vim/` 以下のファイルでやるのだが、これについて解説しだすと本当に切りがない。

なので以下の repository を用意した。

https://github.com/tetutaro/dotfiles

このレポジトリの `zsh/install.sh` と `vim/install.sh` を叩くと全部設定するのだが、tmux, powerline と組み合わさって非常に複雑な構成になってしまった。

![](https://raw.githubusercontent.com/tetutaro/dotfiles/main/configfiles.png)

こんなのやってらんないという方は、設定ファイルの中身だけ参照することをお薦めする。

## シェル・VIM の色設定
これについても、凝り出すと無限の時間がかかる。

そこで以下を作った。簡単に設定できるし、切り替えも簡単。一般に公開されているカラースキーマを入れてターミナル, VIM, fzf 全部に一括適用、なんてことも出来る。なんなら自分でカラースキーマを自作することも簡単。だがこれも tmux, powerline と組み合わさっちゃってる。あくまでご参考まで。

https://github.com/tetutaro/dotfiles/tree/main/color_scheme

# フォントの作成・設定
## フォントの作成
[やっぱり Ricty が好き - Qiita](https://qiita.com/tetutaro/items/f895a2ecb1360206aaba) に長々と説明した。そこにも書いたように、以下の場所に一発で全部生成するスクリプトを置いた。

https://github.com/tetutaro/dotfiles/tree/main/fonts

なので [dotfiles](https://github.com/tetutaro/dotfiles) を clone すれば、`fonts/install.sh` を叩くと自動的に全部作ることが出来る。

## フォントの設定
* gnome-terminal（端末）の設定
    * `> gsettings get org.gnome.Terminal.ProfilesList list`
        * ` ['f9fdab58-2b32-4e98-b5f5-08a73cbff619']` のようにプロファイルのUUIDが取れる
    * `> gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:[uuid]/ font "Ricty Discord Nerd 14"`
        * `[uuid]` は上記で取得した UUID 部分
        * 最後のフォント名は、fc-list の出力の２番目のカラムである、OS が認識するフォント名（上記のように空白が入っていても大丈夫）
* 上記の設定を簡単にするスクリプト
    * https://github.com/tetutaro/dotfiles/tree/main/gnome_terminal
* gnome-terminal（端末）を立ち上げて設定
    * ウィンドウを右クリックして出てきたメニューから設定を選ぶ
        * プロファイルの「フォントの指定」を `ON`
* gnome-tweaks（Tweaks）を立ち上げて設定
    * フォント
        * インターフェースのテキスト：`Noto Sans JP Regular 11`
            * デフォルトは Ubuntu Regular 11
        * ドキュメントのテキスト： `Ricty Discord Nerd Regular 11`
            * デフォルトは Sans Regular 11
        * 等幅テキスト：`Noto Sans Mono CJK JP Regular 13`
            * デフォルトは Ubuntu Mono Regular 13
        * レガシーなウィンドウタイトル：`Noto Sans JP Bold 11`
            * デフォルトは Ubuntu Bold 11

# Python のインストールと Python 仮想環境の構築
* 最初に必要なものをインストール
    * `> sudo apt install python3-pip python3-venv`
* pyenv のインストール
    * `> git clone https://github.com/pyenv/pyenv.git ~/.pyenv`
    * `> git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv`
* poetry のインストール
    *  `> curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | /bin/python3 -`
    * `> poetry config virtualenvs.path "${HOME}/.pyenv/versions"`
* pipx のインストール
    * `> /bin/python3 -m pip install --user pipx`
    * `> /bin/python3 -m pipx ensurepath`
* Python のコンパイルに必要なライブラリ等をインストール
    * `> sudo apt install gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev`
        * 最後の `liblzma-dev` を忘れると、後で痛い目に会う

後は pyenv, poetry, pipx を使って[ドンドン作れば](https://qiita.com/tetutaro/items/53b746412285920180b6)良い。

これらの設定は ZSH の設定に含めたので、[dotfiles](https://github.com/tetutaro/dotfiles) を参照のこと。

# JupyterLab のインストールと設定
[JupyterLab App について真面目に考える - Qiita](https://qiita.com/tetutaro/items/ba93ab90496490e150cd) にいっぱい書いた。

インストールだけすれば、設定ファイルは [dotfiles](https://github.com/tetutaro/dotfiles) にある。

# LaTeX のインストールと設定
これも一発でインストールするスクリプトを以下に置いた。

https://github.com/tetutaro/dotfiles/tree/main/latex

なので [dotfiles](https://github.com/tetutaro/dotfiles) を clone すれば、`latex/install.sh` を叩くと自動的に全部インストールすることが出来る。

設定ファイルも [dotfiles](https://github.com/tetutaro/dotfiles) にあるので、自動的に設定も出来る。

また LaTeX を書くのは面倒くさいし、そこから PDF を生成するのも面倒くさいので、以下のツールを作った。

https://github.com/tetutaro/knit_markdown

これを入れて `knit_markdown` コマンドを使うと、Markdown ファイル（`XXX.md`）から自動的に PDF を生成することが出来る。

また Markdown のファイル名を `XXX.beamer.md` や `XXX.beamer169.md` にすることで、プレゼンテーション用の PDF を作ることが出来る。テーマは私が作ったものになるけど。

# JupyterLab で作ったレポートを PDF にする
* JupyterLab で IPython Notebook（.ipynb）を作り、何やかんやする
* JupyterLab のメニューから、File > Export Notebook as... > Markdown と選び、IPython Notebook を Markdown に変換して保存する
* 生成された Markdown ファイルを `knit_markdown` で PDF にする

# まとめ
ここまでやって、やっと Ubuntu が仕事に使える環境になる。見た目的にも、機能的にも。

最終的な見た目はこんな感じ。

![like_MacOSX.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84885/6aefc042-cd56-f843-e1eb-b7a69342ceab.png)