CentOS7 の minimal に rdesktop をいれて Windows にリモートデスクトップしてみた


## やりたいたこと
いわゆるシンクライアント。
ラズパイや超小型PCなんかを使って遠隔地にある Windows マシンに接続し作業をする。
できればPCにログインしたら、自動かつ無認証で Windows で作業ができる。
Windows から抜けたら PC も自動でシャットダウンする。

## 必要なもの
* ホスト: リモートデスクトップが利用できる Windows(Pro 以上) マシン
* ゲスト: 物理マシン or 仮想マシン (VirtualBox)

## 準備
* ホストに他のマシンからリモートデスクトップできるか確認しておく
* CentOS7 minimal をダウンロードしてゲスト側にインストールしておく
* yum upgrade, yum update をやっておく (結構時間がかかる)
* RDP 用で使うためのユーザをゲスト側に追加しておく (ホストのユーザと一致させる必要はない)

## 割愛
* VirtualBox の使い方
* ブートメディアの作り方
* BIOS の設定の変更方法
* インストール方法
* ネットワークの上げ方 (nmcli でググると良いです)
* 一般的なツールの使い方
* rdesktop の細かい使い方

## 構築

### 必要なものをインストールする
`yum install -y openssl openssl-devel gcc wget autoconf libX11-devel vlgothic-*`

### X Window System 周りをインストール
`yum groupinstall -y "X Window System" "GNOME Desktop"`

### rdesktop をインストールする

#### ダウンロード
今回は [公式](https://github.com/rdesktop/rdesktop/releases/) にある最新版を使った。
yum とかはないらしい。
git でも良いけど、シンプルなやつで。
`wget https://github.com/rdesktop/rdesktop/releases/download/v1.8.3/rdesktop-1.8.3.tar.gz`

#### 解凍
`tar xf rdesktop-1.8.3.tar.gz`

#### コンパイルとインストール
```
cd rdesktop-1.8.3
autoconf
./configure --prefix=/usr
make
make install
```

ちゃんと必要なものをインストールしてあれば、特に問題なくインストールできるはず。
もし途中で失敗したら、都度エラーメッセージで検索して解決する(大体はインストールしそこなってるものがある)。
インストールが完了すると `/usr/bin/rdesktop` ができている。

### X Window で CentOS を立ち上げる
これをやっておかないと、描画できずに失敗してしまう。
`systemctl set-default graphical.target`
再起動 (`shutdown -r now`) するとグラフィックモードで立ち上がる。

これでひとまずホストの構築は完了。


## リモートデスクトップをしてみよう！
ゲストに RDP 用ユーザでログインしたら、左上のアプリケーションから「端末」を起動し、以下のコマンドを打ち込む。
`rdesktop -k ja -f -x lan -a 16 -N 192.168.0.2 -u rdpuser -p rdppass`
以下のものはそれぞれ自分の環境に合わせること。
* `192.168.0.2`: ホストの IP
* `rdpuser`: ホストのログインユーザ
* `rdppass`: ホストのログインパスワード
これフルスクリーンで立ち上がったはず。
IP さえあっていればリモート接続されて、ユーザやパスワードが間違っていてもログイン画面には到達できるはず。
できなかった場合は、インストールに失敗しているか、 Windows マシンがリモートデスクトップを利用できる状態になっていないか。

なお、リモートデスクトップを中断する場合は Windows のシャットダウンのボタンのところから「ログオフ」または「切断」を行う。

## ユーザに CentOS を意識させないようにする

### リモートデスクトップ中に画面上部にマウスを移動するとゲストの画面が出るのを止める
「アプリケーション」 > 「ユーティリティ」 > 「Tweak Tool」 > 「トップバー」
「アプリケーションメニューを表示する」を 「オフ」

### シェルを作成
ゲストに RDP を利用するユーザでログインし、 `vi ~/autordp` を発行して以下のシェルを作る。

```autordp
sleep 3
/usr/bin/rdesktop -k ja -f -x lan -a 16 -N 192.168.0.2 -u rdpuser -p rdppass
/sbin/shutdown -h now
```

### 実行権限を付与
`chmod +x ~/autordp`

### 自動起動するようにする
画面左上の「アプリケーション」 > 「システムツール」 > 「自動移動するアプリケーション」 > 「追加」
「コマンド」の右にある「参照」で「ホーム」にある `autordp` を指定する。

### shutdown を一般ユーザでも行えるようにする
ゲストで RDP ユーザからログオフし、 root でログインする。
`visudo` で下の方に以下の記述を追加する。
`guestuser1 ALL=(ALL) PASSWD: ALL, NOPASSWD: /sbin/shutdown`
`guestuser1` は、ゲストの RDP 利用ユーザ。
複数が使うことを想定するならユーザグループを設定すると管理が楽に。

### 試してみる
ゲストに RDP ユーザでログインし、数秒待ったのちに Windows にログインできてるか確認する。
もし、 Windows の画面は表示されるものの、ファイル操作等ができないという場合は、 `autordp` の `sleep 3` の数字を少し増やして見る。
理由は詳しく調べてないけど、グラフィカルデスクトップが起動してすぐに RDP すると、背景画像みたいになって操作が不能になる場合がある。

## 蛇足
リモートデスクトップ周りはライセンスが色々とややこしいので、各々違反にならないように調査した方が良いです。
特に仕事で使う際は厳しく決められていた気がするのでよくよく注意が必要。

今回は実験するにあたってまず VirtualBox で試してから、それを元に実際に小型 PC を使って構築した。
なので「必要なもの」欄に仮想マシンも書いておいた。
VirtualBox 上のゲストから VirtualBox のホストにリモートデスクトップするという愚行はしないように(ここでもホストとかゲストとかややこしい)。

`yum upgrade` をやっているので、試した CentOS のバージョンは `7.3.1611` だった。

今回は格安ベアボーンに SSD(128G) とメモリ(2G) で 1.8万 程度で完成した。