VultrのLinux VPSでWindowsアプリを動かす

# はじめに
https://qiita.com/toyolab/items/44bb2fccf0630b144833

この記事の内容が古くなったので、タイトルを変えて現在使っている方法をメモしておく。

VPSとしてVultrを使うところは同じだが、以下を変更した。
* OSをUbuntuからDebianに変更
* AnyDeskをやめてxrdp+x11vncでリモートデスクトップを実現

UbuntuもDebianから派生したOSなので、似たようなものだが、Debianの方がアップデートも多くなく安定した感じなので、こちらを採用。

以前使っていたAnyDeskはやっぱり商用ソフト、しばらく使っていると商用利用だからライセンス購入するよう言われたので、使用中止。xrdp+x11vncで代用できることがわかったので、こちらを採用。

# VultrでVPSを作る
Vultrでアカウント作って、「Deploy New Server」でサーバー作成。
* Choose Server → Cloud Compute 
* CPU → High Frequency
* Server Location → Tokyo
* Server Image → Debian 11
* Server Size → 32GB NVMe
* Add Auto Backups → OFF

この順で選んでいくと、月$6のサーバーができる。以前はサーバーの仕様ごとにベンチマークがあり、パフォーマンスの比較ができたのだが、今はなくなっている。

月$6のサーバーはいくつか選べるが、その違いは以下を参照（独自の調査なので参考まで）。

https://qiita.com/toyolab/items/834ee35343858dc7b2d4


# サーバーの設定
サーバー作成した直後は、rootのパスワードが割り当てられているだけなので、サーバーの設定ページから「View Console」でコンソールを開いてrootでログイン。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131169/ac3776a1-aa16-b564-c0cd-c7dbb6170136.png)

rootの初期パスワードは長くで複雑だが、クリップボードにコピーできるので、それをConsole画面のメニューでペーストすれば間違いない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131169/739d7d25-2a0d-77e4-5901-ae90f453a9ed.png)

とりあえずログインできたら、ユーザーアカウントを作っておく。
以下は、「user1」というアカウントを作ってroot権限を与えるケース。
```
$ adduser user1
$ gpasswd -a user1 sudo
```

以前はswapの作成もしなくてはいけなかったが、今回のサーバーでは最初からできているので、ほかに設定する必要はない。

初期設定でsshのポートだけ開いているので、sshでファイルのアップロードとかできるが、最終的にxrdpで接続すると、コピペでファイルのアップロードができるので、sshも不要になる。（ただし、リモートデスクトップの接続を暗号化したいなど、セキュリティにこだわる場合は、sshを使う必要がある。）

# デスクトップのインストール
サーバーの初期状態ではテキストベースのコンソールしかないので、MT4/MT5などのWindowsアプリを動かすためにデスクトップをインストールする必要がある。

Linuxのいいところは、好きなデスクトップを選ぶことができる点。今回のサーバーでは、MT4/MT5上でEAを動かして放置するので、デスクトップの使い勝手はどうでもいい。使用メモリが少なく、軽い方がいい。そういうことで、LXDEを選択。

taskselでLXDEを選んでインストールする。ただ、下のように画面の罫線が文字化けしてずれてしまうので注意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131169/1f2df8b4-6ffa-4ffc-0b8f-abb7ed990629.png)

あるいは、直接コマンドラインからインストールしてもよい。
```
$ sudo tasksel install lxde-desktop
```

# デスクトップの日本語化
MT4/MT5の日本語版を動かしたい場合、デスクトップも日本語に対応していた方がいい。参考にしたサイトはこちら。

https://atmarkit.itmedia.co.jp/ait/articles/1810/26/news035.html

デスクトップで適当なターミナル画面を開いて以下を実行。
```
$ sudo apt install task-japanese #日本語関連パッケージのインストール
$ sudo dpkg-reconfigure locales  #ja_JP.UTF-8を選択
$ sudo dpkg-reconfigure tzdata   #Asis/Tokyo(JST)を選択
```
これで必要最低限の日本語化は完了。

# xrdpのインストール
Windowsのリモートデスクトップから接続できるようにするサービス。参考にしたサイトはこちら。

https://ja.linux-console.net/?p=671#gsc.tab=0

まず、xrdpをインストール。
```
$ sudo apt install xrdp
```
SSL証明書キーを読めるようにxrdpユーザーをssl-certグループに追加。
```
$ sudo adduser xrdp ssl-cert
```
あと、RDPのポートは標準で3389だけど、そのままだと不正アクセスの的になりかねないので、変更しておく。例えば、12345に変更したい場合、`/etc/xrdp/xrdp.ini`でportの設定を
```
port=12345
```
のように修正。あと、ファイアウォールの設定で、12345を開けておく。
```
$ sudo ufw allow 12345
```
これで、リモートデスクトップから接続できるようになるが、このままだと、新規にログインするので、Windowsアプリを動かしているコンソール画面に直接アクセスできない。

そこで、後でインストールするx11vncに接続できるように、`/etc/xrdp/xrdp.ini`に、以下のセクションを追加しておく。
```
[Console]
name=Console
lib=libvnc.so
username=na
password=ask
ip=127.0.0.1
port=5900
```
最後にxrdpを再起動。
```
$ sudo systemctl restart xrdp 
```

# x11vncのインストール
Windowsアプリを動かしているコンソール画面を操作するためのサービス。参考にしたサイトはこちら。

https://gist.github.com/haru-ake/9bc772e785845883ab7f6d56ee4d17a0

まず、x11vncをインストール。
```
$ sudo apt install x11vnc
```
`/lib/systemd/system/x11vnc.service`という設定ファイルを以下の内容で作成。
```
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -rfbauth /etc/x11vnc.passwd -rfbport 5900 -noxrecord -noxfixes -noxdamage -forever -loop -localhost -repeat

[Install]
WantedBy=multi-user.target
```
x11vncへ接続するときのパスワードを設定。
```
$ sudo x11vnc -storepasswd /etc/x11vnc.passwd
```
設定したサービスを有効にしてx11vncを再起動。
```
$ sudo systemctl enable x11vnc.service
$ sudo systemctl restart x11vnc
```
これで設定完了。

# リモートデスクトップに接続
Windowsのリモートデスクトップ接続ツールより、VPSのIPアドレスを指定して接続。ただし、RDPのポート番号を3389から変えている場合、IPアドレスの後に`:12345`のようにポート番号を付けて接続する。

すると、以下のようなダイアログボックスが表示されるので、`Session`が`Console`となっていることを確認して、設定したパスワードを入力すると、VPSのコンソールに接続できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131169/c3de3396-e15c-0432-ca20-4574bdbadeba.png)

ただし、vnc接続だとファイルのアップロードができないので、その場合、`Xorg`の`Session`で接続する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131169/2d8e0506-3bf4-1072-fcfa-0c01ab003fe6.png)

すると、コンソールではなく、別途VPSにログインする形になるが、ファイルマネジャーを経由してファイルをコピペすることで、ファイルがアップロードできる。

# wineのインストール
最後にMT4/MT5などのWindowsアプリを動かすために、wineをインストールする。参考にしたサイトはこちら。

https://wiki.winehq.org/Debian

まず、OSが64ビットの場合、32ビットアプリに対応できるように設定。（MT5は64ビットだけど、MT4は32ビットアプリ）
```
$ sudo dpkg --add-architecture i386
```
Debian11用のレポジトリを追加。
```
$ sudo mkdir -pm755 /etc/apt/keyrings
$ sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
$ sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bullseye/winehq-bullseye.sources
```
パッケージをアップデートして、wineのStable版をインストール。
```
$ sudo apt update
$ sudo apt install --install-recommends winehq-stable
```
あとは、`winecfg` でwineの初期化を行い、`wine なんとか.exe`のようにすればWindowsアプリのインストールや実行が可能となる。

MT4/MT5のインストールや使用上の注意については、以下の記事と同様なので省略する。

https://qiita.com/toyolab/items/d2bdf858641e5b0720b0

# よく考えると・・・

VultrにはWindows VPSもあるので、それを使えばこの記事に書いた手間は一切必要なくなる。ただ、Windows VPSはちょっと高い。安くても月＄24くらいかかる。

VPSを少しでも安くしたいからLinux VPSを使っているけど、商用EAのコストとか考えると、月＄6が月＄24でも誤差の範囲かも。結局は個人的な好みの問題。