System76 の Serval WS を 使ってみた

# 始めに
アメリカの会社 System76 から、Ubuntu OS の Serval WS という ノートパソコン を購入しました。

今回は購入の背景から、セットアップをするところまで、気付いたことをメモしていきます。

当記事については、個人のメモを目的としてます。

購入やセットアップなど自己責任でお願い致します。

・購入に至るまでの背景
・購入
・セットアップ
・モディファイヤキー
・Visual Studio Code の cache ファイル を 削除 する
・.bashrcファイル と .bash_profile について

# 1. 購入に至るまでの背景
## 1-1. これまで
自宅では Panasonic Let's note という ノートパソコンを使っていました。

OS は Windows7 でした。

Ubuntu を Windows7上 の ゲストOS として、 仮想マシン Oracle VM VirtualBox で 動かしていました。

## 1-2. 競技プログラミング
競技プログラミングが好きで、コンテストに参加しています。

競技プログラミングでは、問題を解く速さを競い合います。

問題の解き方を考えて、それをプログラミングします。

プログラムが実際の入力値に対して、出力値が想定通りか確認し、提出します。

## 1-3. プログラミング言語
コンテストでは、解き方を考えたり、その解き方が正しいか確認することに時間を使います。

プログラミングには時間をかけない工夫が必要です。

参加者の多くは、得意とするプログラミング言語があり、それで勝負します。

## 1-4. プログラミング言語の使い分け
一部の参加者は、コンテスト内で使用する言語を変えたりします。

簡単な問題 (インプット件数が少ない問題) では、Python を使用します。

コーディングのステップ数が少なく、記述が簡潔になる為です。

難しい問題 (インプット件数が多い問題) では、C++ や Java を使います。

Python では、実行時間がコンテストの制限時間 (数秒) を超えることがある為です。

## 1-5. 苦労すること
コンテスト内で使用する言語を変える場合、環境や操作に苦労します。

プログラムのコーディング、デバッグ、実行は、使用する言語に左右されるからです。

言語ごとに違う違うオペレーションをするよりは、統一された環境で望みたい気持ちがあります。

## 1-6. Visual Studio Code
Visual Studio Code は 最近大変便利になりました。

コーディング や シンタックスチェック や デバッグ。

C++、Java、Pythonどれでも、比較的簡単な統一されたオペレーションで出来ます。

動作環境、Windows や Macintosh、Linux まで幅広く使えます。

## 1-7. 競技プログラミングツール
競技プログラミングツールの導入により作業負荷が軽減します。

自分の作成したプログラムが実際の入力値に対して、出力値が想定通りか確認する作業が半自動化されます。

競技プログラミングツール は コンテストページから、入力例と出力例を取り込みます。 (スクレイピング) 

kimiyukiさん の online-judge-tools を 当記事にて紹介致します。

当ツールの登場当初は、Linux のみ使用可能でした。

現在はさらに進化して Windows でも使用できるようです。

今回、自宅の端末の OS を Windows から Linux に 乗り換えようと思った動機の一つです。


## 1-8. Ubuntu OS の ノートPC にしよう
Ubuntu OS の ノートPC にするだけなら、OSを自分でインストールすれば良い。

Ubuntu OS を プリインストール している ノートPC を調べたところ、System76 がありました。

System76 は、Pop!_OS という Ubuntu に基づいた独自の Linux ディストリビューションを作成しています。

Ubuntu に対するこだわりが感じられました。

この会社 から ノートPC を購入することにしました。

# 2. 購入
## 2-1. DESIGN + BUY
[System76 Homepage](https://system76.com "System76 Homepage") に アクセス します。

ノートPC は laptops です。

機種の画像をクリックすると、その機種の紹介やスペックが掲載されています。

画面右上、DESIGN + BUY をクリックすると以下を選択できます。
・Operating System
・Display
・Graphics
・Processor
・Memory
・OS Drive
・Additional M.2 SSD Drive
・1st 2.5″ Drive
・2nd 2.5″ Drive
・Wireless AC
・Accessories
・Laptop Bag
・Warranty

この他、以下がありますが、日本からの購入では選択できませんでした。
・Shipping Coverage
・Assembly Service
・Recycling

以下を選択しました。

| Item                     | Select |
|-------------------------:|:-------|
| Model                    | Serval WS 15"|
| Operating System         | Ubuntu 18.04 LTS (64-bit) |
| Display                  | 15.6" Matte 1080p FHD Wide View Angle Matte Display|
| Graphics                 | 6 GB GDDR6 RTX 2060 w/ 1920 CUDA Cores|
| Processor                | 5 GHz i9-9900K (3.6 up to 5 GHz – 16MB Cache – 8 Cores – 16 Threads)|
| Memory                   | 64 GB Dual Channel DDR4 at 3000MHz (4× 16GB) |
| OS Drive                 | 500 GB NVMe Seq Read: 3,500 MB/s, Seq Write: 3,200 MB/s |
| Additional M.2 SSD Drive | 500 GB NVMe Seq Read: 3,500 MB/s, Seq Write: 3,200 MB/s |
| Wireless AC              | WiFi up to 867 Mbps + Bluetooth |
| Accessories              | Extra Battery |
|                          | 330 Watt Extra Charger |
|                          | External USB DVD-RW Drive |
| Laptop Bag               | 17″ Messenger Bag by Timbuk2 |
| Warranty                 | 3 Year Limited Parts and Labor Warranty |
| | |

Accessories は 望むならば 選択します。

Battery、Charger は もともと 1セット は付いているので、予備用で選択しました。

DVD-RW Drive は PC内蔵 ではないので、選択しました。

Charger は 日本での ACアダプタに近いですが、ビックサイズ 198×98×43(mm) です。

届いた時にびっくり、がっかりしましたが、もう慣れました。

差込プラグの形状が3ピンなので、3ピンを2ピンにするアダプタを別途購入しました。
・エレコム 電源タップ 変換アダプタ 3ピン→2ピン アース付きコンセント T-H32 

画面下部 ADD TO CART を クリック します。

内容を確認して CHECKOUT を クリック します。

このとき System76 の アカウント が必要となるので登録します。

輸送 は UPS。

安いプランと高いプランが、画面上提示がありましたが、高いプランを選択しました。

自宅にはクロネコヤマトで届きました。

手数料を支払いました。

## 2-2. 決済
支払はクレジットカードも使えます。すんなりいけば画面で完結します。

私の場合、「決済金額」がカードの「ショッピング枠」を超えてしまった為、使えませんでした。

画面に contact serviceというボタンがあります。

System76 との チャット画面 (ファイル添付可能) が表示されます。

以下を伝えて、銀行口座を教えて頂き、銀行からの一括払いとしました。

```Text:Google翻訳を使いました
The current card cannot be used for payment.
Is it possible to make a lump sum payment from my bank to your bank?
I would like to know your bank account for this purpose.
```

## 2-3. 銀行
銀行窓口で海外送金と伝えました。

現金はテロ対策などの観点から、お受けできないと伝えられました。

その為、送金は自分の銀行口座から直接相手先銀行口座に振込となりました。

銀行口座申込時の印鑑、通帳が必要となります。

身分証明として、運転免許書等とプラスでマイナンバーカード(通知書はがき可)が必要です。

マイナンバーまでは用意してなかったのでマイナンバーカードの通知はがきを自宅に取りに帰りました。

「外国送金受取書 外国送金受付書 (兼送金手数料受領書)」を記入します。

全てアルファベット大文字で記入します。

支払銀行手数料負担区分は「依頼人負担」です。

銀行コード は SWIFT CODE のみを使います。

私は SWIFT CODE と合わせて 念の為 Routing Number も記入しました。

ところが Routing Number で うまく行かないと、後日銀行の方から電話がありました。

相手先銀行 と System76 それぞれについて、国名と州名を記入します。

USA は大丈夫だろう、州名は事前につづりを調べておくと慌てずに済みます。

受取人への通知事項として、念の為、Order ID と 受付日 を記入します。

```Text:受取人への通知事項
Order ID:#実際のOrder ID Date:受付日の月/受付日の日/受付日の年4桁
```

送金目的を記入します。

```Text:送金目的
ノートPC購入
```

別途「個人番号提供書」を記入しました。

## 2-4. 所要日数
サイトで申込から 13日間でした。

注文処理の完了までに時間がかかりましたが、組立開始からは早かったです。

以下、日本時間での経緯です。

2019/08/11(日) 13:00 サイトで申し込み、カード使用失敗
2019/08/12(月) 17:00 銀行口座等を教えて頂くよう依頼
2019/08/13(火) 00:00 銀行口座等の情報を受領
2019/08/13(火) 11:00 銀行窓口での手続き完了
2019/08/20(火) 03:00 注文処理の完了、組立開始の連絡を受領
2019/08/24(土) 12:00 クロネコヤマトから自宅にノートPC到着

# 3. セットアップ
## 3-1. 使用機器
ダウンロードファイルや重要なメモ、作成したiso ファイル などを 外付けHDD に保存する。
リカバリディスクの作成などの目的で、外付けDVD-RW Drive を使用して DVDを焼く。

| Maker | Device | Description |
|:--|:--|:--|
| System76 | Serval WS 15" | ノートPC 15インチ (System76 より購入)|
| I-O DATA | HDCZ-UTL4KB |  外付け HDD 4TB (別途、家電量販店で購入) |
| ASUS | SDRW-08D2S-U | 外付け DVD-RW Drive (System76 より Accessories として購入) |
| | | |

## 3-2. Serval WS 15" 内蔵SSD
システム領域 (/) と データ領域 (/home) を 別のSSD とする。
合計 1 TB。

| Maker | Device | Description |
|:--|:--|:--|
| Samsung | SSD 970 EVO Plus 500GB | OS Drive |
| Samsung | SSD 970 EVO Plus 500GB | Additional Drive |
| | |

## 3-3. パーティション
以下の配分でパーティションを切る。

nvme0n1 (OS Drive)

| Device | Type | Mount point | Format | Size |
|:--|:--|:--|:--:|--:|
|nvme0n1p1 | efi | | | 512 MB |
|nvme0n1p2 | ext4 | / | Yes | 173 GB |
|nvme0n1p3 | ext4 | /usr | Yes | 260 GB |
|nvme0n1p4 | ext4 | /var | Yes | 50 GB |
|nvme0n1p5 | swap | | | 16 GB |
| | | | | |

nvme1n1 (Additional Drive)

| Device | Type | Mount point | Format | Size |
|:--|:--|:--|:--:|--:|
|nvme1n1p1 | ext4 | /home  | Yes | 500 GB |
| | | | | |

余談、OS Drive と Additional Drive は、使用者がそのように決めているだけで
実際はシリアルナンバーでしか見分けは付かない。

論理名である nvme0n1 と nvme1n1 は
OS起動時に先にマウントされた方が nvme0n1、後にマウントされた方が nvme1n1 となる。

## 3-4. OS インストール と パーティション
Serval WS の電源を入れると、そのまま Ubuntu のインストールが始まる。

Ubuntu OS は インストール時に、パーティションを切ることができるが
届いたノートPC そのままの状態でインストールを進めた場合
パーティションを切る画面が表示されない。

後から Gparted などで切ることができるようなのだが
UEFI BIOS では パーティションを切ることが難しい
具体的には、パーティション自体は切れるが、Mount point を指定することが出来なかった。

なお、届いたノートPCには説明書の冊子は無く
リカバリディスク や Ubuntu OS の DVDディスク等は無かった。

## 3-5. ライブUSBメモリを作成
[System76 support](https://support.system76.com "System76 support")  に アクセスします。

「Create and Use Bootable Media from Other OS's」リンクを押す。
「Make Bootable drive」「For Ubuntu/Pop!_OS」の
「Ubuntu 18.04 here」のリンクを押す。

リンク先が切れていて、「Not Found」となるが、URLから
「ubuntu-18.04.2-desktop-amd64.iso」であることが分かる。

インターネットで探す「Index of /releases/18.04.2 - Ubuntu® Old Releases」から
ubuntu-18.04.2-desktop-amd64.iso を ダウンロードする。

ダウンロードしたファイルのチェックサムを
同ページの「MD5SUMS」なり「SHA256SUMS」で確認する。

[System76 support](https://support.system76.com "System76 support")  に アクセスします。

「Create and Use Bootable Media from Other OS's」リンクを押す。
「For Windows/MacOS」に記載されている手順に従い
Windowsマシンでユーティリティソフト「Etcher」で USB を作成する。

サイズが 1.85 GB ある。
サイズに余裕のある USB を使用する。

## 3-6. ライブUSBメモリより Ubuntu OS を インストール
作成したライブUSBメモリを Serval WS にさして
電源ボタンを押した直後にF7ボタンを押す。

USBメモリを選択する。

GNU GRUB の 白黒の画面が表示される。

「Install Ubuntu」を選択する。

画面に従って、インストールを進める

| Title | Action |
|:--|:--|
| Welcome | (言語選択) English |
| Keyboard layout | (左) English(US) (右) English(US) |
| Wireless | Connect to this network を選択する |
| | SSID を 選択する |
| | Password を 入力する (13桁の英数字) |
| Updates and other software| そのまま Continue |
| Installation type| Something else (これがやりたかった、パーティション) |
| | 「3-3. パーティション」 の 表に従い、パーティションを切る |
| Where are you? | そのまま Tokyo |
| Who are you? | Your name に 「shibata」 |
| | Password を入力 |
| | Require my password to log in を選択|
| Installation Complete | USBメモリを取り外して Restart Now|
| | |

ここで画面の表示に乱れがあり、ログイン画面がなかなか表示されない。

おそらく OSの上書きインストールで グラフィック などに必要なプログラムが
まだインストールされていない為だ。

電源長押しで電源を落とし、また電源を入れるを
数回やっているうちにログイン画面が表示された。

## 3-7. Ubuntu OS にログインして必要な設定
画面中央「What's new in Ubuntu」右にある緑色の「Next」ボタンを押す。

「Livepatch」、「Set Up Livepatch」ボタンを押す。

「Help improve Ubuntu」、「Yes, send system info to Canonical」を選択する。

[System76 support](https://support.system76.com "System76 support")  に アクセスします。

「Install Ubuntu On Your System76 Computer」リンクを押す。
表示されたページの以下のセクションに記載のある全てのコマンドを端末で実行する。

「Install System76 Driver」
「NVIDIA Graphics」
「If ‘nouveau.modeset=0’ Was Used」

端末は 「Ctrl」キーと「Alt」キーを押しながら、「T」キーを押すと起動する。

次に「XDGスタイル」と「Nautilusパス表示」

```Bash:XDG_Nautilus.sh
LANG=C xdg-user-dirs-update --force
gsettings set org.gnome.nautilus.preferences always-use-location-entry true
```

[System76 support](https://support.system76.com "System76 support")  に アクセスします。

「Watch Videos and Play Music (MP3, DVD, etc.)」リンクを押す。
表示されたページの以下のセクションに記載のある全てのコマンドを端末で実行する。

「Install Packages」「Copy and paste the following line for Ubuntu/Pop 18.04」
1行のコマンドを端末で実行する。

「Setup DVD Playback」
1行のコマンドを端末で実行する。

「Useful Programs」
1行のコマンドを端末で実行する。

画面の左下にある「Apps button」を押す。

検索小窓で「Software」と入力、検索する。

小包と地球のアイコンが表示されるのでクリックする。

「Ubuntuのソフトウェア」タブ
以下にチェックが入っていない場合は、チェックを入れる。

・「Canonicalによってサポートされる〜(main)」
・「コミュニティによってサポートされる〜(universe)」

「他のソフトウェア」タブ
以下にチェックが入っていない場合は、チェックを入れる。

・「Canonical パートナー」
・「Canonical パートナー(ソースコード)」

閉じるボタンを押した時に、更新が必要なメッセージが出たら、更新する。

次に「パッケージのアップグレード」

```Bash:upgrade.sh
sudo apt update && sudo apt upgrade -y
```

次に「パネルの日付表示」

```Bash:show-date.sh
gsettings set org.gnome.desktop.interface clock-show-date true
```

次に「警告音 (たぬきの腹づつみのようなポンという音) の抑止」

画面右上、「逆三角ボタン」、「工具ボタン」を押す。
設定画面が表示される。
「サウンド」を選択する。
出力の音量を「オフ」にする。

次に「日本語」

```Bash:japanese.sh
sudo apt install language-pack-ja-base language-pack-ja ibus-mozc
sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
sudo apt install manpages-ja manpages-ja-dev
```

画面右上、「逆三角ボタン」、「工具ボタン」を押す。
設定画面が表示される。
「地域と言語」を選択する。

言語(L) を 「日本語」
フォーマット(F) を 「日本」

入力ソースを 「日本語(Mozc)」にする。
「英語(en)」は「−」で削除する。

画面右上の「あ」と表示されている右横の逆三角ボタンを押す。

「ツール」、「プロパティ」を選択する。

キー設定の選択で「編集...」ボタンを押す。
 
入力キーで並び替え、「Ctrl Space」が 2 件ある。

モード「変換前入力中」と「変換中」で、「編集」「選択されたエントリーを削除」。

同じく入力キーで並び替え、「Hankaku/Zenkaku」が 4 件ある。

モード「変換前入力中」と「変換中」と「直接入力」と「入力文字なし」で
「Hankaku/Zenkaku」を三回クリック。

「割り当てるキーの入力:」で「Ctrl」キーを押しながら「スペース」キーを押す。

「OK」ボタンを押す。

後ほど再起動後に「Ctrl」キーを押しながら「スペース」キーを押すと
ひらがなと直接入力が切り替えられるようになる。

ログオフではなく、手動で再起動する。
画面右上、「逆三角ボタン」、「電源ボタン」、「電源オフボタン」

起動時に以下のメッセージが表示される。

「標準フォルダの名称を現在の言語に合わせて更新しますか？」
※現在のフォルダ名「Desktop」、新しいフォルダ名「デスクトップ」になっている
「次回から表示しない」にチェックを入れる。
「古い名前のままにする」ボタンを押す。

## 3-8. その他のソフトウェア
DVDを焼く、Xfburn を入れる。

```Bash:install_Xfburn.sh
sudo apt update
sudo apt install xfburn
```

システムのバックアップやリストアをする、Timeshift を入れる。

```Bash:install_Timeshift.sh
sudo add-apt-repository ppa:teejee2008/ppa
sudo apt update
sudo apt install timeshift
```

プログラミング言語を入れる。
[Visual Studio Code Remote Development(SSH) を使って C++、Java、Python を試してみた](https://qiita.com/ShinjiSHIBATA/items/fddda2a101cc7f309cce "Visual Studio Code Remote Development(SSH) を使って C++、Java、Python を試してみた")

やることは同じ。

各言語の「インストール 確認」をまず実施。

入っていない言語は Java と Clang-format だけだった。

```Bash:install_Java.sh
sudo apt-get install openjdk-8-jdk

which java
java -version

which javac
javac -version

# .bashrc の編集
# vi 操作はインターネット上の他の情報を参照下さい。
vi ~/.bashrc

# vi で 末尾 に以下の4行を追記。(コメントの#は消して追記下さい)
#JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
#export JAVA_HOME
#PATH=$PATH:$JAVA_HOME/bin
#export PATH

# vi で追記の保存が完了したら実行
source ~/.bashrc
```

```Bash:install_clang-format.sh
sudo vi /etc/apt/sources.list

# vi で 末尾 に以下の2行を追記、保存。(コメントの#は消して追記下さい)
# deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic main
# deb-src http://apt.llvm.org/bionic/ llvm-toolchain-bionic main

# パッケージを更新
sudo apt update

# 失敗する
# Googleで検索「ubuntu sudo apt-key adv」
# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 15CF4D18AF4F7421
# sudo apt update

sudo apt install clang-format-11

cd /usr/bin

# clang-format の bin シンボリックリンク

# clang-format の apt install を 実行した時に clang-format-11 にリンクされている
#sudo ln -nfs ../lib/llvm-11/bin/clang-format clang-format-11

# clang-format-11 を clang-format として実行できるようにする
sudo ln -nfs clang-format-11 clang-format
```

[Visual Studio Code](https://code.visualstudio.com/download "Visual Studio Code") を入れる。

.debファイルをダウンロード。

ダウンロードした .debファイル を apt install。

```Bash:install_visual_studio_code.sh
cd /home/shibata/Downloads
sudo apt install ./code_1.38.0-1567547996_amd64.deb 
```

フォントを入れる。

```Bash:install_font.sh
sudo apt install -y fonts-ricty-diminished 
```

## 3-9. 外付けHDD を 初期化
4TB の 外付けHDD 「HDCZ-UTL4KB」の初期化を行う。

「Apps button」を押す。

検索小窓で「disks」と入力する。

「ディスク」というアイコンをクリックする。

4.0 TB ハードディスクを選択。

画面右上、三本線のバーガーメニューを押す。

「ディスクを初期化」を選択

| Title | Action |
|:--|:--|
| 消去(E) | 既存のデータを上書きしない(クイック) |
| パーティション(P) | 新しいシステムと2TBを超えるハードディスクで互換(GPT) |
| | |

上記を選択し、「初期化」ボタンを押す。

ボリュームにある歯車ボタンを押す。

「パーティションを初期化」を選択。

| Title | Action |
|:--|:--|
| ボリューム名(N) | 「HDCZ-UTL4KB」と入力 |
| 消去(E) | 「オフ」を選択 |
| タイプ | Linux 用 の内蔵ディスクとして使用する (Ext4)(I) |
| | |

画面右上「次へ」ボタンを押す。

「警告：ボリュームにあるすべてのデータが失われます」というメッセージが表示される。

「初期化」ボタンを押す。

## 3-10. 装置構成図
パーティション後の装置構成を図にまとめた。
![fig.1 Device configuration diagram](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/f2ca4500-f7f7-660f-6edb-8e4c2bca5b88.png "fig.1 Device configuration diagram")

## 3-11. Clonezillaを使う
リカバリディスクの作成を行う。

Clonezilla というソフトウェアを使う。

Clonezilla は Ubuntuベース と Debianベース がある。

Ubuntuベースを使用する。

Clonezilla の isoファイル を ダウンロード し、Xfburn で DVD に焼く。
clonezilla-live-20190707-disco-amd64.iso

DVD メディア は データ用 4.7 GB DVD-R を使う。

## 3-12. Clonezilla ディスクイメージ を作成
1つの SSD に対して、1つの Clonezilla ディスクイメージ を作成する。
複数の Clonezilla ディスクイメージ を作成する場合、以下を繰り返す。

| No | Option | Screen | Action |
|--:|:--|:--|:--|
|1| | Clonezilla DVDを入れ、電源ON、すぐにF7を長押し |  |
|2| | Prease select boot device: | 「UEFI: ASUS SDRW-08D2S-U B911」 |
|3| | *Clonezilla live (Default settings, VGA 800×600) | Enter |
|4| | ja_JP.UTF-8 Japanese / 日本語 | Enter |
|5|keep| デフォルトのキーボードレイアウト（英語キーボード）を維持 | Enter |
|6| | Start_Clonezilla Clonezilla を開始します | Enter |
|7| device-image | ディスク／パーティション⇔イメージ | Enter |
|8| local_dev | ローカルディスク（例：ハードディスク、USBドライブ）をマウント | Enter |
|9| | | Enter |
|10| | /dev/nvme0n1 | |
|11| | /dev/nvme1n1 | |
|12| | /dev/sda | |
|13| | | Ctrl-C |
|14| | sda1 | Enter |
|15| | Clonezilla | Enter |
|16| | v1 | Enter |
|17| | TABで\<Done\>選択 | Enter |
|18| Beginner | 初心者モード：デフォルトオプションを了解 | Enter |
|19| savedisk | ローカルディスクをイメージに保存 | Enter |
|20| | 2019-09-09-01-img | Enter |
|21| | nvme0n1 | Spaceを押して選択 Enter |
|22| -sfsck | 元ファイルシステムのチェック／修復をスキップする | Enter |
|23| | はい、保存イメージをチェックします | Enter |
|24| -senc | イメージを暗号化しない | Enter |
|25| -p poweroff | シャットダウン | Enter |
|26| | 本当に続けてもよろしいですか？ | y Enter |
|27| | DVD Eject | Enter |
|28| | | Enter |
|29| | 電源が落ちる | |
| | |

## 3-13. Clonezilla ディスクイメージから iso ファイル を作成
1つの Clonezilla ディスクイメージ から 1つの iso ファイル を作成する。
複数の  iso ファイル を作成する場合、以下を繰り返す。

「Clonezilla ディスクイメージ を作成」
「Clonezilla ディスクイメージから iso ファイル を作成」
両者とも No.18 まで手順は同じ。

ポイントはどちらも手順の中で「保存先」の指定を先に行っていることだ。

画面の日本語が分かりにくいが、何度か試していると慣れる。

| No | Option | Screen | Action |
|--:|:--|:--|:--|
|1| | Clonezilla DVDを入れ、電源ON、すぐにF7を長押し |  |
|2| | Prease select boot device: | 「UEFI: ASUS SDRW-08D2S-U B911」 |
|3| | *Clonezilla live (Default settings, VGA 800×600) | Enter |
|4| | ja_JP.UTF-8 Japanese / 日本語 | Enter |
|5|keep| デフォルトのキーボードレイアウト（英語キーボード）を維持 | Enter |
|6| | Start_Clonezilla Clonezilla を開始します | Enter |
|7| device-image | ディスク／パーティション⇔イメージ | Enter |
|8| local_dev | ローカルディスク（例：ハードディスク、USBドライブ）をマウント | Enter |
|9| | | Enter |
|10| | /dev/nvme0n1 | |
|11| | /dev/nvme1n1 | |
|12| | /dev/sda | |
|13| | | Ctrl-C |
|14| | sda1 | Enter |
|15| | Clonezilla | Enter |
|16| | v1 | Enter |
|17| | TABで\<Done\>選択 | Enter |
|18| Beginner | 初心者モード：デフォルトオプションを了解 | Enter |
|19| recovery-iso-zip | リカバリ用のclonezilla_Liveディスクを作成 | Enter |
|20| | 2019-09-09-01-img | Enter |
|21| | nvme0n1 | Spaceを押して選択 Enter |
|22| | はい、リストア前にイメージを確認します。 | Enter |
|23| -p poweroff | シャットダウン | Enter |
|24| | ja_JP.UTF-8 Japanese / 日本語 | Enter |
|25| | None | Enter |
|26| | iso CD/DVD用のISOファイルを作成 | Enter |
|27| | | Enter |
|28| | | y Enter |
|29| | poweroff 電源OFF | Enter |
|30| | DVD Eject | Enter |
|31| | | Enter |
|32| | 電源が落ちる | |
| | |

## 3-14. iso ファイル を リカバリディスク として DVD に焼く
DVD メディア は 片面二層 (データ用 8.5 GB DVD-R DL) を使う。
1つの iso ファイル を 1枚の DVD メディア に焼く。

| No | Screen | Action |
|--:|:--|:--|
|1| DVDドライブ の USB を PC にさす |  |
|2| DVDドライブ に 新しい DVD メディア を入れる |  |
|3| イメージを焼く 用意された編集物(ISO ファイルなど)を焼き込みます | Enter |
|4| 焼き込むイメージ | /media/shibata/HDCZ-UTL4KB/Clonezilla/v1/clonezilla-live-2019-09-09-01-img.iso Enter |
|5| イメージを焼く | Enter |
| | | |

## 3-15. リカバリディスク から復元する
複数の SSD に対して復元する場合に、先に復元した SSD を誤って上書きしないように
復元の際には、末尾に表示される SSD の シリアルNo を確認する。

| No | Screen | Action |
|--:|:--|:--|
|1| Clonezilla DVDを入れ、電源ON、すぐにF7を長押し |  |
|2| Prease select boot device: | 「UEFI: ASUS SDRW-08D2S-U B911」 |
|3| *Clonezilla live (Default settings, VGA 800×600) | Enter |
|4| 【警告】【全ての既存データは失われます】: | |
|5| Machine: Serval | |
|6| nvme0n1 (～末尾に SSD の シリアルNo) | Enter |
|7| 本当に続けてよろしいですか？ | y Enter |
|8| 本当に続けてよろしいですか？ | y Enter |
|9| DVD Eject | Enter |
|10| | Enter |
|11| 電源が落ちる | |
| | | |

## 3-16. Timeshift の スケジュール設定
Timeshift は システムのバックアップやリストアをする。

バックアップを手動で取得することも可能だが、スケジュールしておくといつの間にか取得する。

ホーム (/home/shibata) や ルートのホーム (/root) は 除外される。

最初はフルバックアップ、後は差分バックアップになる。

| Section | Item | Value |
|:--|:--|:--|
|Type|Select Snapshot Type | RSYNC |
|Location|Select Snapshot Location | HDCZ-UT I-O DATA sda1 |
|Schedule|Select Snapshot Levels | Daily Keep 14 |
|Users |User Home Directories | /home/shibata |
| | | /root |
|Filters |Include / Exclude Patterns | - /home/shibata/** |
| | | - /root/** |
|Misc |Date Format | %Y-%m-%d %H:%M:%S |
| | | |

## 3-17. Deja Dup の スケジュール設定
Deja Dup は ホーム (/home/shibata) のバックアップやリストアをする。

バックアップを手動で取得することも可能だが、スケジュールしておくといつの間にか取得する。

ルートのホーム (/root) のバックアップ取得は、パーミッションの関係で面倒。

ルートのホーム (/root) にはあまりファイルが無い為、バックアップを取らないことにした。

最初はフルバックアップ、後は差分バックアップになる。

| Item | Value |
|:--|:-----------------------|
|自動バックアップ | オン|
|バックアップするフォルダ|/home |
|無視するフォルダ|ゴミ箱 |
|保存場所|HDCZ-UTL4KB deja-dup |
|スケジュール|毎日 |
| |期限なし |
| | |

## 3-18. Visual Studio Code
Visual Studio Code の セットアップを済ませる。

[Visual Studio Code Remote Development(SSH) を使って C++、Java、Python を試してみた](https://qiita.com/ShinjiSHIBATA/items/fddda2a101cc7f309cce "Visual Studio Code Remote Development(SSH) を使って C++、Java、Python を試してみた")

## 3-19. 競技プログラミングツール

[kimiyukiさん の online-judge-tools](https://pypi.org/project/online-judge-tools/ "kimiyukiさん の online-judge-tools")

How to install の from PyPI を参考に、visual studio code の ターミナルからコマンドを実行。

![fig.2 install online-judge-tools](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/e96ea219-c4d6-6fac-e47e-4d45de5da60e.png "fig.2 install online-judge-tools")

ターミナル右配置で、結果が見やすくなる。

/home/shibata/workspace 配下に以下のファイルを配置する。

```Bash:p.sh
#!/bin/bash

# プログラミング言語によってはコンパイルエラー等
# スクリプトエラー発生時には処理を中断する
set -e

# Python

# ABC向け シェル
# 企業コンテスト向け シェル(第1引数:000 第2引数:a～)

# program folder
pgm="./Main/"

# コンパイル

# テストフォルダの削除
rm -rf test

# ゼロ埋め
z=`printf %03d $1`

# ABC ARC など コンテストID
conid=$(<conid.txt)

# ログイン
if [[ ! -f ~/.local/share/online-judge-tools/cookie.jar ]]; then
    oj login https://atcoder.jp/login
fi

# ダウンロード
if [ "000" != ${z} ] ; then
    oj dl https://atcoder.jp/contests/${conid}${z}/tasks/${conid}${z}_${2,,}
else
    oj dl https://atcoder.jp/contests/${conid}/tasks/${conid//-/_}_${2,,}
fi

# テスト
oj test -c "python3 ${pgm}a.py"

# pgmフォルダにコピー
if [ "000" != ${z} ] ; then
    cp -rf ${pgm}a.py ~/comp-prog/pgm/${conid}_Python/${conid}_${z}_${2^^}.py
else
    cp -rf ${pgm}a.py ~/comp-prog/pgm/${conid}_Python/`date +%Y_`${2^^}.py
fi
```

```Bash:conid.txt
ABC
```

予め、selenium を インストールしておく。

```Bash:install_selenium.sh
pip3 install selenium
```

[AtCoder：競技プログラミングコンテストを開催する国内最大のサイト](https://atcoder.jp/ "AtCoder：競技プログラミングコンテストを開催する国内最大のサイト")

AtCoder Beginner Contest 140 A問題 をやってみる。

a.py に プログラムを書く。

ターミナルにて以下を実行する。

```Bash:execute_p.sh
./p.sh 140 a
```
![fig.3 execute p.sh](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/aeef6635-0284-4671-8ec8-6fd0341eaca9.png "fig.3 execute p.sh")

Username と Password は セットアップ後の初回だけ聞かれる。

![fig.4 Username Password](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/ef3d28f9-ebee-6230-bb25-8f6b99017ed2.png "fig.4 Username Password")

これからは ./p.sh だけ実行すれば 最後までやってくれる。

![fig.5 success](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271734/14a05471-6197-8d9f-fd0b-f5378619f136.png "fig.5 success")

最後に「success」と出たらプログラムを提出する。

このツールには提出の機能もあるが、事故防止の為、提出は手動で行う。

#4. モディファイヤキー
「Shift, Alt」など他のキーとの組み合わせによって入力パターンを増やす元となるキー。

[Linuxで自由自在にキーバインドを拡張する方法を試したら簡単だった](https://ara1yu.hatenablog.com/entry/2017/02/11/185340 "Linuxで自由自在にキーバインドを拡張する方法を試したら簡単だった")

セミコロン ＋ A で HOME。

遠くのキーがキーバインドによってホームポジション崩さずに入力できる。

上記サイトと同じ設定する。

上記サイトに従って keymap を確認する。
xmodmap -pke

押したキーの keycode を確認する。
xev

キーバインドを設定するファイルを新規作成する。
vi ~/keybind

vi で内容を以下の通りとして保存する。

```.bat:keybind
keycode 47 = Mode_switch
keycode 251 = semicolon colon semicolon colon

keycode  26 = e E Up Up
keycode  38 = a A Home Home
keycode  39 = s S Left Left
keycode  40 = d D Down Down
keycode  41 = f F Right Right
keycode  42 = g G End End
keycode  43 = h H BackSpace BackSpace
keycode  44 = j J Return Return
keycode  45 = k K Delete Delete
```

keybindファイルを反映する。

xmodmap ~/keybind

keycode 43 の BackSpace が効かない (Visual Studio Code)。

テキストエディタでは既に有効である。

Visual Studio Code にて 

ファイル > ユーザー設定 > 設定

「keyboard.dispatch」のデフォルト値は「code」。

「keyboard.dispatch」の値を「keyCode」にする。

「keyboard.dispatch」の設定によりキー操作のディスパッチロジック制御が変わる。

上記設定により keycode 43 の BackSpace が有効になった。

xcapeのインストール

```.bat:install_xcape
sudo apt-get install git gcc make pkg-config libx11-dev libxtst-dev libxi-dev

git clone https://github.com/alols/xcape.git

cd xcape/

make

sudo make install
```

セミコロンを復活する。

xcape -e "Mode_switch=semicolon"

再起動すると設定が無効になる。

vi で以下の内容を末尾に追記する。

下記設定により再起動後もキーバインドの設定が有効になった。

vi ~/.bashrc

```.bat:.bashrc
if [ -f ~/keybind ]; then
    xmodmap ~/keybind
    count=`ps -ef | grep xcape | grep -v grep | wc -l`
    if [ $count -ne 0 ]; then
        #The process is alive.
        killall xcape
    fi
    xcape -e "Mode_switch=semicolon"
fi
```

後に、上記の追記内容は削除し、別のシェルファイルとした。
『6. 「.bashrc」ファイル と 「.bash_profile」ファイル について』を参照。

#5. Visual Studio Code の cache ファイル を 削除 する
日次バックアップのファイル数が多くなってきた。
起動時に Visual Studio Code の cache ファイル を削除する。

削除コマンドを書いたファイルを新規作成する。

vi ~/vscode_cache_clear

```.bat:vscode_cache_clear
rm -rf ~/.config/Code/Backups/*
find ~/.config/Code/Cache/ -type f -print0 |xargs -0 rm -rf
rm -rf ~/.config/Code/Cache/*
find ~/.config/Code/CachedData/ -type f -print0 |xargs -0 rm -rf
rm -rf ~/.config/Code/CachedData/*
rm -rf ~/.config/Code/CachedExtensions/*
find ~/.config/Code/"Code Cache"/ -type f -print0 |xargs -0 rm -rf
rm -rf ~/.config/Code/"Code Cache"/*
rm -rf ~/.config/Code/GPUCache/*
rm -rf ~/.config/Code/User/snippets/*.code-snippets
```

\*.code-snippets ファイルは、各プログラミング言語ごとのスニペットファイル (グローバルファイル) であり、一時的な作業ファイルとして使用している。実際の 各プログラミング言語ごとのスニペットファイル は同ディレクトリの  \*.json を使用している為、*.code-snippets ファイル を削除している。

ファイル作成時、パーミッションは通常 chmod 644 に相当する。
つまり作成者自身でさえも実行権限が無い為、下記を実行する。

chmod u+x ~/vscode_cache_clear

これにより作成者自身にのみ実行権限を与えた。
パーミッションは chmod 744 相当となる。

vi で以下の内容を末尾に追記する。

下記設定により起動時に Visual Studio Code の cache ファイル を削除するようになった。

vi ~/.bashrc

```.bat:.bashrc
if [ -f ~/vscode_cache_clear ]; then
    . ~/vscode_cache_clear
fi
```

後に、上記の追記内容は削除し、別のシェルファイルとした。
『6. 「.bashrc」ファイル と 「.bash_profile」ファイル について』を参照。

#6. 「.bashrc」ファイル と 「.bash_profile」ファイル について
これまでに vi で「.bashrc」ファイルに設定を追記してきた。
追記した設定が反映されるタイミングと、「.bash_profile」ファイルについて以下に記述する。

コマンドプロンプト は、Ubuntu では 端末 (ターミナル) と呼ぶ。
端末を起動した時に、呼ばれるのは「.bashrc」ファイルである。

一般的にログイン時に呼ばれるのは、「.bash_profile」ファイルであり、「.bashrc」ファイルでない。

ここでは、ログインシェルとして /bin/bash を使用している事を前提としている。

端末にて「chsh」と入力すると、以下の要領で標準設定値が表示される。
ログインシェル [/bin/bash]:

ここで使用したいログインシェルを指定してエンターキーを押すと、ログインシェルを指定することが出来る。
確認したいだけなので、ここは指定せず、そのまま端末を×ボタンで閉じる。

ログイン後の初回起動アプリが、Firefox (ウェブブラウザ) だったら、gedit (テキストエディタ) だったら、
その時には、「.bashrc」ファイルに指定した内容は実行されない。

『4. モディファイヤキー』や『5. Visual Studio Code の cache ファイル を 削除 する』は
「.bashrc」ファイルにて指定した為、ログイン時には実行されないことになる。

これをなんとかしたかった。

そこで「.bash_profile」ファイルにて指定する事により、
『4. モディファイヤキー』や『5. Visual Studio Code の cache ファイル を 削除 する』を
ログイン時に必ず実行しようと思っていた。

ところが「.bash_profile」ファイルにて指定しても
『4. モディファイヤキー』や『5. Visual Studio Code の cache ファイル を 削除 する』は
ログイン時に実行されなかった。

「.bashrc」ファイル と 「.bash_profile」ファイルの関係は容易ではない。
「.bash_profile」ファイルは、環境構築時には元々存在しなかった。

「.bash_profile」ファイルは諦めて、作成した「.bash_profile」ファイルは削除した。
『4. モディファイヤキー』や『5. Visual Studio Code の cache ファイル を 削除 する』にて
「.bashrc」ファイルに追記した内容を削除した。

ログイン時に設定を有効にする為には、以下の方法がある。

ユーザー名\_profile (好きなファイル名で良い) を新規作成する。
vi ~/ユーザー名\_profile

```.bat:ユーザー名_profile
if [ -f ~/keybind ]; then
    xmodmap ~/keybind
    count=`ps -ef | grep xcape | grep -v grep | wc -l`
    if [ $count -ne 0 ]; then
        #The process is alive.
        killall xcape
    fi
    xcape -e "Mode_switch=semicolon"
fi

if [ -f ~/vscode_cache_clear ]; then
    . ~/vscode_cache_clear
fi
```

保存する。

パーミッションを chmod 744 相当とする。

chmod u+x ~/ユーザー名\_profile

画面下左端の、Windowsでいうところの「スタート」ボタン、
Ubuntu 18.04 の「アプリボタン」(3行3列の9つ丸印のボタン)を押す。

「検索ワードを入力…」に「session」という検索ワードを入力する。
「自動起動するアプリケーションの設定」というものが表示されるので起動する。

追加ボタンを押す。
以下の情報を入力する。

名前「ユーザー名\_profile」(好きな名前で良い)

コマンド「/home/ユーザー名/ユーザー名\_profile」
(好きなファイル名で良い、先に新規作成のファイルパスを指定)

説明「ユーザー名\_profile」(好きな内容で良い)

以上により
ログイン後の初回起動アプリが、Firefox (ウェブブラウザ) 、gedit (テキストエディタ)でも
『4. モディファイヤキー』や『5. Visual Studio Code の cache ファイル を 削除 する』の
内容が有効となる事を確認した。

# 終わりに
仮想端末で一通り経験していた為か、違和感なく入ることができた。

今のところ極めて快適に使用できていて、System76のPCを購入して良かったと思っています。