😺

VNCより高速な Remote Desktop (NoMachine NX)を使う

2022/10/13に公開

背景

リモートデスクトップを利用する祭、VNCよりも高速な NoMachineを使うとよい、という話題がSpeeding up macOS screen sharing? に出ていたので試してみた。以下のサイトが大変よくまとまっていた。

以下、リモートデスクトップ(接続先のホスト)を nxserver、クライアント側のホストを client と表記。

実行環境

  • MacBook Pro (Retina, 15-inch, Mid 2012) (nxserver)
  • MacBook Pro (13-inch, M1, 2020) (client)
  • macOS Monterey (12.4)

下準備

client から nxserver に ssh login ができることを確認しておく

インストール & 設定

macOS での実行例を示しているが、Linux (Debian等)でも後述するserver.cfgのパスが異なるだけでほぼ同じ設定でいける(クライアントはまったく同じ設定でOK)。

  1. NoMachine.dmg を展開して nxserver, client に install
  2. nxserver で NoMachine を起動し、設定を開く。[Security]の項目を以下の様に設定。
  3. client で NoMachine を起動し、[Settings] を押し、以下の変更を行う
    • [Status] の Share the desktop at server startup のチェックを外す
    • [Ports] の Start the automatic services at startup のチェックを外す
    • [Ports] の Advertise this computer on the local network のチェックを外す
    • 左上の [<] ボタンを押し一つ前に戻り、
    • [Player] → Input → Grab the keyboard input をON (Command-W で connection close しないようにするため必須)
  4. client の NoMachine で [<] ボタンを押し続けトップに戻り、 [+ Add] を押して以下のプロファイルを作成
    • Name: nxserver
    • Address: 127.0.0.1
    • Port: 14000
    • Portocol: NX
    • [Configuration] の Use password authentication を選択
    • [Configuration] の Use UDB communication for multimedia data のチェックを外す
    • 左上の [<] ボタンを押しトップに戻る
  5. client~/.ssh/config に以下を記述
    ~/.ssh/config
    Host nxserver
        HostName 192.168.1.1              # nxserverのIPアドレス or FQDN を記述
        LocalForward 14000 127.0.0.1:4000
    
  6. client から nxserver に ssh login ができることを確認
    client% ssh nxserver
    Password:       # パスワードを入力(公開鍵認証でももちろんOK)
    nxserver% exit  # 動作確認が完了したので logout しておく
    

使い方

client% ssh nxserver         # nxserver に ssh login
nxserver%                    # このシェルはそのままにしておく(logoutしない)

ここまでできたら client 側の NoMachine で作成した(上記手順4) nxserver アイコンをダブルクリックして nxserver に接続。ユーザ名とパスワードを聞かれるので入力すれば、nxserver のリモートデスクトップが表示される。macOS標準のVNC(Finderから呼び出す vnc://... )と比べると爆速

リモートデスクトップを使い終わったら client 側の NoMachine.app を終了し、上記手順6で ssh login していた nxserver から logout。

ssh 公開鍵のみの認証に変更

RSAにしか対応していないが、nxserver への接続を ssh 公開鍵のみの認証に変更できるのでやっておいた。具体的な手順は How to set up key based authentication with NX protocol の記述に従えばよいだけ。

サーバ側(nxserver)での設定

  1. nxserver にて以下を実行し、設定ファイルを用意
    nxserver% mkdir -p ~/.nx/config
    nxserver% touch ~/.nx/config/authorized.crt
    nxserver% chmod 0600 ~/.nx/config/authorized.crt
    
  2. nxserverclient の ssh 公開鍵を追加
    nxserver% vim ~/.nx/config/authorized.crt
    ## client の ssh 公開鍵(client:~/.ssh/id_rsa.pub の中身)をペースト
    
  3. パスワード認証を無効にする
    nxserver% sudo vim /Applications/NoMachine.app/Contents/Frameworks/etc/server.cfg
    ## AcceptedAuthenticationMethods の行を以下のように変更
    AcceptedAuthenticationMethods NX-private-key
    
  4. NoMachine(NXサーバ) を再起動
    nxserver% sudo /etc/NX/nxserver --restart
    

クライアント側(client)の設定

  1. clientNoMachine.app を起動
    • nxserver アイコンを右クリック -> [Edit connection]
    • [Configuration] -> [Use key-based authentication with a key you provide] を選択
    • [Modify] をクリックして、client の秘密鍵のパス (~/.ssh/id_rsa) を登録し、左上の [<] ボタンを2回押し、トップに戻る
  2. nxserver アイコンをダブルクリックし、公開鍵認証で接続できることを確認
  3. 上記手順5 を実行しないと、clientNoMachine.app で接続が蹴られる(パスワード認証が無効になっている)ことも確認

参考文献

Discussion