XubuntuにVNCをセットアップ
Xubuntuを他のマシンから遠隔で操作する必要があったのでリモート操作するためのソフトウェアをセットアップしてみました。
Linuxマシンを外部からGUIでリモート操作するソフトウェアとしては、rdpのほうが高速で高機能なのだけれど、今回の要件は「ローカルで直接操作している画面と同じ状態をリモート側でも表示させたい」というものでした。
つまり、リモート操作で別セッションではいけない、ということになります。
この要件を満たすために今回は「VNC」を使うことにします。
Linuxで動作するVNCのソフトウェアはTigerVNCなど多数存在しますが、今回は「x11vnc」を採用します。
インストール
x11vncのインストール自体はいたって簡単。Xubuntuの場合はaptでインストールするだけです。インストールされるパッケージ類もシンプル。
遠隔操作したいマシン(操作される側)で次の操作でx11vncをインストールします。
$ sudo apt install x11vnc
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
libtcl8.6 libtk8.6 libvncclient1 libvncserver1 tcl tcl8.6 tk tk8.6
x11vnc-data
提案パッケージ:
tcl-tclreadline
以下のパッケージが新たにインストールされます:
libtcl8.6 libtk8.6 libvncclient1 libvncserver1 tcl tcl8.6 tk tk8.6 x11vnc
x11vnc-data
アップグレード: 0 個、新規インストール: 10 個、削除: 0 個、保留: 0 個。
2,969 kB のアーカイブを取得する必要があります。
この操作後に追加で 9,710 kB のディスク容量が消費されます。
続行しますか? [Y/n] Y
起動の前準備
パスワードファイル作成
今回x11vncの認証にはパスワード認証を利用することにします。そのために認証用パスワードを保存するためのパスワードファイルを次の操作で生成します。
- 下の例では、パスワードファイルは /etc 直下に「x11vnc.pass」の名前で作成しています。
- あらかじめ認証用パスワードを決めておくこと。
$ sudo x11vnc -storepasswd /etc/x11vnc.pass
Enter VNC password: <------------------------- 認証用パスワードを入力
Verify password: <------------------------- 認証用パスワードを再度入力
Write password to /etc/x11vnc.pass? [y]/n y <- 「y」を入力
Password written to: /etc/x11vnc.pass
サービス化
遠隔操作される側のマシンでx11vncをデーモン(サービス)として常時起動させておきたいので、次のようにサービス化します。
サービス用ユニットファイル作成
$ sudo vi /lib/systemd/system/x11vnc.service
次の内容を記載します。
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -noxrecord -noxfixes -noxdamage -rfbauth /etc/x11vnc.pass -geometry 1720x900 -forever -xkb -loop -shared -repeat -rfbport 5900 -o /var/log/x11vnc.log
[Install]
WantedBy=multi-user.target
x11vncの起動オプション概説
今回設定したx11vncの起動オプションの概要を説明します(かなり意訳です)。
詳しくはx11vncのmanページを参照してください。
- -auth guess :X認証方法の指定。x11vncが-findauthを使用するようにする
- -noxrecord : RECORD拡張機能の使用を無効にする
- -noxfixes :XFIXES拡張機能を使用して正確なカーソルを描画しない
- -noxdamage :X DAMAGEエクステンションを使用してフレームバッファーを検出しない
- -rfbauth パスワードファイル名 :上記パスワードファイル生成で作成したパスワードファイルを使って認証する
- -geometry 画面サイズ :表示するウィンドウの縮尺(画面サイズの割合で指定する場合は、「-scale 分数」でも指定可)
- -forever :永続モード
- -xkb :XKEYBOARD拡張を使用する
- -loop :x11vncプロセスが終了しても再起動する外部ループを作成する
- -shared :共有モード。複数のビューアが共有できる。
- -repeat :キーのリピートを有効にする
- -rfbport ポート番号 :X11VNCのリッスンポート。5900番が一般的。
- -o ログファイル名 :ログファイルの場所を指定
起動してみる
$ sudo systemctl start x11vnc
$ systemctl -t service <-------- 起動確認
:
whoopsie.service loaded active running crash report submission da
wpa_supplicant.service loaded active running WPA supplicant
x11vnc.service loaded active running Start x11vnc at startup. <-- 起動していること
自動起動設定
正常に起動したことが確認できれば、マシン起動時にx11vncが自動起動するように設定します。
$ sudo systemctl enable x11vnc
スクリーンセーバの無効化
遠隔操作したいマシン側でスクリーンセーバが起動しセッションがロックされていると外部から操作できないので、遠隔操作したいマシン側のスクリーンセーバを無効にしておきます。
Xubuntuの場合、「設定」から「電源管理」を選択し、「セキュリティ」タブで次のように設定できます。
- 遠隔操作される側マシンの電源管理の設定変更をしなくてもx11vncの起動オプションに「-nodpms」をつけると回避できるかもしれません(試していません)。
他のマシンから接続
Linuxマシンから接続
UbuntuなどのLinuxマシンから接続するのであれば、Remminaなどを使ってアクセスできます。
遠隔操作したいマシンのホスト名で接続すると、下図のようにVNCのパスワードを要求してくるので、パスワードファイル作成時に設定したパスワードを入力します。
遠隔操作したいマシンの画面が開いたら成功です。
Macから接続
Macから遠隔操作するのであれば特別なソフトウェアの新たなインストールは不要です。
メニューから[移動] →[サーバへ接続] を選択します。
下図のウィンドウが開くので、「vnc://」に続けて遠隔操作したいマシンのホスト名.local を入力し[接続]ボタンをクリックします。
パスワードを聞いてくるので、パスワードファイル作成時に設定したパスワードを入力します。
遠隔操作したいマシンの画面が開いたら成功です。