環境
サーバ: Ubuntu 17.10 (GNOMEデスクトップ)
クライアント: Windows 10 Pro
接続環境: LAN (+ VPN)
Ubuntu側
TigerVNCのインストール
sudo apt install tigervnc-standalone-server
開いているデスクトップの画面をリモートでも共有したい場合は次のコマンドも実行しておきましょう。
sudo apt install tigervnc-scraping-server
パスワードの生成
VNCに接続するためのパスワードを設定します。
tigervncpasswd
パスワードは6~8文字の間で設定してください。5文字以下は短すぎると言われて弾かれ、9文字以上は8文字に切り詰められます。💩
View-onlyパスワードは設定しなくても構いません。設定したパスワードは~/.vnc/passwd
に保存されます。
VNCサーバの起動
ここが最重要ポイントです。SSHセッションなどから起動する場合は次のコマンドで起動します。
tigervncserver -localhost no
**-localhost no
がないと別のコンピュータからLAN等を経由して繋げません!**かなり大きなトラップです。
このコマンドを実行した後は、実行すると接続できますよと提示されたコマンドのコロン:
とその直後の数字を確認してください。(大体は:1
だと思います)SSHセッションなどを閉じても構いません。
すでに起動しているデスクトップをミラーリングしたい場合は次のコマンドを入力します。
x0tigervncserver PasswordFile=$HOME/.vnc/passwd
**オプションを忘れると、パスワード認証の段階で失敗します。**こちらはCtrl+Cで終了するタイプです。
VNCクライアントのインストール
エンジニアたるものChocolateyを使ってインストールしましょう。PowerShellを管理者で開き、次のコマンドを入力してインストールします。
cinst -y tigervnc-viewer
Macの人はHomebrewなりでインストールしてください。
VNCクライアントから接続
スタートメニューからTigerVNC Viewerを探して起動します。VNC Serverの入力欄があるので、例えばサーバ側のIP(ホスト名が割り当てられている場合はホスト名を入力してください)が192.168.11.45
の場合、tigernvcserver
で起動した場合は192.168.11.45:1
と入力します。ここで、:1
はサーバ起動時に確認したものと合わせるようにしてください。x0tigervncserver
で起動した場合は:1
などは不要で、IPまたはホスト名そのままを入力してください。
入力したらConnectボタンを押します。上手く接続できた場合はtigervncpasswd
で設定したパスワードの入力を求められますので、入力し、OKボタンを押します。パスワードが合っていた場合はサーバのデスクトップ画面が出ます。なお、:
及びその後の数字を間違えた場合は、unable connect to socket: Connection refused (10061)
というエラーメッセージが出るなどしますので、慌てないようにしてください。(:
の後の数字によって使用するポート番号が異なるためです)
SSH経由でサーバを起動する場合
tigervncserver
をSSHセッションから実行し、その後ログアウトするとVNCサーバが終了してしまいます。tmux経由で起動してもダメです。💩なぜだ
個人的にはtmuxで新しくセッションを作り、そこから-fg
オプションを付けて
tigervncserver -fg -localhost no
とするといい感じです。終了はCtrl+Cで行います。
SSHトンネルを使用する場合
VNCサーバの起動
SSHなどでtmuxセッションにアタッチし、次のコマンドを実行します。
tigervncserver -fg
すると、VNCサーバが起動します。-localhost no
は不要です。tmuxセッションからデタッチしてもサーバは起動しっぱなしです。
次に、次のコマンドで、SSHトンネルを有効化します。
ssh -CNfL 5901:localhost:5901 192.168.11.45
SSHトンネルはlocalhost
の5901番ポートをクライアントの5901番ポートに転送するように掘ります。
-C
は圧縮有効化、-N
はBashなどのコマンドを実行しない(トンネルなどだけ)、-f
はバックグラウンドでSSHを実行という意味です。
クライアントからの接続
クライアントからはlocalhost:1
に接続します。VNCのパスワードを入力すると、リモート側の画面が見えるはずです。