LinuxのリモートデスクトップとしてデファクトスタンダードなVNCですが、これまたデファクトスタンダードなRealVNCのVNCクライアント「VNC Viewerで一度は接続できるのに、切断すると二度と再接続できない」という現象の解決方法を紹介します。
Raspberry Piをモニタなしでセットアップしている時に発生しました。RealVNCのVNC ViewerはWindows版で、バージョンは7.6.0です。
Raspberry Piはモニタなしでのセットアップの直後で、IPアドレスの固定化は行っておらず、ホスト名「raspberrypi.local」でアクセスしています。
メニューの File > New connection… で「VNC Server」にホスト名だけを指定して、新しく設定を作ります。
その設定をダブルクリックして接続すると、UsernameとPasswordを入力するダイアログが表示され、入力すると接続できます。
ところが、一度ウインドウを閉じてから、再び接続しようとすると。。。
少し頑張ったあとに「Time out waiting for a response from the computer」とエラーが表示されて接続できません。Raspberry Piを再起動しても、VNC Viewerを動かしているPCを再起動しても二度と再接続できません。
対処方法1 設定を作り直す
初回は繋がりますので、一度、右クリックのメニューのDeleteで設定を削除してから、再び File > New connection… で同じように設定を作り直すと接続できます。大した手間ではないと言えばそうですが、スッキリしませんね。
対処方法2 設定が記憶している情報をクリアする
設定を右クリックして Properties… をクリックすると、設定ダイアログが表示されます。
下にスクロールするとNew connection…の時には無かった「Forget sensitive data」というボタンが表示されています。
これはパスワードや設定のアイコンに表示されているデスクトップのスクリーンショットなどの接続した時の情報をクリアするというボタンです。このボタンをクリックすると、New connection… で設定を新規作成した直後の状態に戻りますので、再び接続できるようになります。まぁやはりスッキリしませんね。
根本的な解決法
結論的には「VNC Server」にホスト名ではなく、IPアドレスを指定することで問題は解決します。ホスト名でも初回は接続できますし、SSHでは問題になったことはありませんでしたので、恐らくRealVNCのVNC Viewerの不具合のような気がしますね。。。raspberrypi.localで接続できるのはmDNS(マルチキャストDNS)という仕組みによるものなのですが、hostsファイルに登録すると問題ありませんので、ホスト名での指定に対応していないとかではなくVNC ViewerがmDNSに対応できていないのだと思います。
Raspberry Piもモニタなしでのセットアップにはホスト名だけで接続して進めますが、最終的にはIPアドレスを固定した方がよさそうですね。