VNCでリモートデスクトップ(Ubuntu-MacOS編)
- TurboVNCとVirtualGLを使用
- リモートのUbuntuマシンのデスクトップをローカルのMacマシンに飛ばして作業
- OpenGLで描画するアプリなどもサクサク動作
- のはずでしたが、現状まだ成功しておりませんので、読んでも意味ありません。
目次
実行環境
サーバー
Ubuntu 16.04.6 LTS
- 3.6 GHz Intel Xeon E5-1650
- 64 GB 2133 MHz DDR4
- NVIDIA GeForce GTX 1080 8 GB x 4台
- Driverバージョン 418.74
- CUDAバージョン 10.1
クライアント
macOS Mojave 10.14.4
- Mac mini (Late 2012)
- 2.3 GHz Intel Core i7
- 16 GB 1600 MHz DDR3
- Intel HD Graphics 4000 1536 MB
- XQuartx 2.7.11
インストール
サーバー側
※ 参考文献[1]にほぼ丸々従っただけなのでそちらを参照ください。一応実行コマンドを並べておきます。
VirtualGL
ダウンロード
- https://www.virtualgl.org
- "Official Binaries and Source Tarballs"から virtualgl-2.6.1_amd64.deb をダウンロードした。
インストール
- dpkgでインストールして再起動
$ sudo dpkg -i virtualgl-2.6.1_amd64.deb $ sudo shutdown -r now
- 再起動後
$ sudo service lightdm stop $ sudo /opt/VirtualGL/bin/vglserver_config
何やら色々聞かれたが全部デフォルトの回答にした。 その中で、"vglusers"ユーザーグループだけがvirtual glを使える様に設定するか否かという項目があり、デフォルトの回答は"Yes"だった。そのため、以下のコマンドで自分のユーザーアカウントをvglusersに追加した。
$ sudo usermod -a -G vglusers <ユーザー名>
再度再起動
$ sudo shutdown -r now
- 再起動後
$ sudo xauth merge /etc/opt/VirtualGL/vgl_xauth_key $ xdpyinfo -display :0 $ /opt/VirtualGL/bin/glxinfo -display :0 -c
テキストが色々出力される。要所要所で"OpenGL version string: 4.6.0 NVIDIA 418.74" のような感じで、NVIDIAのカードが使われているのが確認できた。
TurboVNC
※ 以下はVirtualGLのインストールが終わった後に実行
ダウンロード
- https://www.turbovnc.org
- "Official Binaries and Source Tarballs"から turbovnc_2.2.1_amd64.deb をダウンロードした。
インストール
- dpkgでインストール
$ sudo dpkg -i turbovnc_2.2.1_amd64.deb
クライアント側
TurboVNCのドキュメント[3]を参照。
JDKのインストール
TurboVNC Viewerの使用にはJDK (Java Development Kit)が必要なので、まずそちらをインストールする。
無料のOpenJDKを使用した。
ダウンロード
- https://jdk.java.net/archive/
- version 11.0.2のLinux 64-bit用のtar.gzをダウンロードした。
- version12ではTurboVNC ViewerがJRE load errorで動作しなかった。
インストール
[2]を参考にしてインストール。
$ tar xzvf openjdk-11.0.2_osx-x64_bin.tar.gz $ sudo mv jdk-11.0.2.jdk /Library/Java/JavaVirtualMachines/
JAVA_HOME環境変数を設定する。.bash_profileに以下の行を追加する。
export JAVA_HOME=`/usr/libexec/java_home -v 11` launchctl setenv JAVA_HOME $JAVA_HOME
再起動する。
$ sudo shutdown -r now
TurboVNC viewerのインストール
ダウンロード
- https://www.turbovnc.org
- "Official Binaries and Source Tarballs"から TurboVNC-2.2.1.dmg をダウンロードした。
ダウンロードしたdmgをダブルクリックして展開し、その中のpkgインストーラでインストールすれば良い。
実行
サーバー側
VNCサーバーを起動
$ /opt/TurboVNC/bin/vncserver
Desktop 'TurboVNC: <サーバーホスト名>:1 (<ユーザー名>)' started on display <サーバーホスト名>:1
のような感じでメッセージが出てくる。ホスト名の:の右側にある数字がVNCが使っているディスプレイ番号。
クライアント側
VNCクライアントを起動
/Applications/TurboVNC/TurboVNC Viewer.app をダブルクリックして起動する。
接続
サーバー側でVNC起動時に出力された<サーバーホスト名>:<ディスプレイ番号>をウィンドウに打ち込んでConnectすればいいらしいが、<サーバーホスト名>:1と試しに打ち込んでみると"Could not resolve hostname: <サーバーホスト名>: nodename nor servname provided, or not known"と出て接続できなかった。
<サーバーホスト名>の代わりに<サーバーipアドレス>でも良いらしいのでそれも試してみたが、今度は"Could not connect: Operation timed out"と表示されて接続できなかった。
対処
EMAN2のウェブサイト[4]にある方法を試してみた。
$ /opt/TurboVNC/bin/vncviewer -tunnel <ユーザー名>@<サーバーipアドレス>:1
すると "Could not create SSH tunnel: invalid privatekey: "と表示されて接続できなかった。サーバーへの鍵登録はすでに済んでいるし、普段sshで鍵交換でログインしているので、何が悪いのかよくわからない。(/opt/TurboVNC/bin/vncviewer -h でヘルプ読める)
念の為秘密鍵ファイルのパスをあらわに指定してみた。
$ /opt/TurboVNC/bin/vncviewer -tunnel -SSHKeyfile=.ssh/id_rsa <ユーザー名>@<サーバーipアドレス>:1
"Could not create SSH tunnel: invalid privatekey: " はいダメ。
なんか上記エラーが出る際、一瞬"TurboVNCのネットワーク接続を許可しますか?"的なダイアログが出て一瞬で消えていることに気がついたので、MacOSのセキュリティ設定の問題かと思い、その線でちょっと攻めてみる。
システム環境設定 > セキュリティとプライバシー > ファイアウォール > ファイアウォールオプション で、TurboVNC Viewer.appを「外部からの接続を許可」に設定し、再度上記コマンドを叩いてみたが、invalid privatekeyで接続失敗した。一応ファイアウォール自体をオフにするパターンも試したが、それもダメだった。
EMAN2のウェブサイト[4]やgoogleで見つかる他の適当なサイトにある次の方法を試してみた。
$ ssh <ユーザー名>@<サーバーipアドレス> -L5901:localhost:5901
をした後に、VNCクライアントを立ち上げてウィンドウに"vnc://localhost:5901"とか"localhost:5901"とか打ち込んでみたが、前者の場合は"Could not resolve hostname: vnc://localhost: nodename nor servname provided, or not known"で、後者の場合は"javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate"でダメだった。ちなみに前者のlocalhostを127.0.0.1に置き換えてもダメだった。
そうこうしているうちに、気がつくとサーバー側で compiz プロセスが7個、それぞれ100% CPUで走っていることに気づく。vncserver -kill :1 でvncセッションを殺しても解消されない。compizプロセスはkillで殺しておいた。
つらい。
参考文献
[1] https://gist.github.com/cyberang3l/422a77a47bdc15a0824d5cca47e64ba2
[2] https://solarianprogrammer.com/2018/09/28/installing-openjdk-macos/
[3] https://cdn.rawgit.com/TurboVNC/turbovnc/2.2.1/doc/index.html
[4] https://blake.bcm.edu/emanwiki/EMAN2/Remote