Table of Contents
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の代わりになりそうです。