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.ini と
xrdp.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 件のコメント:
コメントを投稿