2018/05/01(火)ubuntu 18.04 インストール(10) リモートデスクトップ
リモートのubuntuに何かさせたいとき、普通は単にsshで、GUIなアプリを使いたければssh -Xで済みますが、稀にデスクトップ全体を転送したいことがあります。それを実現するものとしては、windowsのリモートデスクトップとVNCが有名ですが、素のwindowsで使えるし速度も速いのでリモートデスクトップを愛用しています。
ところで、unityを採用していた最近のubuntuは、リモートデスクトップやVNCのサーバの設定がとても難しいことが知られています。代わりに標準で「画面共有」という機能があるのですが(プロトコルはVNC)、これは本体にログインしている状態でしか使えず、ログアウトしてしまうとリモートからログイン出来ないというとても不便なものです。
ubuntuは18.04になるとき、Xサーバを17.10で導入されたWaylandからXorgに戻したそうで、これはVNCやxrdpとの相性を考えてのことだそうです。また、unityからgnomeに戻った、更にパッケージのxrdpのバージョンが最新になった、ということもあり、xrdpが簡単に使えるようになったのではないかと期待していました。
しかし、いろいろ試したところあまり上手くは行かず、それでも何とかしてみた、というのが以下の記録です。
基本的に、
の記事に従ってやってみました。
sudo apt install xrdpこれで、サーバそのものは簡単に入ります。カーソル回りに不具合があるらしく、/etc/xrdp/xrdp.iniで、
new_cursors=true を、 new_cursors=false に書き換える sudo systemctl restart xrdpが必要です。
上のサイトによれば、~/.xsessionrc に、
export GNOME_SHELL_SESSION_MODE=ubuntu export XDG_CURRENT_DESKTOP=ubuntu:GNOME export XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdgと書くとgnomeが使えるとのこと。しかし、試してみると、本体でログアウトしておかないと使えないことが分かりました(少なくともうちの環境では)。本体使用中に接続しようとしてもすぐに画面が消えてしまいます。クライアントAで使っている時にクライアントBから接続すると、Aの画面が閉じてBで続きができる、という、windowsに似た動作になります。また、どこかのクライアントで使用中のときは、本体でログイン出来なくなってしまいます。
これでは不便なので、16.04のときと同じく、「MATE」を使う作戦を試してみました。MATEは、「メイト」ではなく「マテ」と読み、gnome2の操作性で軽く、見た目を重視しているということで最近人気があるデスクトップ環境です。
sudo apt install ubuntu-mate-desktopインストール中、display managerをgdm3とlightdmのどちらにするか聞かれましたが、とりあえずMATEの標準と思われるlightdmにしました (gdm3でどうなるかは未確認)。再起動し、本体の方でログイン時に「MATE」と「Ubuntu(デフォルト)」(gnome)が切り替えられ、どちらでも正常に使えることを確認しました。
まず、/etc/xrdp/startwm.sh を書き換えて、最後の2行のXsessionを起動している場所の前に
exec mate-session (これを挿入) test -x /etc/X11/Xsession && exec /etc/X11/Xsession (これは元から) exec /bin/sh /etc/X11/Xsession (これは元から)のようにMATEの起動コードを挿入します。これで一応動きましたが、起動時に「Could not acquire name on session bus」と変なウインドウが出てしまいます。これは、mate-sessionの起動前に
unset DBUS_SESSION_BUS_ADDRESSを挿入したら直りました。
16.04のときと違ってキーボードは正常に使えます(xrdpが新しいおかげ)。かな漢字変換は作動しないので、16.04のときに倣ってmate-session起動前に
export GTK_IM_MODULE=ibus export QT_IM_MODULE=ibus export XMODIFIERS="@im=ibus" ibus-daemon -dを挿入したらうまく動きました。
なお、xrdp接続するとthinclient_drivesというフォルダがホームにでき、接続が切れるとこれがアクセスできないフォルダになってlsの度に警告が出て大変鬱陶しいです。一応ホームで
sudo umount thinclient_drivesとすれば直りますが、面倒です。これを何とかしようと、/etc/xrdp/sesman.iniで、
FuseMountName=thinclient_drives を、 FuseMountName=.thinclient_drives に変更 sudo systemctl restart xrdpとして見えなくしました。
18.04でのxrdpに対する期待とは裏腹にかなり面倒なことになってしまいましたが、一つの例として記録を残しました。もう少し賢い方法がありそうな気もするので、少し様子見ですかね。