Edited at

つまずかない!?TigerVNCでリモートデスクトップ

More than 1 year has passed since last update.


環境

サーバ: 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のパスワードを入力すると、リモート側の画面が見えるはずです。