この Web ページは、Smart Zynq ボードの機能を探求する小規模プロジェクトのグループに属しています。
このプロジェクトは、HelloFPGA にも掲載されています。中国語の読者にはそちらをおすすめします。また、このページで説明する方法を示す短い動画もあります。
はじめに
Linux コンピュータでは、グラフィカルソフトウェアが別のコンピュータ上にウィンドウを開くことができます。言い換えれば、ソフトウェア(たとえば Google Chrome)はあるコンピュータ上で動作しますが、このソフトウェアのユーザーは別のコンピュータの前に座っています。Microsoft Windows にも同様のソリューションはありますが、これらのソリューションは通常、ユーザーエクスペリエンスが良くありません。リモートからの作業には、Linux の方がはるかに適しています。
この機能は、あまり使われることはありません。人々は通常、自分のコンピュータまたはラップトップで作業するからです。しかし、モニタが接続されていないコンピュータの場合、この機能は役立ちます。
このチュートリアルでは、マウス、キーボード、モニタが Microsoft Windows コンピュータに接続された状態で、Xillinux 上でグラフィカルソフトウェアを実行する方法を説明します。
X サーバ
Linux デスクトップの基盤は X Window System です。これは非常に古いソフトウェアですが、今日でもよく動作します。Microsoft Windows コンピュータとは異なり、グラフィカルインターフェースは X サーバ (X server) を基盤としています。X サーバは、TCP/IP サーバを実装する通常のコンピュータプログラム(ユーザースペースで動作します)です。このサーバは通常、ポート 6000 を待ち受けます。コンピュータの画面上にウィンドウを表示したいプログラムは、TCP/IP 経由でこのサーバに接続します。すべてのグラフィカル情報は、この TCP/IP 接続を通じて送信されます。ユーザーのキー入力とマウスの動きも、この接続を通じて送信されます。
ウィンドウを制御するプログラムは、同じコンピュータ上でも別のコンピュータからでも実行できます。接続が TCP/IP に基づいているため、これは問題になりません。
現在のほとんどの Linux コンピュータでは、別のコンピュータから TCP/IP 経由で X サーバに直接接続することはできません。この機能は、セキュリティ上の懸念から無効になっています。さらに、2 台の Linux コンピュータ間でこのような接続を行うための安全な代替手段「ssh -X」があります。それでも、Linux コンピュータ上で実行されるグラフィカルプログラムは、通常、別のコンピュータのディスプレイに接続できます。
したがって、Microsoft Windows コンピュータ上で X サーバを実行すると便利です。この X サーバにより、別のコンピュータ上で動作するプログラムが、Microsoft Windows コンピュータ上に GUI インターフェースを表示できるようになります。ここでは 2 つの選択肢を紹介します。最初に、完全な Linux デスクトップを Microsoft Windows コンピュータ上に表示します。次に、Linux コンピュータ上で動作するコンピュータプログラムに属するウィンドウを 1 つだけ表示します。
準備
まず、vcxsrv をダウンロードしてインストールします。インストール手順は、他の Microsoft Windows アプリケーションと同じです。
次のステップとして、Microsoft Windows を実行しているコンピュータの IP アドレスを調べます。コマンドプロンプトで ipconfig を次のように実行します。
> ipconfig
Windows IP Configuration
Ethernet adapter Ethernet:
Connection-specific DNS Suffix . :
IPv4 Address. . . . . . . . . . . : 192.168.1.11
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.3
次のステップは、Microsoft Windows Defender ファイアウォールをオフにすることです。そうしないと、Xillinux 上で実行されるコンピュータプログラムが X サーバに接続できません。実際には、Xillinux からの ping も失敗します。
言うまでもなく、ファイアウォールをオフにすると、コンピュータはネットワークからの攻撃に対して脆弱になります。したがって、これを実行する前に、コンピュータネットワークが外部ファイアウォールによって保護されているかどうかを検討することをお勧めします。
「Windows Defender ファイアウォールの有効化または無効化」の画面に移動します。
次に、ファイアウォールをオフにします。
ファイアウォールをオフにしたら、Xillinux ボードが Microsoft Windows コンピュータに接続できることを確認してください。たとえば、Xillinux 上で ping を試します。
root@localhost:~# ping 192.168.1.11 PING 192.168.1.11 (192.168.1.11) 56(84) bytes of data. 64 bytes from 192.168.1.11: icmp_seq=1 ttl=128 time=0.797 ms 64 bytes from 192.168.1.11: icmp_seq=2 ttl=128 time=0.790 ms 64 bytes from 192.168.1.11: icmp_seq=3 ttl=128 time=0.782 ms ^C --- 192.168.1.11 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.782/0.789/0.797/0.033 ms
Microsoft Windows 上で Linux デスクトップを実行する
vcxsrv を起動するには、XLaunch というアイコンをクリックします。
最初のポップアップウィンドウ:
- 「One Large Window」を選択します。
- Display number については、ゼロを選択します。デフォルトの -1 は、プログラムがサーバ番号を選択できるようにするものです。これは混乱を招く可能性があります。
2 つ目のポップアップウィンドウ:「Start no client」を選択します。
3 つ目のポップアップウィンドウ:「disable access control」を選択します。これにより、Xillinux ボードから接続できるようになります。
これら 3 つのポップアップウィンドウの後、vcxsrv は大きく空のウィンドウを開きます。このウィンドウの中はすべて黒です。
次に、この大きなウィンドウを Xillinux のデスクトップで埋めましょう。Xillinux ボード上のシェルで次のように入力します。
root@localhost:~# DISPLAY=192.168.1.11:0 /etc/X11/Xsession
このコマンドの数秒後に、グラフィカルデスクトップが Microsoft Windows コンピュータ上に表示されます。
ssh を使ってデスクトップを起動することもできます。たとえば、Xillinux ボードの IP アドレスが 192.168.1.123 であるとします。このコマンドは、(Microsoft Windows コンピュータの)コマンドプロンプトウィンドウで使用できます。
> ssh root@192.168.1.123 "DISPLAY=192.168.1.11:0 /etc/X11/Xsession"
ssh を使用する前に、root ユーザーのパスワードを設定しておく必要があります。
vcxsrv のウィンドウ内でコピーを行い、Microsoft Windows 内の通常のウィンドウで貼り付けを行うことができます。逆方向も可能です。
「/etc/X11/Xsession」はデスクトップを起動するコマンドです。「DISPLAY=192.168.1.11:0」は環境変数に値を代入します。これにより、プログラムはリモートコンピュータに接続するように指示されます。
DISPLAY の代入は 2 つの部分で構成されます。最初の部分は IP アドレス(この例では 192.168.1.11)です。2 番目の部分は Display number です。vcxsrv を起動したとき、Display number にゼロを選択したことを思い出してください。これが、DISPLAY の 2 番目の部分が「:0」である理由です。これは、TCP クライアントにポート 6000 へ接続するよう指示します。別の Display number を選択した場合は、それに応じて DISPLAY を変更する必要があります。たとえば、Display number が 5 の場合、DISPLAY は「192.168.1.11:5」にすべきです。この場合、TCP クライアントはポート 6005 への接続を試みます。
Microsoft Windows 上で Linux のウィンドウを 1 つ開く
次に、Xillinux 上でグラフィカルなコンピュータプログラムを実行し、そのウィンドウを Microsoft Windows コンピュータ上で開く方法を説明します。
前回と同様に vcxsrv を起動しますが、1 つだけ異なる点があります。「One Large Window」を選択する代わりに、「Multiple Windows」を選択します。この違い以外は、前回と同じ選択をしてください。
前回とは異なり、3 つのポップアップウィンドウの後に新しいウィンドウは開きません。設定が完了すると、何も起こらないように見えます。しかし、これは誤解を招きます。X サーバは実行されており、要求を待っています。
たとえば、Xillinux 上でこれを試してください。
root@localhost:~# DISPLAY=192.168.1.11:0 gnome-text-editor &
これにより、Microsoft Windows コンピュータ上でテキストエディタが起動します。ターミナルウィンドウを起動することもできます。
root@localhost:~# DISPLAY=192.168.1.11:0 lxterminal &
この方法でターミナルウィンドウを開くことには利点があります。以降、「DISPLAY=192.168.1.11:0」の部分を追加する必要はありません。このターミナルで起動するすべてのコマンドのデフォルトになるからです。
前述のように、ssh 経由でコマンドを送ることもできます。ターミナルウィンドウを起動するには、Microsoft Windows のコマンドプロンプトで次のように入力します。
> ssh root@192.168.1.123 "DISPLAY=192.168.1.11:0 lxterminal"
前回と同様に、この例では Xillinux ボードの IP アドレスが 192.168.1.123 であると仮定しています。
残念ながら、X サーバをシャットダウンする簡単な方法はないようです。X サーバがこのモードで実行されている場合、プログラムを表すウィンドウはありません。したがって、サーバを停止する方法はタスクマネージャーを使うことです。「VcXsrv windows xserver」という名前のタスクを見つけ、「タスクの終了」(End Task) をクリックします。





