GNU/Linux ディストリビューションのシステムは、大抵の操作を CUI で完結できる。 とはいえ、たまに特定の操作を GUI のフロントエンドでやりたくなることもある。 そんなとき、わざわざ筐体にディスプレイなどをつないで操作するのは手間がかかる。 そもそも、操作したいマシンと物理的に離れていることも多い。
そのような場面で、マシンを GUI で操作する方法はいくつか考えられる。 最もシンプルなのは SSH で X11 Forwarding することだろう。 その次に、もうちょっとリッチなデスクトップ環境が使いたいときに検討する選択肢のひとつが VNC だと思う。
今回は、Ubuntu 24.04 LTS に TightVNC を入れて macOS から操作する方法について書く。 このとき、接続には SSH Port Forwarding を使うことで外部には VNC 用のポートを公開しないようにする。
VNC サーバを入れた Ubuntu の環境は次のとおり。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.2 LTS Release: 24.04 Codename: noble $ uname -srm Linux 6.8.0-57-generic x86_64 $ tightvncserver --help 2>&1 | head -n 1 TightVNC Server version 1.3.10
VNC クライアントに使った macOS の環境は次のとおり。
$ sw_vers ProductName: macOS ProductVersion: 15.4 BuildVersion: 24E248 $ ssh -V OpenSSH_9.9p1, LibreSSL 3.3.6
もくじ
下準備
あらかじめ TightVNC と、デスクトップ環境として xfce4 をインストールしておく。
$ sudo apt-get install tightvncserver xfce4
VNC 接続用のパスワードを設定する
まずは tightvncpasswd
コマンドを実行して VNC 用のパスワードを設定する。
このパスワードは、VNC クライアントからサーバに接続する際の認証に使われる。
使用するパスワードの長さは 6 ~ 8 文字になっている必要があるらしい。
ただし、今回の構成では SSH PortForwarding することが前提なので、その部分でセキュリティを担保する。
ここで設定するパスワードに関してはおまけのような感じ。
$ tightvncpasswd Using password file /home/amedama/.vnc/passwd VNC directory /home/amedama/.vnc does not exist, creating. Password: Verify: Would you like to enter a view-only password (y/n)? n
TightVNC のサーバを起動する
次に、tightvncserver
コマンドを使って TightVNC のサーバを起動する。
このとき、必ず -localhost
のオプションを指定する。
これでホストの外部に VNC 用のポートが公開されない。
$ tightvncserver -localhost -nolisten tcp -nevershared :1
その他のオプションについては、-nolisten tcp
では Xserver へのリモート接続を抑制している。
そして -nevershared
では、複数のクライアントから接続があった際にそれぞれで状態を共有しないようにする。
末尾の :1
では、仮想ディスプレイ番号 1 番で待ち受けることを指定している。
VNC サーバが使用するポート番号は、5900 に仮想ディスプレイの番号を足したものになる。
サーバを起動すると、ループバックアドレスで TCP の 5901 番を待ち受けていることが確認できる。
$ ss -tlnp | grep tight LISTEN 0 5 127.0.0.1:5901 0.0.0.0:* users:(("Xtightvnc",pid=4107,fd=1))
macOS から TightVNC のサーバに接続する
次に macOS から TightVNC のサーバへ接続しにいく。 まずは macOS から TightVNC をインストールしたマシンへ SSH でログインする。 このとき、リモートの 5901 番ポートをローカルの 5901 番ポートに対応する形で Port Forwarding する。
$ ssh -L 5901:localhost:5901 <remote>
上記で <remote>
の部分は TightVNC をインストールしたマシンに付与した IP アドレスやドメイン名に読みかえる。
SSH で Port Forwarding できたら、macOS の「Finder > 移動 > サーバへ接続」を開く。 「サーバへ接続」の画面が開いたらサーバとして「vnc://localhost:5901」を入力して「接続」ボタンを押下する。
すると、パスワードの入力を求められるので最初の工程で設定した VNC 用のパスワードを入力する。
すると、次のようにそっけない画面が表示される。
ひとまず、これで VNC で接続できることが確認できた。
接続時に xfce4 のデスクトップ環境を起動する
次に、VNC で接続した際に xfce4 のデスクトップ環境を起動するように設定する。 まずは、デフォルトの設定用スクリプトをバックアップしておく。
$ cp ~/.vnc/xstartup{,.bak}
もし、何かあったときはバックアップから元に戻せば良い。
その上で、xfce4 の環境を起動する内容を設定用スクリプトに書き込む。
$ cat << 'EOF' > ~/.vnc/xstartup #!/bin/sh xrdb "$HOME/.Xresources" startxfce4 & EOF
設定したら、今起動している TightVNC のサーバを停止する。
これには tightvncserver -kill :<仮想ディスプレイ番号>
を実行する。
$ tightvncserver -kill :1
停止したら、改めて起動する。 これで先ほどの設定用スクリプトが読み込まれるようになる。
$ tightvncserver -localhost -nolisten tcp -nevershared :1
あとは、先ほどと同じ手順でもう一度 macOS から VNC サーバに接続する。 すると、今度は次のようにちゃんとしたデスクトップ環境が表示される。
あとは、上記の画面を使って必要な操作を進める。
そして、使い終わったら VNC サーバを停止する。
$ tightvncserver -kill :1
いじょう。