リモートデスクトップ接続の設定

2018年12月4日

はじめに

Linux でリモートデスクトップ接続を行うための設定について述べる。リモートデスクトップ接続を行うためにここでは xrdp を用いる。

CentOS

環境

CentOS 7.5

EPEL の設定

xrdp をインストールするために、EPEL (Extra Packages for Enterprise Linux) リポジトリを追加する。

# yum install epel-release

xrdp の設定

xrdp をインストール。

# yum install xrdp

xrdp サーバーの起動。

# systemctl start xrdp
# systemctl enable xrdp

このままでは英語キーボードになるので、日本語キーボードの設定をする。

# cd /etc/xrdp
# wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini
# cp km-e0010411.ini km-0411.ini
# cp km-e0010411.ini km-e0200411.ini
# cp km-e0010411.ini km-e0210411.ini

リモートデスクトップ接続の設定

リモートデスクトップ接続の設定ののために、メニュー[アプリケーション]-[諸ツール]-[ファイアウォール] で TCP の 3389 番ポートを開けておく。

接続時の認証の抑制

リモート接続時に「カラープロファイルを作成するには認証が必要です」というダイアログが出てうっとうしいときは、以下のファイルを作れば抑制できる。

/etc/polkit-1/rules.d/02-allow-colord.rules

polkit.addRule(function(action, subject) {
  if (action.id == "org.freedesktop.color-manager.create-device" ||
       action.id == "org.freedesktop.color-manager.create-profile" ||
       action.id == "org.freedesktop.color-manager.delete-device" ||
       action.id == "org.freedesktop.color-manager.delete-profile" ||
       action.id == "org.freedesktop.color-manager.modify-device" ||
       action.id == "org.freedesktop.color-manager.modify-profile") {
     return polkit.Result.YES;
  }
});

参考

Ubuntu

環境

Ubuntu 16.04 LTS

xrdp の設定

xrdp をインストールして、サービスを開始する。

$ sudo apt-get install xrdp
$ sudo service xrdp start

キーボードの設定は CentOS 同様。

セッションのために LXDE を準備する。

$ sudo apt-get install lxde lxde-common
$ echo lxsession -s LXDE -e LXDE > ~/.xsession

リモートデスクトップ接続の設定

リモートデスクトップ接続の設定ののために、以下を実行する。

$ vino-preferences

設定ウインドウが開くので、「他のユーザーが自分のデスクトップを表示できる」にチェック。「このマシンへの接続を毎回確認する」をはずす (これがチェックされているとリモート側でいちいち接続を許可する必要がある)。パスワードも設定しておいたほうがよい。

リモートデスクトップ接続

Windows から Linux に接続する

Windows のリモートデスクトップ接続で、"コンピューター" にサーバー名を設定し、"オプション" ボタンを押して "ユーザー名" を設定する。ログイン画面が出るので、パスワードを入れてログインすると、Linux のデスクトップが表示される。

xrdp の仕組み

xrdp の仕組みは次のとおりである。

  • リモートデスクトップ接続を行ったときのデスクトップ画面を「セッション」という。
  • セッションには「ポート」番号が紐づく。ポートは 5900 + ディスプレイ番号 (10 から)。
  • ポートを指定せずに (-1 を指定して) 接続すると、新しいセッションが作成される。
  • ログアウトせずに接続を切ると、セッションはそのまま残る。
  • 既存のセッションに接続するにはポートを指定する。
  • ローカルでログインしているデスクトップ画面に接続するには、ポート 5900 を指定する。

セッションのポートの確認

ポートは環境変数 $DISPLAY でわかる。

$ echo $DISPLAY
:13.0

上の例では、ポートは 5913 である。

既存のセッションの確認

既存のセッションを確認するには、VNC のプロセスを調べる。

$ ps aux | grep vnc

セッションを止めるにはプロセスを kill する。

接続の設定

xrdp の接続の設定は "/etc/xrdp/xrdp.ini" にある。

/etc/xrdp/xrdp.ini

[globals]
...
#crypt_level=low
crypt_level=high
...

[xrdp1]
name=sesman-Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1

[xrdp2]
name=console
lib=libvnc.so
ip=127.0.0.1
port=5900
username=na
password=ask

[xrdp3]
name=vnc-any
lib=libvnc.so
#ip=ask
ip=127.0.0.1
port=ask5900
username=na
password=ask
...

これは Ubuntu の設定を元にしている。[globals] は全体の設定である。crypt_level=highで暗号化のレベルを上げている。

[xrdp1]、[xrdp2] ... は接続の種類である。リモートデスクトップ接続時に name で指定した名前で選択できる。[xrd1] "sesman-Xvnc" ではユーザー名とパスワードを問い合わせるようにしている。port=-1 なので新規にセッションが作成される。[xrdp2] "console" は port=5900 なのでローカルのデスクトップに接続しようとする。[xrdp3] "vnc-any" はポートを指定できるようになっている。これは既存のセッションに接続するためのものである。

接続できない場合

CentOS

xrdp.ini で security_layer を以下のように変更する必要があった。

#security_layer=negotiate
security_layer=rdp

Ubuntu

上記設定の "console" で接続しようとしたとき、以下のようなメッセージが出で接続できないことがあった。

started connecting
connecting to 127.0.0.1 5900
tcp connected
security level is 0 (1 = none, 2 = standard)
error - problem connecting

"security level" の数字がおかしい。

以下のコマンドを実行して、再起動したら接続できるようになった。

$ gsettings set org.gnome.Vino require-encryption false

参考: 0 security level with xrdp and vino (Ubuntu Forums)

上記コマンドで以下のようなエラーが出ることがある。

GLib-GIO-Message: Using the 'memory' GSettings backend.  Your settings will not be saved or shared with other applications.

その場合は、以下のように環境変数を設定してから実行する。

$ export GIO_EXTRA_MODULES=/usr/lib/x86_64-linux-gnu/gio/modules/

参考: GLib-GIO-Message: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications (Stack Overflow)

おまけ

Linux から Windows に接続する

Linux から Windows にリモートデスクトップ接続する場合、rdesktop というコマンドを用いる。Windwos の設定で「リモート デスクトップを実行しているコンピューターからの接続を許可する」を選択しておく必要がある (「ネットワーク レベル認証」では接続できない)。

$ rdesktop -f <マシン名>

オプション "-f" はフルスクリーンの指定。フルスクリーンモードとウインドウモードの切り替えは Ctrl+Alt+Enter で行う。

壁紙を表示したい場合はオプション "-xl" をつける (帯域は LAN ですよという意味)。

参考