Ubuntu 18.04 リモートデスクトップ接続のための サーバー構築
筆者の使用環境
ubuntuへのリモートデスクトップ接続は毎回苦労した記憶がありますが肝心の設定はすぐに忘れてしまうのでここに記します。
現在は以下のような構成でWindows10からUbuntu18にリモートログイン作業をしています。
- サーバー側(ホスト):Ubuntu18.04
- クライアント側:Windows10 Enterprise
- Viewer:リモートデスクトップ
所要時間はストレートに行けば15分〜30分といったところでしょうか。
環境比較と参考文献
以前jetsonでやっていたときなどは軽さを重視してxfce4を使っていましたがUIイマイチなので見た目を重視したUbuntu MATE(マテと読むそうです)を使います。
主に以下のサイトを参照しました。
Ubuntuの画面共有設定
本格的な設定の前の下準備です。なお,今後特に断りがないコードはbashのコマンドとします。
画面共有の有効化
-「設定」→「共有」→「画面共有」から画面共有をアクティブにする。
- 「パスワードを要求する」にチェックを入れる。
- もし「共有」→「画面共有」の項目がない場合,sudo apt install vino
を実行して設定を開き直す。
参考:lowreal.net
一度ここで再起動をしたほうがいいです。
再起動後,リモートログインの項目が現れて「共有」がOFFになっているので改めてONにします。
暗号化処理をOFF,ファイヤウォールのポート開放
- 通信の暗号化処理をOFFにします。
sudo gsettings set org.gnome.Vino require-encryption false
- ファイヤウォールの状態を確認
sudo ufw status
これが非アクティブ
とでたら下を飛ばして次に進みます。
- ファイヤウォールがアクティブのとき5900番ポートを開ける
sudo ufw allow 5900 sudo ufw reload sudo ufw status
万が一,Windowsからの接続がうまく行かない場合,思い切ってufwをOFFにできます。
sudo ufw disable
もちろんsudo ufw enableでもとに戻すこともできます。
寄り道:SSHサーバーの設定
どうせSSHもたまに使うことになるので同時に入れておきます。
sudo apt-get install openssh-server
SSHのポートは22であることが通例なのでそちらも開けておきます。
sudo ufw allow 22 sudo ufw reload sudo ufw status
SSHがつながればscpなどでファイルを送りつけたりいろいろ便利です。
XRDPまわりの設定
1. Ubuntu MATEのデスクトップ環境をインストール
自分が最初一番ハマったのはここでした。以下でいろいろ設定するのですが,肝心のMATEの環境がないのを忘れたまま実行した場合VNC errorといったErrorが出現し,それに延々悩まされていました。
実際には以下のコマンドを叩くだけです。
sudo apt install -y ubuntu-mate-desktop
途中で,
check for a default display manager. 1. gdm3 2. lightdm
のような記述がでるかと思いますが,リモート用なので軽量のlgithdmを選択しました。
2. xrdp, Tiger VNCのインストールと設定
ここからは文献1の「えんでぃ」氏のコメント通りに進めます。 xrdpをインストールします。
sudo apt install -y xrdp sudo sed -e 's/^new_cursors=true/new_cursors=false/g' \ -i /etc/xrdp/xrdp.ini sudo systemctl enable xrdp sudo systemctl restart xrdp
TigerVNCをインストール
sudo apt install -y tigervnc-standalone-server
3. xrdpの初期設定をする。
XDG_DATA_DIRS=/usr/share/mate:/usr/share/mate:/usr/local/share XDG_DATA_DIRS=${XDG_DATA_DIRS}:/usr/share:/var/lib/snapd/desktop cat <<EOF > ~/.xsessionrc export XDG_SESSION_DESKTOP=mate export XDG_DATA_DIRS=${XDG_DATA_DIRS} export XDG_CONFIG_DIRS=/etc/xdg/xdg-mate:/etc/xdg EOF
4. ~/.xsessionの編集
~/.xsession
を編集して以下のようにします。root権限が必要です。
viが無難ですがgeditやcodeの方が初心者には使いやすい気もします。こわいお兄さんに言ったら怒られる可能性もありますが*1sudo gedit ~/.xsession
で良いでしょう。
~/.xsession
の変更後
unset DBUS_SESSION_BUS_ADDRESS export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS="@im=fcitx" exec mate-session
5. /etc/xrdp/startwm.shの編集
日本語化やバグ取りに必要だった手順です。
sudo gedit /etc/xrdp/startwm.sh
を実行し文末手前に以下の部分を追加。
# 以下追加分 export GTK_IM_MODULE=ibus export QT_IM_MODULE=ibus export XMODIFIERS="@im=ibus" ibus-daemon -d unset DBUS_SESSION_BUS_ADDRESS exec mate-session # ↑コピーここまで # 以下元からある部分 test -x /etc/X11/Xsession && exec /etc/X11/Xsession exec /bin/sh /etc/X11/Xsession
6. /etc/xrdp/xrdp.iniの設定
sudo gedit /etc/xrdp/xrdp.ini
を実行後開いたファイルに対して以下の文を[Xorg]の行の前に挿入します。
自分の場合目安として156行目に入れました。
[Xvnc] name=Xvnc lib=libvnc.so username=ask password=ask ip=127.0.0.1 port=-1 #xserverbpp=24 #delay_ms=2000
7. bashrcの変更
fcitx > /dev/null 2>&1
再起動
sudo service xrdp restart
補足
繋がらないときのTips
エラーの原因は結構しょうもないことの方が多かったりします。
- pingはお互いつながるか?
- 実行し忘れた項目がないか?
apt update & apt upgrade
やrebootで治ったりもする- とりあえず
sudo service xrdp restart
してみる
など。
*1. sudo権限で編集,作成したファイルはroot権限のないエディタなどから編集できなくなるから(rootがあれば権限はまたいじれる)。ですよね?