2018年8月28日火曜日

リモートデスクトップ

WindowsからUbuntuサーバにリモートデスクトップ接続ができるように設定する。参考にしたサイトは「Ubuntu 16.04: Unityデスクトップ環境にXRDPで接続する」。
図1 Ubuntu 16.04: Unityデスクトップ環境にXRDPで接続する

TigerVNCのインストール

まずはTigerVNCをインストールする。下記の内容をTigerVNC.shというファイル名で保存して実行権限を与え、実行する。
#!/bin/sh

set -e

# Install TigerVNC.
sudo apt remove -y vnc4server
sudo apt-get install -y git devscripts xserver-xorg-dev

mkdir tigervnc
cd tigervnc

git clone https://github.com/TigerVNC/tigervnc
cd tigervnc/
git checkout ff872614b507d0aa8bfbd09ef41550390cfe658a

ln -s contrib/packages/deb/ubuntu-xenial/debian
chmod a+x debian/rules
sudo apt install -y $(dpkg-checkbuilddeps 2>&1 | \
                        sed -e 's/.*build dependencies://g' -e 's/([^)]*)//g')
fakeroot debian/rules binary
cd ..

sudo dpkg -i ./*.deb || (sudo apt -f install -y && sudo dpkg -i ./*.deb)
cd ..

図2 viエディタを使ってTigerVNC.shを編集
図3にTigerVNC.shの実行結果を示す。
図3 TigerVNC.shの実行結果

XRDPのインストール

続いて sudo apt install -y xrdp でXRDPをインストールする。
図4 XRDPのインストール

/etc/xrdp/startwm.shの編集

参考サイトには、ホームディレクトリに~/.xsessionを作成して下記の内容を書き込むとあったが、ユーザが複数の場合は /etc/xrdp/startwm.sh に下記を追加するとある。
#!/bin/sh

if [ -r /etc/default/locale ]; then
  . /etc/default/locale
  export LANG LANGUAGE
fi

/usr/lib/gnome-session/gnome-session-binary --session=ubuntu &
/usr/lib/x86_64-linux-gnu/unity/unity-panel-service &
/usr/lib/unity-settings-daemon/unity-settings-daemon &

for indicator in /usr/lib/x86_64-linux-gnu/indicator-*; do
  basename=`basename ${indicator}`
  dirname=`dirname ${indicator}`
  service=${dirname}/${basename}/${basename}-service
  ${service} &
done

unity
 ~/.xsessionは、ログイン時にX Window Systemを利用したアプリケーションを起動するためのシェルスクリプトであるらしいが、複数ユーザの場合はここに記述したスクリプトが起動時に動くようだ。図5に示すシェルスクリプトではunityが起動されるようになっている。

gnome-control-centerの追加

この状態だと、Ubuntuの画面右上の設定アイコン(歯車アイコン)をクリックするとgnome-control-centerが呼び出されるらしい。そこで、gnome-control-centerにunity-control-centerへのシンボリックリンクを張って、設定アイコンが押されたときにunity-control-centerが呼び出されるようにする。
$ sudo ln -s /usr/bin/unity-control-center /usr/bin/gnome-control-center

リモートデスクトップの実行

Windowsのリモートデスクトップ機能を使ってUbuntuサーバに接続した。
図5 リモートデスクトップ接続画面
コンピュータにサーバのIPアドレスを入力して[接続]ボタンを押すと、警告画面が表示され、そのまま進むとXRDPのログイン画面が出る。
図6 XRDPのログイン画面
ユーザ名とパスワードにUbuntuの管理者IDとそのパスワードを入力して[OK]を押すと、図7に示す画面が表示された。
図7 XRDPを使って管理者アカウントでリモート接続したときの画面
これは「ファイル」というUbuntuのアプリケーションの画面でUnityのデスクトップではない。
次に、作成したユーザでリモート接続すると図8に示すようにUbuntuのUnityデスクトップ画面が正しく表示された。
図8 XRDPを使って作成したアカウントでリモート接続したときの画面
 この場合は左側にランチャーが出ているし、右上にもシステムボタンが表示され、これを操作すればログアウトもできる。

XRDPの設定

以上のように、管理者アカウントと作成したユーザアカウントではXRDPでリモートデスクトップ接続したときに表示される画面が違う。その原因を探るためにXRDPではどのような手順でデスクトップ画面が決まるのかを調べてみた。

XRDPの設定ファイルには、sesman.inixrdp.ini の2つがある。いずれも
/etc/xrdp/
にある。
sesman.ini は、XRDPのセッションマネージャの設定ファイルで、セッションマネージャから起動するスクリプトが格納されたファイルを指定する。

[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=1
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh

[Security]
AllowRootLogin=1
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins

[Sessions]
X11DisplayOffset=10
MaxSessions=10
KillDisconnected=0
IdleTimeLimit=0
DisconnectedTimeLimit=0

[Logging]
LogFile=/var/log/xrdp-sesman.log
LogLevel=DEBUG
EnableSyslog=0
SyslogLevel=DEBUG

[X11rdp]
param1=-bs
param2=-ac
param3=-nolisten
param4=tcp

[Xvnc]
param1=-bs
param2=-ac
param3=-nolisten
param4=tcp
param5=-localhost
param6=-dpi
param7=96
この設定ファイルの中で UserWindowManager に設定した startwm.sh がログインスクリプトである。
なお、ログインアカウントごとにログインスクリプトを設定したければ、そのアカウントの ホームディレクトリに startwm.sh を置いて、その中に起動時に実行したいスクリプトを書く。

なぜ管理者アカウントではリモートデスクトップできないのか?

管理者アカウントのホームディレクトリに unity を起動するスクリプトを書いた startwm.sh を置いてみたが結果は変わらず図7のままだった。
なぜ管理者アカウントと作成したアカウントの間でこのような挙動の違いがあるのかわからない。
ネットを検索してみると、Unity(Compiz)の設定を初期化する方法~/.config/dconf/user を削除する方法などいろいろな記事があったが、どれをやっても問題は解決できなかった。
印象としては、XRDP起動時にUnity以外が起動されているような気がしてならない。

他のマシンで試してみた

管理者アカウントでリモートデスクトップ接続するとUnityデスクトップが表示されない件を他のマシンで調べてみた。その結果、一度はUnityデスクトップが表示されたが、その後は表示されなくなった。ということは、今回のこの問題はこのマシン特有の問題ではないのかもしれない。

0 件のコメント:

コメントを投稿

OpenDolphinとORCAの連携

第3章の章末問題 第2章の章末問題でやったカルテ例1をOpenDolphinに入力してORCAで診療報酬明細書を作成し、模範解答と比較しなさい。 を実際にやってみたのでまとめておく。 OpenDolphinで過去にさかのぼってカルテは作成できるか? その前に標題に...