OpenSUSE 13: XRDPをインストールする

XRDPをインストールする方法を記載します。

1 XRDPをインストールする

Fedora 25のsrc.rpmを利用します。

> sudo zypper -n in rpm-build patterns-openSUSE-devel_basis
> FEDORA=https://dl.fedoraproject.org/pub/fedora/linux/releases
> wget -q ${FEDORA}/25/Everything/source/tree/Packages/x/xrdp-0.9.0-6.fc25.src.rpm
> rpm -i xrdp-0.9.0-6.fc25.src.rpm

pamの設定ファイルをxrdp-0.6のものに変更します。

> cd ~/rpmbuild
> cat <<EOF > SOURCES/xrdp-sesman.pamd
#%PAM-1.0
auth       required     pam_unix.so shadow nullok
auth       required     pam_env.so readenv=1
account    required     pam_unix.so
EOF

Fedora 25でのパッケージ名をOpenSUSE 13のものに変更します。

> sed -i -e 's/BuildRequires: systemd-units/BuildRequires: systemd/g' \
    -e 's/Requires\(.*\): systemd-units/Requires\1: systemd/g' \
    -e 's/Requires(post): systemd-sysv/Requires(post): systemd/g' \
    -e 's/BuildRequires: openssl-devel/BuildRequires: libopenssl-devel/g' \
    -e 's/Requires: tigervnc-server-minimal/Requires: tigervnc/g' \
    -e 's/^%systemd_post \(.*\)/systemctl enable \1\nsystemctl start \1/g' \
    -e 's/^%systemd_preun \(.*\)/systemctl stop \1/g' \
    -e 's/^%systemd_postun_with_restart \(.*\)/systemctl disable \1/g' \
    SPECS/xrdp.spec

/etc/X11/xim.d/ibusがないと接続ができないようなので、ibusをRequireに追加します。

> sed -i -e 's/Requires: tigervnc/Requires: tigervnc\nRequires: ibus/g' \
    SPECS/xrdp.spec

BuildRequireのパッケージをインストールします。

> sudo zypper -n in \
     $(grep '^BuildRequires:' SPECS/xrdp.spec | awk -F: '{ print $2 }')

XRDPをビルドしてインストールします。

> rpmbuild -ba SPECS/xrdp.spec
> sudo zypper -n in RPMS/x86_64/xrdp-0.9.0-6.x86_64.rpm

3389/tcpを開放します。

> firewall_open_tcp()
{
  for t in FW_SERVICES_EXT_TCP FW_SERVICES_DMZ_TCP FW_SERVICES_INT_TCP; do
    sudo sed -e "s/^${t}=\"\(.*\)\"/${t}=\"\1 $1\"/g" \
         -i /etc/sysconfig/SuSEfirewall2
  done
  sudo systemctl restart SuSEfirewall2
}
> firewall_open_tcp 3389

RDP接続できるようになります。

0001_rdesktop-to-OpenSUSE.png

2 GNOMEの場合はxdmが必要

DISPLAYMANAGERがgdmだと以下のようにエラーになります。/etc/gdmの設定がXRDPに合っていないのかもしれません。

0002_xrdp-to-gdm.png

DISPLAYMANAGERをgdmからxdmに変更すると改善されます。以下の変更を加えた後、OpenSUSE 13を一度再起動します。

> diff -uprN /etc/sysconfig/displaymanager{.org,}
--- /etc/sysconfig/displaymanager.org   2016-12-24 07:02:46.771923000 +0900
+++ /etc/sysconfig/displaymanager       2016-12-24 06:57:28.966895000 +0900
@@ -11,7 +11,7 @@ DISPLAYMANAGER_XSERVER="Xorg"
 # Here you can set the default Display manager (kdm/xdm/gdm/wdm/entrance/console).
 # all changes in this file require a restart of the displaymanager
 #
-DISPLAYMANAGER="gdm"
+DISPLAYMANAGER="xdm"

 ## Type:       yesno
 ## Default:    no

ローカルのログイン画面は以下の通りです。この状態でXRDP経由でアクセスすることができるようになります。なお、XRDPでログインしている間はローカルでログインできなくなります。

0003_xdm.png

3 XRDPをインストールするスクリプト

以下のスクリプトを実行すればOpenSUSE 13へRDP接続できます。

#!/bin/sh


firewall_open_tcp()
{
  for t in FW_SERVICES_EXT_TCP FW_SERVICES_DMZ_TCP FW_SERVICES_INT_TCP; do
    sudo sed -e "s/^${t}=\"\(.*\)\"/${t}=\"\1 $1\"/g" \
         -i /etc/sysconfig/SuSEfirewall2
  done
  sudo systemctl restart SuSEfirewall2
}

sudo zypper -n in rpm-build patterns-openSUSE-devel_basis
FEDORA=https://dl.fedoraproject.org/pub/fedora/linux/releases
wget -q ${FEDORA}/25/Everything/source/tree/Packages/x/xrdp-0.9.0-6.fc25.src.rpm
rpm -i xrdp-0.9.0-6.fc25.src.rpm

cd ~/rpmbuild
cat <<EOF > SOURCES/xrdp-sesman.pamd
#%PAM-1.0
auth       required     pam_unix.so shadow nullok
auth       required     pam_env.so readenv=1
account    required     pam_unix.so
EOF
sed -i -e 's/BuildRequires: systemd-units/BuildRequires: systemd/g' \
    -e 's/Requires\(.*\): systemd-units/Requires\1: systemd/g' \
    -e 's/Requires(post): systemd-sysv/Requires(post): systemd/g' \
    -e 's/BuildRequires: openssl-devel/BuildRequires: libopenssl-devel/g' \
    -e 's/Requires: tigervnc-server-minimal/Requires: tigervnc/g' \
    -e 's/^%systemd_post \(.*\)/systemctl enable \1\nsystemctl start \1/g' \
    -e 's/^%systemd_preun \(.*\)/systemctl stop \1/g' \
    -e 's/^%systemd_postun_with_restart \(.*\)/systemctl disable \1/g' \
    SPECS/xrdp.spec
sed -i -e 's/Requires: tigervnc/Requires: tigervnc\nRequires: ibus/g' \
    SPECS/xrdp.spec
sudo zypper -n in \
     $(grep '^BuildRequires:' SPECS/xrdp.spec | awk -F: '{ print $2 }')
rpmbuild -ba SPECS/xrdp.spec
sudo zypper -n in RPMS/x86_64/xrdp-0.9.0-6.x86_64.rpm
firewall_open_tcp 3389

grep 'DISPLAYMANAGER="gdm"' /etc/sysconfig/displaymanager &&
  (sudo sed -i -e 's/DISPLAYMANAGER="gdm"/DISPLAYMANAGER="xdm"/g' \
        /etc/sysconfig/displaymanager && sudo reboot)