目次
はじめに
少し前のことなのですが、AWS上にUbuntuサーバをたてて欲しいという要望を受けました。依頼者曰く「作業用PC(Windows)から接続できるデスクトップ環境が欲しい」とのことでしたが、使う予定のAmazon AMIにはデスクトップ環境は入っていませんでした。
という訳で、Ubuntuにデスクトップ環境を構築し、リモートで接続できるようにした時の手順を紹介します。
前提
今回はxrdpをサーバに導入して、Windows10のクライアントPCからリモートデスクトップ接続できるようにします。UnixライクOSでは、デスクトップ環境に接続する際にはVNC(Virtual Network Computing)を使うことが多いと思うのですが、xrdpを使えばクライアントがWindowsの場合には追加のソフトウェアが不要(標準で用意されている「リモートデスクトップ接続」を使えばいい)なので、利用者側の準備がすこし楽になります。
動作については、Ubuntu 16.04 LTSで確認しています。
サーバは利用者に引き渡す予定なので、作業はすべてAMIデフォルトのubuntuユーザで行います。また、ユーザがリモートデスクトップ接続に使うアカウントも同じubuntuユーザとしています。「利用者に管理者権限を渡したくないよ」という方は適宜利用者用のアカウントを作成する等してください。また、AMIからEC2インスタンスを作成する手順は省略しています。
手順(サーバ側)
パッケージ最新化
まずは導入されているパッケージを最新化しておきましょう。セキュリティ的にも大切なステップです。
1 2 |
$ sudo apt-get update $ sudo apt-get upgrade |
日本語パッケージの構築とロケールの設定
デスクトップ環境で日本語が扱えないと悲しいので、必要なパッケージをインストールします。また、ロケールを日本語にしておきましょう。
1 2 |
$ sudo apt install language-pack-ja-base language-pack-ja $ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja" |
ここで一度EC2インスタンスを再起動しておきましょう。
SSHのパスワード認証有効化とパスワードの設定
ubuntuユーザでパスワード認証を有効化します。また、デフォルトではubuntuユーザのパスワードが設定されていないので設定します。
1 2 3 |
$ sudo sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config $ sudo /etc/init.d/ssh restart $ sudo passwd ubuntu |
パッケージ管理ソフトのインストール
Ubuntuのインストーラを動作させると、途中でサーバ上で動作させるサービスを選択させる画面が出ますが、それを後から使いたい場合にはtaskselコマンドを使います。まずはコマンドをインストールします。
1 |
$ sudo apt install tasksel |
デスクトップ環境インストール
インストールできたら、taskselを起動します。
1 |
$ sudo tasksel |
リストから「Ubuntu MATE Cloudtop」を選択します。MATE(マテ)はGNOME 2のコードからフォークされたデスクトップ環境です。Cloudtopはクラウドに最適化されたセットです。
日本語入力システムのインストール
日本語入力システムであるMozc(モズク)をインストールします。
1 |
$ sudo apt install ibus-mozc |
リモートデスクトップ接続サーバ(xrdp)のインストール
リモートデスクトップ接続出来るように、xrdpをインストールします。
1 |
$ sudo apt install xrdp |
キーボード設定
キーボードの設定をします。
1 |
$ sudo dpkg-reconfigure keyboard-configuration |
全てデフォルト選択でOKです。
xrdp日本語配列のキーマップの修正
キーマップがUSのものになっているので、日本語配列用に変更します。
1 2 3 4 5 6 |
$ cd /etc/xrdp $ sudo wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini $ sudo mv km-e0010411.ini km-0411.ini $ sudo ln -s km-0411.ini km-e0010411.ini $ sudo ln -s km-0411.ini km-e0200411.ini $ sudo ln -s km-0411.ini km-e0210411.ini |
リモートデスクトップ接続サーバの再起動
xrdpサーバを再起動します。
1 |
$ sudo systemctl restart xrdp |
手順(クライアント側)
さて、これでリモートからデスクトップ環境にアクセスできるようにはなったのですが、この状態ではインターネット上に暗号化されていない生のデータが流れてしまうことになります。セキュリティ的に大変よろしくない状態となりますので、通信を暗号化することにしましょう。通信を暗号化するのにSSHポートフォワーディングを利用します。それには少しクライアントPC側に準備が必要です。手順について簡単に説明させていただきます。
TeraTermのインストール
クライアントPCにTeraTermをインストールします。こちらから最新版を入手してインストールしてください。
TeraTermの設定
TeraTermを起動し、表示される「新しい接続」のウィンドウを一度キャンセルしてください。そして「設定」→「SSH転送」を選び、以下の設定を追加します。
- ローカルのポート:13389
- ポート:3389
あとは空白で大丈夫です。
もしクライアントPCでTCPの13389番ポートを使っていたら、別のポートを使ってください。(以下の説明もその番号で読み替えてください。)設定は「設定」→「設定の保存」で保存しておいてください。ちなみに私はよく保存し忘れて後でガッカリします。
接続確認
これで準備は整いました。クライアントPCからサーバにリモートデスクトップ接続してみましょう。
まず、クライアントPCでTeraTermを起動し、サーバにSSH接続します。(手順についてはEC2インスタンスにログインしたことのある方はご存知だと思うので割愛します。)この接続はリモートデスクトップ接続を使う間、ずっと保持していてください。利用者には、この通信を切断するとxrdp接続も切れることを伝えておく必要があります。
次に、クライアントPCからリモートデスクトップ接続を起動し、接続情報(「オプションの表示」を押下)を以下の通り入力します。
- コンピュータ:localhost:13389
- ユーザ名:ubuntu
「接続」ボタンを押すと、さらに認証画面(Login to xrdp)が出てくるので、以下の通り入力します。
- Module:sesman-Xvnc
- username:ubuntu
- password:ubuntuユーザのパスワード
これでめでたくデスクトップ環境にログインすることができるようになります。
おわりに
普段サーバにデスクトップ環境を入れない(消費メモリが増えるのが嫌なのと、そもそも要件でデスクトップ環境が必要なケースが少ない)上に、個人的にUbuntuに慣れていなかったので、作業に手間取りました。この記事が困っている誰かの助けになれば幸いです。
執筆者プロフィール

- tdi デジタルイノベーション技術部
- 開発プロジェクトの技術支援や技術の検証に従事しているインフラエンジニアです。Unix/Linuxを扱う機会が多く、構築から運用保守まで一通り携わった経験があります。好きな言葉は「試験運用」。
この執筆者の最新記事
Pick UP!2022年3月15日AWSのプライベートサブネットからSES経由でメールを送信する
Pick UP!2020年10月19日AWS認定試験の専門知識(セキュリティ・高度なネットワーキング)に合格する方法
Pick UP!2020年3月23日AWS認定試験を6冠するための受験順と勉強法
AWS・クラウド2019年10月23日AWS 認定ソリューションアーキテクト – プロフェッショナルの新試験に合格した話