IT pass HikiWiki - [Exp2020]最低限リモートアクセス+α (X の利用) Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

[((<"2020 スケジュール表・各回資料(09/29)"|[Exp2020]スケジュール表・各回資料#09-2F29>))]


<目次>

{{toc_here}}

= 注意

このページの実習内容は, 自宅からのオンライン実習を想定しています.

また, このページでは itpass サーバを ika と呼ぶことにします. つまり,

  itpass サーバ == ika == itpass.scitec.kobe-u.ac.jp

です.


= 遠隔ログインでの X の利用

ここでは, 遠隔ログインにおいて「X を飛ばす (ウィンドウを飛ばす)」方法について実習します.

Linux では, 他の OS と同様に独自にウィンドウを開くアプリケーションがたくさん使われています (今となっては当たり前すぎるかもしれませんが).
しかし, ここまでに行ってきた遠隔ログインの実習では, 遠隔地の計算機でコマンドを実行したり, 遠隔地の計算機とファイルのやり取りをしましたが, 遠隔地の計算機で新しくウィンドウを開くようなアプリケーションを実行してはいません.

Unix/Linux では X Window System あるいは X と呼ばれるウィンドウシステムを採用し, その機能を用いてウィンドウを描画してアプリケーションが動作しています.
ssh でログインした遠隔地にある計算機で新たにウィンドウを開くアプリケーションが実行されると, X によるウィンドウの情報が ssh の通信を通して伝達され, 手元の計算機上に遠隔地のアプリケーションが生成するウィンドウが開かれることになります (補足 2 参照).

なお, このとき遠隔地から新たにウィンドウを開いてアプリケーションを実行する (ウィンドウを飛ばして実行する) ことを「X を飛ばす」と表現することがあります (以下そのように略記します).


== ssh を用いたリモートログインで X を飛ばす

X を飛ばすためには, ssh のリモートログインにおいて -X オプションを付ける必要があります.
つまり,

$ ssh -X -l [リモートホストのユーザ名] [サーバ名 or IP アドレス]

もしくは

$ ssh -X [サーバ名 or IP アドレス] -l [リモートホストのユーザ名]

もしくは

$ ssh -X [リモートホストのユーザ名]@[サーバ名 or IP アドレス]

です.

X を飛ばすためには, ssh の通信経路に X の情報を通さなければなりません. その指定のためのオプションが -X です.


では実際に試してみましょう.

:実習その 1: ika で xeyes を実行する.

自宅から ssh に -X オプションを付けて ika にログインしてください.
(MobaXTerm を用いているならば -X オプションを付ける必要はなく, いつものようにログインしてください.)

  [ユーザ名]@ika-itpass:~$

ここで X を用いたアプリケーション (新しいウィンドウを開くアプリケーション) を実行してみましょう.
そのようなアプリケーションのうちで入門時によく使われる定番に xeyes があります. xeyes はウィンドウ上にカーソルがある方向を示してくれるアプリケーションです.
下のように実行してみましょう.

  [ユーザ名]@ika-itpass:~$ xeyes &

自分の PC に「目玉」が表示されましたか?
表示されれば成功です.
(ところで "&" はどういう意味だったでしょうね? 忘れてしまったならば調べてみましょう.)

もし「目玉」が表示されずにエラーが表示されるならば, X を飛ばす設定ができていないことになります.
ssh に -X オプションを付けましたか?


:実習その 2: 情報実験機で xeyes を実行する.

自宅から ssh に -X オプションを付けて ika にログインしてください.
(MobaXTerm を用いているならば -X オプションを付ける必要はなく, いつものようにログインしてください.)

  [ユーザ名]@ika-itpass:~$

ここからさらに ssh に -X オプションを付けて情報実験機にログインしてみましょう.
その上で, 情報実験機で xeyes を実行してみましょう.

  [ユーザ名]@johoXX-itpass:~$ xeyes &

自分の PC に「目玉」が表示されましたか?

もし表示されれば, 文字情報だけでなく X (ウィンドウ) の情報が, まずは情報実験機から itpass サーバに ssh を通して伝達され, そこからさらに ssh を通して自宅の PC に無事に伝達されたわけです.


:実習その 3: -X オプションの効果を確かめる.

自宅から ssh に -X オプションを付けて ika にログインしてください.
(MobaXTerm を用いているならば -X オプションを付ける必要はなく, いつものようにログインしてください.)

  [ユーザ名]@ika-itpass:~$

それから ssh に -X オプションを*付けずに*情報実験機にログインしてみましょう.
その上で, 情報実験機で xeyes を実行してみましょう.

  [ユーザ名]@johoXX-itpass:~$ xeyes &

自分の PC に「目玉」が表示されましたか?

ここでは「目玉」は表示されないはずです.
どのようなエラーメッセージが表示されましたか?

X を飛ばす設定 (ssh に -X オプションを付ける) を忘れることは良くやってしまうミスです.
ここで表示されるエラーメッセージを是非頭の片隅に置いておきましょう.


:実習その 4: gnuplot でグラフを描く.

((<惑星学実験実習の基礎II|URL:https://itpass.scitec.kobe-u.ac.jp/hiki/hiki.cgi?惑星学実験実習の基礎II>)) では, gnuplot を使ってグラフを描く方法を学びました.
ここでは, ssh で情報実験機にログインし gnuplot を使ってグラフを描いてみましょう.

gnuplot はインストールされていないと思いますので, まずはインストールしなければなりません.
下のようにしてインストールしましょう.

  $ sudo apt install gnuplot

インストール出来たら,
例えば「gnuplot 練習問題」から自分の好きなデータを選んでグラフを描いてみましょう.
上で実習したことを使えば, 自分の PC でそのグラフを見ることができるはずです.

gnuplot の使い方は, ((<<こちら>|URL:https://itpass.scitec.kobe-u.ac.jp/hiki/hiki.cgi?惑星学実験実習の基礎II>)) を見て思い出しましょう.


= 補足 1

本実習では, Windows PC を用いている人は MobaXTerm を用いて ika へログインすることを推奨しています.
そして, 上では, ssh のログインでは -X オプションを付ける必要があると書いている一方で, MobaXTerm でのログインでは特別な指定は必要ないと書いています.
これは, MobaXTerm が ssh ログインの際に標準的に内部で -X オプション (に相当するもの) を使用しているためです.

= 補足 2

ここまでの説明では, ssh に -X を付けることで X を飛ばすことができると説明してきました.
しかし, X を飛ばす仕組みのすべてを説明してはいません.

Unix/Linux で採用している X Window System はサーバ・クライアント方式で動作しています. 「X サーバ」はディスプレイ・スピーカー・キーボード・マウスといった当該計算機の入出力を統括するソフトウェアです. これらの入出力機器を利用する個々のアプリケーションを, X サーバに対して依頼を出すものという意味で「X クライアント」と言います. 個々のアプリケーション, すなわち, X クライアントは X サーバに対してウィンドウをこれこれの位置にこれこれの大きさで表示しろだのキーボードからの入力を受け付けろだのの依頼を出すわけです. X サーバと X クライアントとのこういった様々な情報のやり取りを記すための手順を X プロトコルと言います. X Window System の特徴は, 手元の計算機内のみならず遠隔計算機との間でも区別なく情報のやりとりを行えるように X プロトコルを設計した, すなわち, ネットワーク透過な設計を実現した点にあります.

遠隔計算機上のアプリケーションが手元計算機のディスプレイにウィンドウを表示する場合には以下の三つの要素で構成されることになります.
* 遠隔計算機でアプリケーション, すなわち, X クライアントが動作する.
* 手元計算機でディスプレイを制御統括する X サーバが動作する.
* 手元計算機のサーバと遠隔計算機のクライアントとの間で X の通信が行われる.
遠隔計算機としての情報実験機や ika では, X クライアント (アプリケーション) が動作します.
ssh の -X オプションは, 手元計算機と遠隔計算機との ssh による安全な接続を介して, サーバとクライアントの間の X の通信を確立します. ssh は, X クライアントに対して, X サーバが動作する機材のIPアドレスやディスプレイ情報などを自動的に送ってくれます.  
しかし, X を飛ばすためにはもう一つの要素, 自分の PC 上で X サーバが動作していることが必要です.

macOS はそのベースが Unix に類する OS のため, X サーバがそもそも動作しています.
したがって, macOS から ssh に -X オプションを付けて情報実験機や ika にログインする場合には, 上の三つの要素が揃っています.

一方, Windows は Unix とは独自に作られた OS であり, それ自体では X サーバが動作していません (Windows は X プロトコルを解釈できません).
MobaXTerm は X サーバに相当する機能をあわせ持っていて, 遠隔計算機上のクライアントからの X サーバへの依頼を Windows が解釈できる依頼に翻訳してくれるため, それを用いることで上の三つの要素を揃えることができ, X を飛ばすことができるのです.

Windows 用のアプリケーションには, MobaXTerm 以外にも ssh で X の通信を伝達できるものがあります. 例えば ((<TeraTerm|URL:https://ttssh2.osdn.jp/>)) や ((<Putty|URL:https://www.putty.org/>)) というアプリケーションは, 設定によって ssh を通した X の通信が可能です.
しかし, TeraTerm や Putty は, それ自身が X サーバの機能を持つわけではないため, それだけでは X を飛ばすための三つの要素を揃えることができません.
三つの要素を揃えるためには, Windows 上で X サーバの機能を実現する別のアプリケーションが必要です.

X サーバの機能を果たす Windows 用のアプリケーションもいくつか作られています. ((<Xming|URL:http://www.straightrunning.com/XmingNotes/>)) はその一つです.
したがって, Xming を使いつつ, X の通信を伝達できる設定で TeraTerm や Putty を使えば三つの要素を揃えることができて X を飛ばすことができます.

(TeraTerm + Xming や Putty + Xming より MobaXTerm 一つのみで済む方が簡単なので, 本実習では MobaXTerm の利用を推奨しています.)


#= 補足 3
#
#上で, X Window System がサーバ・クライアント方式で動作していることを書きました.
#例えば, 手元の PC (Windows でも macOS でも) から ika に ssh でログインして, ika で xeyes を実行することを考えましょう.
#このとき, 手元の PC と ika のどちらがサーバでどちらがクライアントでしょうか?
#
#多くの人は, xeyes が動作する ika がサーバで, その動作の結果である「目玉」が表示される手元の PC がクライアントと考えるでしょう.
#多くのサーバ・クライアント方式の考え方ではその通りで, サービスを提供する側 (上の場合は xeyes が動作している計算機) をサーバ, サービスを提供されている側 (上の場合は「目玉」が表示されている計算機) をクライアントと呼びます.
#
#しかし, X Window System の設計では逆です.
#上の例では, 手元の PC がサーバで, ika がクライアントとなります.
#これは, 手元の PC で X が動作しており, ika は X のアプリケーションを提供しているからです.
#
#詳しくは, 例えば((<<ここ>|URL:http://www.astec-x.com/FAQ/aboutx.html>))を参照すると良いかもしれません.


= 補足 3

上の説明では, 手元の PC から情報実験機や ika に遠隔ログインする状況を想定しています.
つまり, X Window System のサーバとクライアントが別の計算機にある状況です.

しかし, 仕組みとしては, このサーバとクライアントは別の計算機にある必要は無く, 同じ計算機上にある場合でも全く同様に「通信」して機能しています.
#実際, 一つの計算機の中でも X のサーバとクライアントは別のアプリケーション (プロセス) として起動していて, 一つの計算機の中でサーバとクライアントが通信することでウィンドウが動作しています.

もちろん, この時にはサーバとクライアントの間の通信は ssh を通す必要はありませんので, その分だけ動作が少し「簡単」かもしれませんね.



[((<"2020 スケジュール表・各回資料(09/29)"|[Exp2020]スケジュール表・各回資料#09-2F29>))]