Ubuntuをちょっと使いやすくする設定集

# Ubuntuをインストールすると毎回設定すること
　今月はUbuntu強化月間ということで、Ubuntuをセットアップし直しています。私はLinuxはしょっちゅうセットアップをしなおすのと、たくさんのマシンを使う関係上、あんまりデフォルトから変えない（バリバリにカスタムはしない）方なのですが、その中でも毎回のように実施する設定も結構あったりします。

　自分へのメモも兼ねて、そんな（自分にとって）鉄板の設定手順を、Linux PCの購入段階から一通りまとめてみたいと思います。

　この記事の対象としている人は、Linuxの基礎的なコマンドは理解しているくらいの初心者〜中級者です。用途は、機械学習や趣味的なソフト開発です。Ubuntuのバージョンは22.04/20.04/18.04で確認しています。

　対象としていないのは、フロントエンド関係・インフラ系開発者・上級者・Ubuntu以外のディストリビューションを使用する方です。あくまで個人的な設定メモなので、参考程度に見てもらえるとありがたいです。

　セットアップは、大体以下にまとめているので、この記事はこのリポジトリの補足説明的な位置付けです。

<a href="https://github.com/karaage0703/ubuntu-setup"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/karaage0703/ubuntu-setup.png" width="460px"></a>

　最初に最低限以下コマンド実行して、gitとcurlのインストールはしている前提です。


# Ubuntu PCの購入
　Ubuntuのセットアップは、PCを買う前から始まっていると言っても過言ではありません（本当か？）Ubuntuの以下サイトに、動作確認されたPCのリストがあるので、この辺りから選ぶと良いでしょう。

https://ubuntu.com/certified

　パソコン工房さんでPC買う場合は、パソコン工房さんが動作確認リストも出してくれています（サポートは対象外）

https://www.pc-koubou.jp/pc/linux_confirm.php

　会社や友人にUbuntu詳しい人がいたら、とりあえず同じ機種を買うのが良いでしょう。

　全く当てが無く、用途もあんまり明確で無ければ、LenovoやHPのノートPCあたりから始めるのが良いかなと思います。

　多少古いPCの方が比較的トラブル少ないです（ドライバが対応してくれているので）。

　お手頃価格のミニPCだと「SEEED ODYSSEY X86J4105」が良いかと思います。以下記事参照ください。

https://zenn.dev/karaage0703/articles/342980220b2ec6

　他自分がインストールしたゲーミングPCの具体例は以下です。

https://zenn.dev/karaage0703/articles/0ca67e19aa772e

# BIOSの設定・Ubuntu OSのインストール
　Ubuntuを使う場合は、BIOSのセキュアブートは無効化しておいた方が色々便利です（NVIDIAのドライバなどでハマったりするので）。Ubuntuのインストール方法と合わせて、以下記事に記載しているのでこちらを参照ください。

https://qiita.com/karaage0703/items/e79a8ad2f57abc6872aa

# DockerでGPU学習環境セットアップ（NVIDIA GPUドライバ）
　Dockerで機械学習とかディープラーニングやりたい人は以下記事参照ください。興味無い人は、ここはスキップしてください。

https://qiita.com/karaage0703/items/e79a8ad2f57abc6872aa


# 初期設定
　最初にやる初期設定のまとめです。


## 最低限のソフトインストール
　以下コマンド実行して、セットアップに必要な最低限のソフトをインストールします。

```sh
$ sudo apt update
$ sudo apt -y install git
$ sudo apt -y install curl
```

## ディレクトリの英語化
　Ubuntuを日本語でセットアップした際、ホームディレクトリのデフォルトのディレクトリが「デスクトップ」と「ダウンロード」といった日本語名ディレクトリになるのが地味に不便です。

　以下コマンドを実行すると、全部英語名（Desktop, Download, ...）になります。

```sh
$ LANG=C xdg-user-dirs-gtk-update
```

　最初から英語版入れれば良いじゃんと言われればそれまでなのですが、ネイティブジャパニーズの軟弱ボーイなので…

## 自動更新（バージョンアップ）の停止
　バージョン勝手にあげられると困る環境では、自動更新を止めましょう。以下コマンドを実行します。

```sh
$ sudo dpkg-reconfigure --priority=low unattended-upgrades
```

　続いて出てくる画面で「自動的に安定版の更新をダウンロードしてインストールしますか？」というようなことが聞かれるので「いいえ」を選択すれば自動更新を止められます（「はい」にすると、自動で更新されます）。

　実際に設定されるファイルは`/etc/apt/apt.conf.d/20auto-upgrades`です。

　手動で設定したい場合は、以下の通りに`0`に設定することで自動更新を停止できます（`1`にすると自動更新します）。

```
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
```

## Google Chromeと拡張機能のインストール/アップデート
以下コマンドでGoogle Chromeをインストールできます。アップデートのときも同様です。

```sh
$ curl -s https://raw.githubusercontent.com/karaage0703/ubuntu-setup/master/install-google-chrome.sh | /bin/bash
```

拡張機能は、1PasswordとAwesome Screenshotを入れています。

1Passwordに関しては以下記事参照ください。

https://karaage.hatenadiary.jp/entry/2020/12/14/073000

Awesome Screenshotに関しては以下記事参照ください。

https://zenn.dev/karaage0703/articles/0f03461a3630b9

Google Chromeリモートデスクトップに関しては以下記事参照ください。

https://zenn.dev/karaage0703/articles/cfde5e6a4f43c3


互換ブラウザのChromiumは以下コマンドでインストールできます。Google Chromeが良いと思いますが、こだわりなどありましたらこちらをインストールください。

```sh
$ sudo apt -y install chromium-browser
```


## Gitの初期設定
 Gitを使う人は設定必要ですね。以下コマンド例です。名前とメールアドレスは自分のものに合わせて変更してください。

```sh
$ git config --global user.name "karaage umauma"
$ git config --global user.email "karaage@umauma.com"
```

　認証に関しては、毎回パスワード（トークン）を入力するのが面倒だったら、認証用のCLI`gh`を使うと楽です。以下で`gh`をインストールできます。

```sh
$ curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
$ sudo apt update
$ sudo apt install -y gh
```

　インストール後は以下実行します。

```sh
$ gh auth login
```

　質問に基本は全てYで答えると、ブラウザで認証ができます。

　少しセキュア度合いでは劣りますが、パスワード省略するための手軽な方法として`~/.netrc`というファイルに以下のように記載する方法もあります。`username`と`accesstoken`には、自分のGitHubのユーザー名とアクセストークンを入れてください。

```
machine github.com
login username
password accesstoken
```

　以前は以下の方法でパスワード保存していたのですが、いつの間にか`libgnome-keyring-dev`のインストールでこけるようになってできなくなってしまいました。
　~~Gitのパスワードを保存しておきたい場合は、以下実行しましょう。~~

```sh
$ sudo apt install -y libgnome-keyring-dev 
$ cd /usr/share/doc/git/contrib/credential/gnome-keyring
$ sudo make
$ git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
```

~~参考：[https で git push するときのパスワードをGNOMEのキーリングに保存する](https://qiita.com/hrko/items/4916c3492836dad6362c)~~


## ウィンドウマネージャーの軽量化
注： 自動ログイン設定など、色々設定がよく分からない点があるので、最近は使っていません。

　LXDE（Lubuntu)が軽いので、入れ替えて使ってます。以下のコマンドでインストールします。依存関係があったので2回に分けていますが、バージョンによっては下の1行だけでもいけるかもしれません。

```sh
$ sudo apt install -y lubuntu-gtk-core
$ sudo apt install -y lubuntu-desktop fcitx-mozc
```

　途中、選択肢がいくつか出てくるので「lightdm」を選びました（適当に選んでます）。

　セットアップ後、再起動するとログイン画面の右上のアイコンから使用するウィンドウマネージャを選択できるようになるので「lubuntu」を選択します。

　以下のような画面になります。あきらかに動作が軽くなると思います。

![lubuntu_screen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/608d24eb-b116-b90f-6227-ae8900210fd4.png)

　最初からLubuntu使うという方法もあるみたいですが、そこはほら、軟弱ボーイなので…

## マルチディスプレイの設定
　マルチディスプレイを使いたい場合は、ARandRを使うのが良いです。以下でインストールできます。

```sh
$ sudo apt install -y arandr
```

　インストールしたら、以下コマンドで起動できます。

```sh
$ arandr
```

　HDMIやDisplay Portでディスプレイと接続しているとき、うまくディスプレイを認識できないとき（モニタが省電力モードに入ってしまう等）があります。そのときは、PCとディスプレイのネゴシエーションがうまくいってない可能性が高いので、接続したまま再起動するとうまく認識してくれるかもしれません。

参考：[ARandRがめっちゃ良いって話](https://qiita.com/SotaAtos/items/c42f01f11fa107e11568)

## `.bashrc`設定
　`.bashrc`は、大体3つを追記しています。

- キーボード設定
- openコマンドのエイリアス
- Gitのブランチ名をプロンプトに表示

　以下コマンドで一気に設定できます。

```sh
$ curl -l https://raw.githubusercontent.com/karaage0703/ubuntu-setup/master/bashrc.patch >> ~/.bashrc
```

　設定に関して、順に簡単に説明します。

### キーボード設定する
　CAPSキーをCTRLキーにする

```sh
setxkbmap -model jp106 -layout jp -option ctrl:nocaps
```

### openコマンドのエイリアス
　`$ open .`とコマンド打つと、今いるディレクトリをフォルダで開くようにするために設定します。Macとコマンドを同じにしたいので設定しています。 

```sh
alias open='xdg-open'
```

### Gitのブランチ名をプロンプトに表示
　Gitで管理されているリポジトリで、プロンプトにブランチ名が表示されるようにする設定です。お好みで。

```sh
$ export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
```

`__GIT_PS1: コマンドが見つかりません`というエラーが出る場合は、以下コマンドを実行してください。

```sh
$ cd ~ 
$　wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
$ wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
$ mv git-prompt.sh .git-prompt.sh
$ mv git-completion.bash .git-completion.bash
$ source .bashrc
```

参考：[_GIT_PS1: コマンドが見つかりません](https://ozakingblog.wordpress.com/2015/12/06/__git_ps1-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93/)

## タッチパッドをOFF
　これは`.bashrc`に追加するかは好み次第ですが、ノートPCのタッチパッド、Linuxだと誤動作多く使いづらいことが多いです。私は思い切ってタッチパッドは殺してしまい、マウスを使っています。以下コマンドでタッチパッドをオフにできます。

```sh
$ synclient TouchpadOff=1
```

　マウスがないと困ってしまうので、`.bashrc`には書いていません。

# エディタ関係セットアップ
　エディタをセットアップします。最近はほとんどVS Codeですが、いざというとき（？）のためにVimもセットアップしておきます。

## VS Code
　UbuntuのVS Code、snap版日本語が入力できないバグがあるので、deb版をインストールしましょう。以下コマンドでOKです。

```sh
$ curl -s https://raw.githubusercontent.com/karaage0703/ubuntu-setup/master/install-vscode.sh | /bin/bash
```

　拡張機能のインストールや、その他の詳しい使い方に関しては、[VS Codeエディタ入門](https://zenn.dev/karaage0703/books/80b6999d429abc8051bb)という無料本をZennで公開していますので、よければ参考にしてみてください。

## Vim
　とりあえずvimは入れておきます。

```sh
$ sudo apt install -y vim
```

　昔は、色々拡張入れてましたがVS Code使うようになってからは、デフォルト運用しています。拡張に興味ある人は以下リポジトリ参照ください。

<a href="https://github.com/karaage0703/vim-dotfiles"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/karaage0703/vim-dotfiles.png" width="460px"></a>

## 標準のエディタ設定
　標準のエディタはnanoエディタが起動するので、使い慣れていない人は以下コマンドで使い慣れたエディタを設定しておきましょう。

```sh
$ sudo update-alternatives --config editor
```

# ターミナル関係セットアップ
## ターミナル「Hyper」
　Hyperが見た目がおしゃれなのと、ウィンドウ分割できるので使っています。Macでも使えます。コマンドだとちょっとめんどくさいので[Hyper公式サイト](https://hyper.is/)でパッケージをダウンロードしてインストールします。

　設定は以下コマンドで行います（Macの設定ファイルと共用してます）。

```sh
$ curl https://raw.githubusercontent.com/karaage0703/mac-dotfiles/master/.hyper.js > ~/.hyper.js
```

　環境によっては、設定ファイルの場所が`~/.config/hyper/.hyper.js`かもしれません。その場合は、`~/.hyper.js`を適宜修正ください。

　その他詳細は以下記事参照ください。

[マルチプラットフォーム対応のターミナル「Hyper」](https://qiita.com/karaage0703/items/9d53f4ee1ba3db30f620)


## 仮想ターミナル「byobu」
　仮想ターミナルは`byobu`を使っています。リモートマシンで機械学習走らせたり、ROS使ったりする人は便利です。

　詳細は以下参照ください。

https://karaage.hatenadiary.jp/entry/2016/04/22/073000


# Python関係のセットアップ
　Python、いろいろ試して一周回ってpyenvを使うことが多いです。以下参照ください。

https://zenn.dev/karaage0703/articles/5af7ce4b8b1a8a



# タスクアプリインストール
　Microsoft 「To Do」が好きなのでインストールします。非公式ですが、AOというアプリで使えます。インストールは以下コマンドです。

```sh
$ sudo snap install ao
```

　以下記事を参考にしました。

https://www.maketecheasier.com/manage-microsoft-to-do-in-linux/

# その他トラブルシューティング
## ディスプレイが回転する
　Realsenseなどのセンサが内蔵されているデバイスを使うと発生する現象です。以下でセンサのドライバをアンインストールすれば良いそうです。

```sh
$ sudo apt remove -y iio-sensor-proxy
```

参考： [Realsenseを回転させたらPC画面が回転する！（解決法）](https://ar-ray.hatenablog.com/entry/2020/09/29/170317)

## Proxy関係
　以下記事参照ください

https://karaage.hatenadiary.jp/entry/2015/11/26/073000

## aptでロックできません的メッセージが表示される
以下のようなメッセージが表示されるケースです。

```
E: Could not get lock /var/cache/apt/archives/lock. It is held by process 3073 (unattended-upgr)
N: Be aware that removing the lock file is not a solution and may break your system.
E: ディレクトリ /var/cache/apt/archives/ をロックできません
```

　以下を実施して、ロックファイルを削除して、再構成すれば直ります。

```sh
$ sudo rm /var/lib/apt/lists/lock
$ sudo rm /var/cache/apt/archives/lock
$ sudo rm /var/lib/dpkg/lock
$ sudo dpkg --configure -a
```

　詳しい仕組みなどは興味あれば調べてみてください。

## ネットワーク設定（IPアドレス）
　Ubuntu 20.04以降は従来の `/etc/network/interfaces`から`/etc/netplan/`以下のyamlファイルに書き込む形に変更されているので気をつけましょう。


## WindowsとLinuxとデュアルブート時Windowsの時間が9時間ずれる
　デュアルブートしているときの時計ズレ対策です。以下コマンドを実行してください。

```sh
$ timedatectl set-local-rtc true
```

その他、時計関係は以下記事参照ください。

https://zenn.dev/karaage0703/articles/47838858dd3107


# まとめ
　Ubuntuをちょっと使いやすくする設定に関してまとめてみました。この後も、必要に応じて色々ソフトをインストールしますが、それらは人によって様々だと思いますので、なるべく多くの人に共通しそうな設定をまとめてみました。

　人によって要不要は全然違うとは思いますが、何かの参考にあんれば幸いです。他にオススメの設定やソフトなどありましたらコメントや編集リクエストいただけたら幸いです。

# 参考リンク
[Ubuntu をインストールしたら設定すること 13 ヶ条](https://zenn.dev/sprout2000/articles/112116c4edb265)

[Ubuntu 22.04 をインストールしたら設定すること 10 ヶ条](https://zenn.dev/sprout2000/articles/8ea4a77d81583a)

[自作PCからUbuntu22.04開発環境構築してみた](https://qiita.com/aibazhang/items/04c5dabec80e30e221c8)

[Ubuntu 20.04 LTSで固定IPアドレスを設定する方法【サーバー編】](https://linuxfan.info/ubuntu-2004-server-static-ip-address)


# 関連記事
https://zenn.dev/karaage0703/articles/0ca67e19aa772e

https://karaage.hatenadiary.jp/entry/2017/08/18/073000

https://karaage.hatenadiary.jp/entry/2017/09/11/073000

https://qiita.com/karaage0703/items/f01db1cf49b151022b7c

# 変更履歴
- 2023/04/01 微修正
- 2023/01/02 Ubuntu PCの動作確認情報に関して追記
- 2022/04/24 微修正
- 2021/03/15 微修正
- 2020/10/28 全体的にアップデート
- 2020/09/04 自動更新の停止に関して追記