Daydreaming in Brookline, MA

自宅のMacからオフィスのLinuxマシンにリモートデスクトップする

1 はじめに

Covidもだいぶ収まってオフィスへの出入りが自由になりましたが、相変わらずリモートワークをしています。自宅にある会社支給のMacBookからオフィスのLinux (Fedora) PCにはVPN経由でsshするくらいで大抵は事足りるのですが、たまにfirefox等のGUIアプリが使いたくなります。

そんなユースケースでは、 NoMachine を使ってリモートのLinux PCのデスクトップ全体をローカルのMacBookに飛ばすやり方が評判良いですが、NoMachneはウインドウを一つだけ飛ばすことはできない(ですよね?)ようなので、別の方法を探ってみました。

2 X Fowarding

LinuxマシンのGUIはベースに X Window System (Wikipedia) が使われています。Fedora標準の GNOME もその下ではX Windowが動いています。X Windowのプロトコルを使ってウインドウをリモートマシンに飛ばすのにX Forwarding という技術が使えます。

MacにX Windowのウインドウを飛ばすために、Mac側に XQuartz をインストールします。なお、以下ではMAC用のパッケージ管理ツールである Homebrew (オススメです)を使っていますが、XQuartzのサイトから dmg ファイルをダウンロードしてインストールすることもできます。

brew install --cask xquartz

そして、sshコマンドの -X オプションを使ってfirefoxのようなアプリを指定すれば、リモートのLinuxマシン上でfirefoxを動かして、その画面だけをMacBookに表示させることができます。

ssh -X <user_id>@<remote_host_name> firefox

すると、XQuartzが自動で起動し、Macの画面にリモート実行しているfirefoxが出てきます。

実際にやってみると、ものすごく重いです。画面の描画が上から下に少しずつなされるのが見えます。これは使えませんね。。。

いろいろと検索したところ、sshに -C オプションを付けて転送データを圧縮するとマシになることがわかりました。早速やってみます。

ssh -X -C <user_id>@<remote_host_name> firefox

確かに描画は速くなりました。しかし、マウスオーバーしてメニューを開いたり、クリックしたときの反応がだいぶいまいちです。特に、少し時間をおいてからマウスオーバーでメニューを開こうとすると、0.5〜1秒くらいのタイムラグがあります。日常的に使うと随分ストレスがたまりそうです。

X Forwardingでsshに -C オプションを付けるだけだと圧縮率が全く足りず、モダンなGUIアプリケーションでの使用には耐えられないのですね。

3 X2Go (単一アプリウインドウ)

更に高速な方法が無いかと検索したところ、X2Go という技術を見つけました。これは、X Window のデータを圧縮し、更にキャッシュする、元々NoMachineが開発したのNXプロトコルのバリエーションを使っている そうです 。これを試してみます。

まずはリモートのLinux PCにX2Goサーバーを入れます。

sudo yum install x2goserver

次にX2Goクライアントです。X2Goクライアントは先程ローカルMacにインストールしたXQuartzを使います。そして更に、ローカルMacにX2Go Clientの最新版を ここ からインストールします。dmgファイルを右クリックしてインストーラーをオープンし、アプリのアイコンをApplicationフォルダーにドラッグ&ドロップすればインストール完了です。

X2Goクライアントを開くとSession preferencesの画面が開くので、以下の情報を入れます。なお、ここではsshキーのセッティングが終わっていて、リモートのLinux PCにパスワード入力なしでsshできる状態を想定していますが、代わりにユーザー名とパスワードを入れてもよいと思います。

  • Session name: <自由に付ける>
  • Host: <hostname>
  • Uses RSA/DSA key for ssh connectin: RSA又はDSAキーを指定します。なお、MacのFinderで .ssh のような隠しフォルダを表示するには Command + Shift + .(ピリオド) キーを同時に押します。
  • Session type: Single application
  • Command: firefox

X2Goのクライアント、サーバーをそれぞれインストールした後で早速試してみると、うまく動きました。さすがにX Windowを高速化する技術だけあってサクサク動きます。これなら十分日常使用に耐えられるスピードです。

X Forwardingと比べて画面が若干粗く見えますが、これで圧縮率をだいぶ稼いでいるようです。個人的には十分許容範囲内です。

4 X2Go(デスクトップ全体)

X2Goはそもそもリモートデスクトップアプリで、単一ウインドウの表示はごく一部の機能です。せっかくなのでデスクトップ全体を飛ばすことも試してみます。

Fedoraでは標準でGNOMEというデスクトップ環境が入っていますが、X2Goは最近のGNOMEをサポートして いない ようです。試してみると、エラーは出ないものの、サイレントにセッションが終了してしまいます。

そこで、他のデスクトップ環境、ここでは xfce4 をリモートのLinux PCに入れます。sshでリモートPCにログインして、以下を実行します。

sudo yum install @xfce-desktop-environment

長々とインストールが走り、完了します。

そして、先程のX2Go clientのSession preferencesの画面で Session typeを XFCE に設定してセッションを開くと、うまくリモートデスクトップの画面が開きました。全画面表示にも対応していて、スピードも申し分ありません。GNOMEのデスクトップではありませんが、十分にNoMachineの代わりになりそうです。