xrdp

xrdp

Linuxでリモートデスクトップを待ち受けるソフトウェア。
実際は、ローカルでVNCやconsole接続を行い、それらのパケットをRDPに変換(カプセリング?)する事で、
WindowsのRDPクライアントでも操作出来るようにする物。
その為、xrdp単体でLinuxをリモートGUIで操作はできず、何らかのリモートソフトと組み合わせる事が必須になる。

構築環境

今回検証した環境はこちら

  • openSUSE Leap 42.1

構築

0. 注意事項
xrdpを動かすには最低限、Xvnc(TigerVNC)かX11rdp(後述)が必須になる。
今回は、構築が一番楽なXvnc+xrdpの構築メモを記述。


1. パッケージインストール

  • openSUSE
    既にビルドされているパッケージからインストールする場合、
    openSUSEのオフィシャルに用意されているympファイルを使う。

ympファイルをダウンロードしたら、そのままWebブラウザからyastを起動させるか、
OCICLIコマンドを使って個別にインポートすればxrdpをインストールする事が出来る。

Open Source remo desktop protocol (RDP) server

  • CentOS / Debian
    xrdpユーザ会で、CentOS用とDebian用のビルドツールが用意されている。
    また、yumとかapt-getでも用意されているので、用途に合った方を使えばOK

CentOS版 X11RDP-o-Matic
Debian版 X11RDP-RH-Matic

[CentOS] # yum install xrdp
[Debian] # apt-get install xrdp



2. ビルドインストール
通常はパッケージで入れれば良いが、別途特殊オプションをenableにする場合はソースから入れる。
また、パッケージで入れた際にキーボードマップが日本語106で認識しない場合には、
ソースからマップファイルをコピーすれば認識する様になる。


ビルドでのインストールは未検証なのでコマンドの羅列のみ。
オフィシャルのドキュメントに詳しく書いてあるので、そっち参照を推奨。

# cd /usr/local/src
# git clone "https://github.com/neutrinolabs/xrdp.git"
# cd xrdp
# ./bootstrap
# ./configure --prefix=/usr/local/xrdp --enable-fuse
# make
# make install
# /usr/local/xrdp/bin/xrdp-keygen xrdp auto
# cp /usr/local/xrdp/etc/pam.d/* /etc/pam.d/



3. キーボードマップの更新
xrdpのログイン画面で、[Shift]+[2]を押した時に[@]が出力されるなら必須

# cd /usr/local/src
# git clone "https://github.com/neutrinolabs/xrdp.git"
# cd xrdp/instfiles
# ls *.ini | grep -v e0 | xargs -i cp {} /etc/xrdp/
# cd /etc/xrdp
# ln -s km-0411.ini km-e0010411.ini
# ln -s km-0411.ini km-e0200411.ini
# ln -s km-0411.ini km-e0210411.ini
# ln -s km-0411.ini km-e0220411.ini



4. WindowManagerの変更
デフォルトではRDP接続した時、WMがgnomeになるのでお好みに合わせて変更する。
実際には、xrdpのセッションを張った時に実行されるstartwm.shスクリプトの中にWMが定義されているので、
使いたいWMに合わせて入れ替える事になる。

# vi /etc/xrdp/startwm.sh
=====
・gnome
SESSIONS="gnome-session blackbox fluxbox startxfce4 startkde xterm"
-----
・kde
SESSIONS="startkde gnome-session blackbox fluxbox startxfce4 xterm"
-----
・xterm
SESSIONS="xterm gnome-session blackbox fluxbox startxfce4 startkde"



5. 証明書認証
デフォルトでは証明書も入っていないので、必要ならば証明書も作成する
※xrdpがver0.8.1以上でないと使えないので注意

# cd /etc/xrdp
# openssl req -x509 -newkey rsa:2048 -nodes -keyout xrdp.key -out xrdp.cert -days 1095
# vi /etc/xrdp/xrdp.ini
-----
>> # security layer can be 'tls', 'rdp' or 'negotiate'
>> # for client compatible layer
>> security_layer=tls
>> # X.509 certificate and private key
>> # openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
>> certificate=/etc/xrdp/xrdp.cert
>> key_file=/etc/xrdp/xrdp.key
-----
# systemctl restart xrdp