Manjaro LinuxをHyper-VにインストールしてRDP接続で使う

# 環境
Windows 10 Pro 1909 build:18363.778
Manjaro Linux 19.0.2(xfce) [^1]

# 手順
### Hyper-V マネージャーで仮想マシンの新規作成

新規仮想マシンの作成ウィザードで適当に作る。

|項目|設定|
|:--|:--|
|世代|第2世代|
|メモリ|4096MB（お好みで。動的メモリも好きな方で）|
|NIC|インターネットに接続可能な仮想スイッチ|
|仮想HDD|127GB（お好みで）|
|インストールメディア|manjaro-xfce-19.0.2-200311-linux54.iso|

作成までしたら**起動する前**に以下の設定を変更しておく。

- セキュアブートのチェックを外して無効にする **※重要**
- 仮想プロセッサ数をお好みで変更する
- その他はお好きなように


### 仮想マシンの起動・インストール

インストールメディアを起動し、メニューが開いたらそのまま`Enter`でbootを選ぶ。（言語設定とかできるけど、ここでやってもそんなにメリットが無いのでそのままでいい）

起動中に以下の画面のような表示が出たところで止まってしまう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86855/3e30094e-2d3a-f2ce-aff9-3b0a028651e3.png)

これディスプレイドライバが対応していないのが原因らしい。
ここで`Ctrl+Alt+F2`を押下すると、以下のようなコンソールのログイン画面に切り替えられる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86855/ffe2e8a5-54a0-54ae-0c3c-221290f745be.png)

書いてあるとおり、ログイン名、パスワードは共に`manjaro`でログインできる。
ログインしたら、Pacman（標準パッケージマネージャ）を使ってディスプレイドライバをインストールする。

```sh
$ sudo pacman -Sy
$ sudo pacman -S xf86-video-fbdev
$ sudo systemctl start lightdm
```

途中で入力を求められたら適当に`Enter`とか`y`とかで。
起動時の最初のメニューで言語を日本語にしてると、フォントが入っていなくて文字化けするっぽいが、ここでは無視してエンター連打とかで進んじゃって良いと思う。

無事GUI画面に切り替わったら「Launch installer」とか「インストールの開始」ボタンを押して、画面の指示に従ってインストールする。

## 初回起動

インストール完了後に再起動をかけると、インストール先の仮想HDDにはインストール時に使ったドライバが含まれていないため、またディスプレイドライバの問題が起きる。

インストール時の作業と同様にCUI画面にエラーが表示されて止まる事や、以下のようなノイズの入った画面で止まる場合がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86855/e6903fc3-bab7-d602-3443-98a7b73ad70a.png)

とりあえず落ち着いて`Ctrl+Alt+F2`を押下すればコンソールのログイン画面が出るので、ログインしてドライバをインストールする。（今度は**インストール時に作成したユーザー名とパスワード**でログインする事に注意）

まず

```sh
$ sudo pacman -Sy
```

を実行すると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86855/642068e7-02ac-459f-3fab-ff90d20f44f5.png)

インストール時に日本語を選択しているとこんな感じで文字化けすると思われる。
`[sudo]`の行で入力待ちになってたら、sudoのパスワードを要求されているので、インストール時に設定した**管理者アカウントのパスワード**を入れて適当に進む。

この場合は以下のようにディスプレイドライバと一緒に日本語フォントをインストールしてやる。
インストール時に出てくる入力要求とかは適当に`Enter`とかでよい🙆‍♂️

```sh
$ sudo pacman -S noto-fonts-cjk
$ cd /etc/fonts/conf.d
$ sudo ln -s ../conf.avail/70-noto-cjk.conf
$ sudo pacman -S xf86-video-fbdev
$ sudo systemctl start lightdm
```

とりあえず、これで起動まではいけるハズ🙆‍♂️

# 初期設定

### リポジトリのミラーリストの更新

お近くのリポジトリを使うようにする。
利用可能なリポジトリの接続速度をチェックしに行くため、ちょい時間がかかる。

```sh
$ sudo pacman-mirrors --fasttrack
```

### パッケージのアップグレード

登録済みのパッケージを最新にする。
これもまぁまぁ時間がかかる。
ミラーリストを更新してからやった方が良いでしょう🙆‍♂️

```sh
$ sudo pacman -Syyu
```

### AURヘルパー(yay)のインストール

必要なら。
自分で`makepkg -si`とかやるなら要らない。

```sh
$ sudo pacman -S yay
```

### 日本語名ディレクトリの変更

`$HOME`以下に「ダウンロード」とか「ビデオ」とかの日本語名ディレクトリがあるのが気持ち悪い（かつCUIで扱いづらい）ので、英語名に変更したい。

`~/.config/user-dirs.locale`を任意のテキストエディタ開く（ここではnanoを利用）と、

```~/.config/user-dirs.locale
ja_JP
```

となっているので、

```~/.config/user-dirs.locale
C
```

に変更して保存する。


```sh
$ rm ~/.config/user-dirs.dirs
$ LC_ALL=C xdg-user-dirs-gtk-update
```

で`~/.config/user-dirs.dirs`を削除してから更新をすると、英語名のディレクトリが作成される。

ここまで完了したら一度ログアウトしてからログインしなおして、ファイルマネージャー等で日本語ディレクトリを削除してやれば完成。

## 日本語入力

[日本語の設定（公式）](https://wiki.manjaro.org/index.php?title=%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E8%A8%AD%E5%AE%9A)に手順は書いてあるが、いくつか問題があった。

- 「ロケールの変更」の手順は不要。（おそらくインストール時に日本語を選択したからだと思う）
- `yaourt`はもう開発停止になってる。（大体としてyayを使うことになると思う）
- `ibus-qt`はpacmanではインストールできない。（[AURにある](https://aur.archlinux.org/packages/ibus-qt/)のでyayならいける）
- 個人な事情があってmozcを使いたい。（普段Google日本語入力＋dvorak入力のカスタマイズをしているので）
- ibusでなくfcitxを使う場合、rdp接続した時にちゃんと起動してくれない。

また、Hyper-Vの「仮想マシン接続」ではちゃんと動いてくれるのに、xrdpをインストールしてWindows 10の標準リモートデスクトップクライアントから接続した場合に日本語入力ができずに色々試行錯誤した結果、以下の手順に落ち着いた。

### フォント

これは公式の手順にも載ってる通り。

```sh
$ sudo pacman -S ttf-sazanami
```

### インプットメソッド・エンジン

AURからインストールするためyayを利用。

```terminal
$ yay -S ibus-mozc
$ yay -S ibus-qt
```

### 設定

公式にはこう書けとあるが、

```~/.xprofile
export LANG="ja_JP.UTF-8"
export XMODIFIERS="@im=ibus"
export XMODIFIER="@im=ibus"
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export DefaultIMModule=ibus
ibus-daemon -drx
```

```~/.bashrc
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
```

これだとRDP接続時に上手く動かない。

色々試した結果、環境変数の設定については`/etc/environment`と`~/.pam_environment`に記述してやることで上手くいった。これが正解なのかわからないが、調べているうちにどこかで見かけてやってみたら上手くできた、という事で、とりあえずヨシとしている。（検索しながら色々試しているうちに解決したため、どこでこの方法を見つけたのかは失念してしまった…）

それぞれ

```sh
$ sudo nano /etc/environment
$ nano ~/.pam_environment
```

で

```
LANG=ja_JP.UTF-8
XMODIFIERS=@im=ibus
XMODIFIER=@im=ibus
GTK_IM_MODULE=ibus
QT_IM_MODULE=ibus
DefaultIMModule=ibus
```

を記述。

```sh
ibus-daemon -drx
```

の部分はibusデーモンの起動だが、これはDEの自動開始に登録すればとりあえずOK。

xfceのメニューから「設定」－「セッションと起動」を開き、「自動開始アプリケーション」タブで「+追加」を押して、自動開始するアプリケーションとして登録しておく。（名前は適当でコマンドに「ibus-daemon -drx」）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86855/0a4bc83d-fb5d-b782-7c84-6c0fe64197cf.png)

やり方が分かる場合は`~/.config/autostart`に適当にファイルを作っても良いと思う。

ここまでやってログアウトし、再度ログインすれば日本語入力できるはず。
初期設定では「Super+Space」が切り替えに割り当てられているっぽいので、気に食わない場合は`ibus-setup`を起動して適当に変更。


## xrdp


### インストール

ローカルIPを固定したい場合は適宜IPを降ってから作業する。
基本はArch Linuxの公式に載っている通り[^2]だが、AURのため`yay`を使ってインストールする。

```sh
$ yay -S xrdp
$ yay -S xorgxrdp-git
```

### 設定

```sh
$ sudo nano /etc/X11/Xwrapper.config
```

```/etc/X11/Xwrapper.config
allowed_users=anybody
```

### サービスの有効化・起動

```sh
$ sudo systemctl enable xrdp.service
$ sudo systemctl enable xrdp-sesman.service
$ sudo systemctl start xrdp.service
$ sudo systemctl start xrdp-sesman.service
```

ここまでやってWindows 10の「リモートデスクトップ接続（mstsc.exe）」から接続してみると、ログイン画面が出る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86855/e9d6d42f-526c-f41c-f521-162eec5f7014.png)

そのままユーザー名とパスワードを入力するとちゃんと接続できた。
また、日本語入力も問題なくできた🙆‍♂️

### 英語配列キーボードなのにキーの割り当てが異なる問題の対応

ただし、英語配列キーボードを使っているとうまく認識してくれない。（`=`を入力しても`^`になってしまう等）
どうやら「リモートデスクトップ接続」が送っているキーコードに問題があるようだが、調べて出てくるレジストリをいじる方法等を試しても解決しない。

ちょっと強引かもしれないが、xrdp側で日本語配列キーボードを認識できないようにする事で対応。

```sh
$ sudo nano /etc/X11/xrdp/xrdp_keyboard.ini
```

でキーボード設定ファイルを開き、`rdp_layout_jp`のエントリを全てコメントアウトしてしまう。

```diff:/etc/X11/xrdp/xrdp_keyboard.ini
-rdp_layout_jp=0x00000411
-rdp_layout_jp=0xe0010411
-rdp_layout_jp=0xe0200411
-rdp_layout_jp=0xe0210411
+;rdp_layout_jp=0x00000411
+;rdp_layout_jp=0xe0010411
+;rdp_layout_jp=0xe0200411
+;rdp_layout_jp=0xe0210411
```

とりあえずこれで上手くいっている。

## Windows環境とのファイル共有（samba）

samba本体はインストールに含まれているため、基本的な設定を行う。

### 設定ファイルのインストール

```sh
sudo pacman -S manjaro-settings-samba
```

で`/etc/samba/smb.conf`かインストールされる。
とりあえずそのままでも使えるが、必要に応じて設定を変更する。

### 共有ユーザー・パスワードの設定

専用の共有ユーザーを作る場合は、あらかじめ`useradd`などで追加しておく。
普段利用するユーザーをそのまま利用する場合でも、パスワードは別管理なので設定が必要。

```sh
sudo pdbedit -a $USER #または共有専用のユーザー名
```

でパスワードを登録。

### サービスの有効化

`smb.service`と`nmb.service`を有効化・起動しておく。

```sh
sudo systemctl enable smb.service
sudo systemctl enable nmb.service
sudo systemctl start smb.service
sudo systemctl start nmb.service
```

ここまでやって一度ログオフし、再ログインすればとりあえず共有が使えるようになっている。

### thunarプラグインのインストール

thunar上でディレクトリを右クリック→プロパティの画面で「共有」タブを表示して設定できるようにする。

```sh
sudo pacman -S thunar-shares-plugin
```

インストール後、再ログインしたら使えるようになっている。


## 他

色々調べていると、`/etc/X11/Xwrapper.config`に`needs_root_right=auto`やら`needs_root_right=yes`を追加するとか、`~/.xinitrc`を編集して`--exit-with-session`を削除するとか、その他諸々の設定方法が出てくるが、とりあえず新規で作った環境で以上の設定だけで上手く動いているっぽい。

何か問題があれば適宜修正したい。


[^1]: KDEを使ってみようかと思ったが、どうやらKDE Plasmaはxrdpがちゃんと動かない不具合があるっぽい（どこで見たか忘れたが、実際試してみたら動かなかった）のでxfceにした。
[^2]: [Xrdp - Arch Linux](https://wiki.archlinux.jp/index.php/Xrdp)