VNCでリモートデスクトップ(Ubuntu-MacOS編)

提供: Eospedia
2019年5月12日 (日) 10:05時点におけるKttn (トーク | 投稿記録)による版

移動: 案内検索
  • 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 <ユーザー名>

rootユーザーも追加する必要がある様。

$ sudo usermod -a -G vglusers root

再度再起動

$ sudo shutdown -r now
  • 再起動後
$ sudo xauth merge /etc/opt/VirtualGL/vgl_xauth_key
$ xdpyinfo -display :0
$ /opt/VirtualGL/bin/glxinfo -display :0 -c

テキストが色々出力される。何を確認すればいいのかよくわからない。

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クライアント.png

接続
サーバー側で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