Apple M1 マシンで快適にUbuntuを使う

#MacBook Air M1買いました
一般コンシューマ向けのARM64マシンとしては最強との呼び声が高いApple M1チップを搭載したMacBook Airですが、とある理由で買ってしまいました。
今回は、ARM64を最大限生かした使い方を色々書いていきたいと思います。
##Ubuntuを使うには
Apple M1でUbuntuを使うには以下の手法があります（2021 1/23時点）

- ネイティブで動かす  https://corellium.com/blog/linux-m1
 - Pros. 
     - ネイティブで動作させるので、macOSの色々なプロセスがない
 - Cons.
     - ストレージはUSB経由
     - （なんか怖そう）

- Parallels  https://www.parallels.com/jp/
 - Pros. 
     - みんな大好きParallels
     - USBが使える
     - Windowsも使える
     - 安心
 - Cons.
     - まだParallels用のARM64のドライバがない
     - 有料（今はまだ無料）

- Docker  https://docs.docker.com/docker-for-mac/apple-m1/
 - Pros. 
     - みんな大好きDocker
     - 安心
     - これまでのDockerfileの資産が流用できる
 - Cons.
     - 基本的にデバイスが全然使えない
   
という感じですが、まだ完璧なソリューションはないというのが実情ではないでしょうか。

ちなみにDockerを用いたものは今回はUSBなどのデバイスが使えないということでパスします。ただ、xrdpを用いたX Window付きで便利にdockerを使用できるdockerfile一式を用意しましたので、どうぞお使いください。
https://github.com/tatsuyai713/ROS_on_M1_Mac_Docker

##ParallesでUbuntuを使用する際の環境を用意する
せっかくParallelsを使うのであれば、３本指で横にシュッとするだけでデスクトップをUbuntuに切り替えるみたいなことができれば最高です（ちなみに上のDockerのやつを使ってできます）。
ただ、上に書いた通り、Parallelsはまだドライバがなく、なんと解像度が固定となってしまっており、全然快適に使えません。

ということで、今回は３本指で横にシュッとするだけでデスクトップをUbuntuに切り替えるということを目標に環境構築をしてみたいと思います。

###UbuntuをParallelsに入れる
まず、ParallelsにUbuntuをインストールする方法ですが、別にこれといって新しいこともないので、すっ飛ばします。

###Ubuntu Desktop環境を入れる
```console
sudo apt update
sudo apt install ubuntu-desktop
```

以上です。（言わずもがな）
rebootしたらもうDesktop環境が出来上がりです。
###UbnutuにParallels Toolをインストール....できない（2021 1/23現在）
はい、できません。
なので、ここからが本番です。

###Ubuntuにxrdpをインストール

```console
sudo apt install xrdp
```
ここでIPアドレスを確認しておきます。が、ifconfigがそもそも入っていないので、不便なので入れておきます。

```console
sudo apt install net-tools
```

IPアドレスを確認すると、おそらく10.211.55.xになっているかと思います。

これを確認して、一旦rebootしておきます（ログインはしない）

###RDPクライアントのインストール（日本語キーボードの人）
ここから日本語キーボードを使用している人は非常に重要なのですが、RDPクライアントによってキーボードの挙動が変わってきてしまいます。
英字キーボードの場合は、MicrosoftのリモートデスクトップクライアントをApp Storeから入れれば終わりです。
日本語キーボードの人はなんと、Microsoftのリモートデスクトップクライアントでは、色々いじってもどうしても”_”を入力することができませんでした。
ということで、App StoreからParalles ClientというRDP Client機能を持つParallelsのAppを使用します。

ただし、このままでもキーボードはUSキーボードと認識してしまうため、以下の内容のファイルを作成し、実行します。

```console
vi ~/keyboard-jp.sh
```

```shell
#!/bin/bash
  
{
echo '[Desktop Entry]'; \
echo 'Type=Application'; \
echo 'Name=SetJPKeyboard'; \
echo 'Exec=setxkbmap -layout jp'; \
echo 'OnlyShowIn=LXDE'; \
} > /etc/xdg/autostart/setxkbmap.desktop; \

```

```console
chmod +x ~/keyboard-jp.sh
sudo ~/keyboard-jp.sh
sudo reboot
```

これで次回RDPで接続時から日本語キーボードが使用できます（もちろんParallels Clientであれば”_”の入力もできます。

###見た目を標準のUbuntuのようにする
RDPで接続してみると分かるのですが、通常使用している時のUbuntuの画面と異なることがわかります。
これは各種設定が、標準のものになっていないことから発生します。
この設定を変えるために以下のgnome-tweak-toolを使います。

```console
sudo apt install gnome-tweak-tool
```

左上のActivityをクリックするとDockが現れるので、
"Tweaks"で検索すると、gnome-tweak-toolが使えます。

まずApperance->ApplicationsをYaru-darkにします。
カーソル、アイコン、サウンドもYaruにしておきましょう。

続いてデフォルトのDockなどの表示を変更していきます。
Extensionsの中にある
Desktop IconsとUbuntu DockをONにしましょう。

さらにこのままでは、いつものDockの表示と異なります。
そこで、以下のスクリプトで一括で元に戻してしまいます。

```console
vi ~/dock.sh
```

```shell
#!/bin/bash
gsettings set org.gnome.shell.extensions.dash-to-dock transparency-mode 'FIXED'
gsettings set org.gnome.shell.extensions.dash-to-dock shortcut-text '<Super>q'
gsettings set org.gnome.shell.extensions.dash-to-dock apply-custom-theme false
gsettings set org.gnome.shell.extensions.dash-to-dock apply-glossy-effect true
gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'focus-or-previews'
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-9 ['<Super>9']
gsettings set org.gnome.shell.extensions.dash-to-dock custom-background-color false
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-1 ['<Shift><Super>1']
gsettings set org.gnome.shell.extensions.dash-to-dock multi-monitor false
gsettings set org.gnome.shell.extensions.dash-to-dock height-fraction 0.90000000000000002
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-1 ['<Ctrl><Super>1']
gsettings set org.gnome.shell.extensions.dash-to-dock isolate-workspaces false
gsettings set org.gnome.shell.extensions.dash-to-dock shift-click-action 'launch'
gsettings set org.gnome.shell.extensions.dash-to-dock shortcut-timeout 2.0
gsettings set org.gnome.shell.extensions.dash-to-dock show-delay 0.25
gsettings set org.gnome.shell.extensions.dash-to-dock custom-theme-shrink true
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-2 ['<Shift><Super>2']
gsettings set org.gnome.shell.extensions.dash-to-dock show-windows-preview true
gsettings set org.gnome.shell.extensions.dash-to-dock show-trash false
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-2 ['<Ctrl><Super>2']
gsettings set org.gnome.shell.extensions.dash-to-dock autohide-in-fullscreen false
gsettings set org.gnome.shell.extensions.dash-to-dock icon-size-fixed true
gsettings set org.gnome.shell.extensions.dash-to-dock scroll-action 'switch-workspace'
gsettings set org.gnome.shell.extensions.dash-to-dock shift-middle-click-action 'minimize'
gsettings set org.gnome.shell.extensions.dash-to-dock custom-theme-running-dots-border-color '#e95420'
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-3 ['<Shift><Super>3']
gsettings set org.gnome.shell.extensions.dash-to-dock pressure-threshold 100.0
gsettings set org.gnome.shell.extensions.dash-to-dock hide-delay 0.20000000000000001
gsettings set org.gnome.shell.extensions.dash-to-dock show-apps-at-top false
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-3 ['<Ctrl><Super>3']
gsettings set org.gnome.shell.extensions.dash-to-dock show-favorites true
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-4 ['<Shift><Super>4']
gsettings set org.gnome.shell.extensions.dash-to-dock show-running true
gsettings set org.gnome.shell.extensions.dash-to-dock force-straight-corner false
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-1 ['<Super>1']
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-4 ['<Ctrl><Super>4']
gsettings set org.gnome.shell.extensions.dash-to-dock running-indicator-style 'DOTS'
gsettings set org.gnome.shell.extensions.dash-to-dock hotkeys-overlay true
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-5 ['<Shift><Super>5']
gsettings set org.gnome.shell.extensions.dash-to-dock animation-time 0.20000000000000001
gsettings set org.gnome.shell.extensions.dash-to-dock custom-theme-running-dots-color '#e95420'
gsettings set org.gnome.shell.extensions.dash-to-dock running-indicator-dominant-color false
gsettings set org.gnome.shell.extensions.dash-to-dock hotkeys-show-dock true
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-5 ['<Ctrl><Super>5']
gsettings set org.gnome.shell.extensions.dash-to-dock show-show-apps-button true
gsettings set org.gnome.shell.extensions.dash-to-dock animate-show-apps true
gsettings set org.gnome.shell.extensions.dash-to-dock unity-backlit-items false
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-2 ['<Super>2']
gsettings set org.gnome.shell.extensions.dash-to-dock custom-theme-running-dots-border-width 0
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-6 ['<Shift><Super>6']
gsettings set org.gnome.shell.extensions.dash-to-dock shortcut ['<Super>q']
gsettings set org.gnome.shell.extensions.dash-to-dock customize-alphas false
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-3 ['<Super>3']
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-6 ['<Ctrl><Super>6']
gsettings set org.gnome.shell.extensions.dash-to-dock autohide true
gsettings set org.gnome.shell.extensions.dash-to-dock show-mounts true
gsettings set org.gnome.shell.extensions.dash-to-dock minimize-shift true
gsettings set org.gnome.shell.extensions.dash-to-dock dock-position 'LEFT'
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-7 ['<Shift><Super>7']
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-10 ['<Super>0']
gsettings set org.gnome.shell.extensions.dash-to-dock custom-theme-customize-running-dots true
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-4 ['<Super>4']
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-7 ['<Ctrl><Super>7']
gsettings set org.gnome.shell.extensions.dash-to-dock background-opacity 0.69999999999999996
gsettings set org.gnome.shell.extensions.dash-to-dock middle-click-action 'launch'
gsettings set org.gnome.shell.extensions.dash-to-dock extend-height true
gsettings set org.gnome.shell.extensions.dash-to-dock dock-fixed true
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-8 ['<Shift><Super>8']
gsettings set org.gnome.shell.extensions.dash-to-dock max-alpha 0.80000000000000004
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-5 ['<Super>5']
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-8 ['<Ctrl><Super>8']
gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 48
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-9 ['<Shift><Super>9']
gsettings set org.gnome.shell.extensions.dash-to-dock intellihide true
gsettings set org.gnome.shell.extensions.dash-to-dock require-pressure-to-show true
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-6 ['<Super>6']
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-9 ['<Ctrl><Super>9']
gsettings set org.gnome.shell.extensions.dash-to-dock bolt-support true
gsettings set org.gnome.shell.extensions.dash-to-dock scroll-switch-workspace true
gsettings set org.gnome.shell.extensions.dash-to-dock preferred-monitor -1
gsettings set org.gnome.shell.extensions.dash-to-dock min-alpha 0.20000000000000001
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-7 ['<Super>7']
gsettings set org.gnome.shell.extensions.dash-to-dock app-ctrl-hotkey-10 ['<Ctrl><Super>0']
gsettings set org.gnome.shell.extensions.dash-to-dock activate-single-window true
gsettings set org.gnome.shell.extensions.dash-to-dock intellihide-mode 'ALL_WINDOWS'
gsettings set org.gnome.shell.extensions.dash-to-dock isolate-monitors false
gsettings set org.gnome.shell.extensions.dash-to-dock background-color '#ffffff'
gsettings set org.gnome.shell.extensions.dash-to-dock app-hotkey-8 ['<Super>8']
gsettings set org.gnome.shell.extensions.dash-to-dock app-shift-hotkey-10 ['<Shift><Super>0']
gsettings set org.gnome.shell.extensions.dash-to-dock hot-keys true
```

```console
chmod +x ./dock.sh
./dock.sh
```

これで、Dockの見た目もいつもようになりました。

#最後に
ここからの設定は各自でいつものUbuntuのようにやれば大丈夫です。
日本語化の方法などは皆さんいろいろな記事で書かれているので、省略します。

最後に使い方をまとめると、
1. ParallelsでUbuntuを起動
2. ログインはせずにWindowは放置
3. Parallels Clientで接続する（この時Macがパスワードを読み込もうとして、入力できない感じになりますが、一度Mac内のパスワードを確認してキャンセルすれば入力できます。なので、パスワードは保存することをお勧めします）
4. 全画面で表示する
5. ３本指でシュッとすればデスクトップをMacとUbuntuで切り替えられます

という感じで、まだ不完全なParallelsでも快適にUbuntuを使うことができるようになります。しかもUSBも使用できるので、USBデバイスをUbuntuで使いときなどはこの方法はかなり使えるのではないでしょうか。

次回は、この環境を最大限活かしたロボット開発方法について書きたいと思います。