Linuxをサーバ機として使う場合、大抵はSSHを叩ければ事足ります。しかし、時にはGUI (X Window System)が欲しくなるもの。そうなると基本リモートでも繋げられるようにしたいものです。
VNCでもいいのですが、クライアントをセットアップするのが面倒、そして設定(画面サイズとかセッションとか)を忘れる。
ので、Windowsからは標準のリモートデスクトップ(RDP)クライアントを使えるようにしましょう。
もくじ:
はじめに
Windowsの虜囚には馴染みの薄いデスクトップマネージャ。
LinuxはCUI(コマンドライン)が主体で、コマンドさえ覚えてしまえば基本的にやりたいことは全てできてしまいます。それが良さでもあるのですが、複数のウィンドウを表示させて作業したいときにはやはりGUIが欲しくなるもの。
多くのディストリビューションでは、デスクトップマネージャとかデスクトップ環境という別パッケージをセットアップすることで使えるようになります。
CUIのみで構築したLinuxサーバへリモート接続してGUIを使いたい場合は、デスクトップマネージャをインストールして、さらにリモートデスクトップサーバ(XRDP)をセットアップします。
この場合、WindowsからLinuxを操作するには、リモートデスクトップクライアント(TSクライアント)を立ち上げて接続します。使用不能になる機能もありますが、Windowsマシンにリモートで接続する場合と同じ方法でできるようになるので、他のソフトをインストールする必要がありません。
今回はデスクトップマネージャとしてMATEとLXDEを使って検証しました。試した環境はUbuntu Server 17.10 (Artful Aardvark, 一周しましたね)です。
[追記]
Ubuntu Server 18.04 (Bionic Beaver)でも試しましたが、基本同じやり方で設定可能でした。
以下は接続の対象(XRDPサーバ側)での作業。
デスクトップマネージャのインストール
事前にUbuntu Serverをインストールしておきます。特別な注意点はありませんが、インストール時にOpenSSH-Serverを指定しておけばSSH接続がすぐ使えます。軽量なパッケージにしたい場合はLubuntuを使っても良いと思います。
[追記]
Ubuntu Server 18では従来のGUIを踏襲したイメージの他、CUIベースのインストーラ(ubuntu-18.04-live-server-amd64.iso)が配布されていますが、基本は同じやり方で良く、17同様特に迷うとことはないと思います。
SSH等で接続し、デスクトップマネージャをインストールします。OfficeツールなどGUI向けソフトウェアもインストールされるので、マシンのスペックによってはインストール処理に時間がかかる場合があります。
非力なマシンの味方、LXDE。用途的にはXfceでも良いのですが、Lubuntuで使い慣れているので。
いろいろ方法はありますが、シンプルにapt
で入れられます。LubuntuはLXDEが入っているはずなのですが再度インストールが必要です。
1 | $ sudo apt install -y lxde |
Ubuntuらしいかっちょいいデスクトップがお好みなら、今のところ安定度と参考情報の多さでMATE(マテ)がイチオシ。
Unity?見た目は好きですよ。使わないけど。
これもapt
で入ります。インストール後は再起動した方がいいかも。
1 2 3 4 | $ sudo apt install -y ubuntu-mate-desktop # 余計なものはいらん!という人向け↓ $ sudo apt install --no-install-recommends ubuntu-mate-core^ $ sudo reboot |
XRDP + VNCのインストール
XRDPと、Ubuntu 17系統には入ってないらしいのでバックエンドに使うVNC(Tiger VNC)をインストールします。
1 | $ sudo apt install -y xrdp tigervnc-standalone-server |
設定ファイル(xrdp.ini
)で[Xvnc]
がデフォルトになるようSession types - [Xorg]
セクションの位置を変更(または不要なら削除)します。要は、セクションの定義順に接続画面での選択肢(ドロップダウンリスト)が表示されるので、[Xvnc]
が先頭に来るようにします。
接続時に毎度選択する2クリックが面倒でない人はスキップしても構いません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | $ sudo vi /etc/xrdp/xrdp.ini ; ; Session types ; ↓ このセクションを位置変更、または削除 [Xorg] name=Xorg lib=libxup.so username=ask password=ask ip=127.0.0.1 port=-1 code=20 ↓ このセクションが先頭になるようにする [Xvnc] name=Xvnc lib=libvnc.so username=ask password=ask ip=127.0.0.1 port=-1 #xserverbpp=24 #delay_ms=2000 |
MATEでは必要なかったのですが、LXDEでは下記の設定(.xsession
ファイル)が必要でした。 [追記] 18ではLXDEでも不要でした
1 | $ echo "lxsession -s LXDE -e LXDE" > ~/.xsession |
サービスを有効化、再起動します。
1 2 | $ sudo systemctl enable xrdp $ sudo systemctl restart xrdp |
接続テスト
クライアント側(Windowsマシン)から接続してみます。
ファイル名を指定して実行(Windowsキー+R)でmstsc
を指定するなどしてリモートデスクトップクライアントを起動します。
他のリモートWindowsマシンの場合と同様に、UbuntuをセットアップしたサーバのIPアドレス(やホスト名)を指定して接続します。
ユーザ名やパスワードを尋ねてくる画面が表示されます。おそらくここまでたどり着くのはそう難しくないはず。エラーで接続できなければ設定を見直すかググって下さい。
接続したところはこんな感じ。こころなしかもっさりしてますが普通の(Windowsマシンへの)リモート接続と使い勝手は変わらないと思います。
その他のセットアップ
使い方によってはその他の落とし穴があるので、参考程度に簡単に列挙しておきます。
ファイヤウォールの設定
念のためファイヤウォールの設定をやっておきます。基本は3389番ポートを開ければ大丈夫です。
GUIだとgufw
が使えるので、メニューから「ファイヤウォールの設定ツール」(こんなやつ↓)を立ち上げるか、インストールされていなければaptで入れられます。
しゃらくせえ、というひとはufw
コマンドをそのまま使っても可。
1 2 3 4 5 6 | $ sudo ufw enable # SSHとRDPを開ける $ sudo ufw allow 22/tcp $ sudo ufw allow 3389/tcp # とか $ sudo ufw allow from 192.168.100.0/24 to any port 3389 |
入力メソッドの変更
素のままだと日本語入力ができませんのでiBus + Mozcをインストールします。ありがとう僕らのGoogle先生。
1 | $ sudo apt install -y ibus-mozc |
設定→言語サポート (language support)で入力メソッドをiBusに設定します。タスクバーで日本語入力が選択できるか確認してみて下さい。
場合によっては再起動か再ログインが必要かも。
電源管理の設定変更
時間経過でモニターをオフする機能(ブランク画面)が有効になっていると再接続できなくなることがありますので、設定>電源管理から無効化しておきます。
startwm.shの編集
たまに陥るのが、画面が真っ黒(でsession busなんたらとポップアップが出ることも)の状態。
こんなときはstartwm.sh
をいじると解決することがあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ sudo vi /etc/xrdp/startwm.sh (...略) if test -r /etc/profile; then . /etc/profile fi # 下記2行を追加 unset DBUS_SESSION_BUS_ADDRESS exec mate-session test -x /etc/X11/Xsession && exec /etc/X11/Xsession exec /bin/sh /etc/X11/Xsession |
設定変更時にはxrdpサービスの再起動が必要です。
コメント
ありがとうございます。
sudo apt install –no-install-recommends ubuntu-mate-core^
の ^ とは何ですか?^なしでもエラーは出ないのですが^が表す意味がわからないので…
宜しくお願いします。
^(キャレット)はパッケージ名ではなくタスク(パッケージをまとめたもの)を指定するための表現です。同じ名前のパッケージが存在する(パッケージubuntu-mate-coreはタスクubuntu-mate-coreに含まれる)ためエラーは出ません。コマンドについては公式を参考にしています。