CygwinインストールとX Server設定


CygwinはWindows環境で動作するLinux/UNIXのコマンドラインとサーバソフトウェアを再現させるツールです。このツールを使う事で、Linuxライクなコマンドライン操作やX Serverを利用した画像描画が可能になります。

Linux/UNIXは基本的にはコマンドラインが中心ですが、中にはOracle, JMeter, KVMのようにGUIを前提とするアプリケーションも存在します。このようなアプリケーションを操作する場合は、X Serverを使用して画像を描画可能な状態にしなければなりません。

Linux, MacをクライアントPCとして利用する方は容易にX Serverに接続する事ができますが、Windowsの方はX Serverのインストールと起動を行わなければなりません。Windowsでは無償で不具合の少ないX Serverは少なく、Cygwinは数少ない「まともに動く」X Serverのひとつです。

Cygwinのダウンロード

ブラウザで以下URLのCygwin公式サイトを開きます。

  • https://cygwin.com/

画面左メニューの「Install」を押下します。

cygwin_download_001

CPUアーキテクチャに合わせ、「setup-x86.exe」「setup-x86_64.exe」のいずれかをダウンロードします。

cygwin_download_002

Cygwinのインストール

上記手順でダウンロードしたexeファイルを実行します。

「次へ」を押下します。

cygwin_install_001

「次へ」を押下します。

cygwin_install_002

「次へ」を押下します。

cygwin_install_003

「次へ」を押下します。

cygwin_install_004

プロキシ設定の画面です。プロキシを使わない方は、デフォルトの「Direct Connection」のまま「次へ」を押下します。

プロキシを使用せざるを得ないお堅い勤務先の方は、「Use Internet ExplorerProxy Settings」「Use HTTP/FTP Proxy」のいずれかを選択し、「次へ」を押下します。

cygwin_install_005

インストールするパッケージを選択する画面です。デフォルトでは全てのパッケージが「Default」と表記されています。この「Default」を押下すると「Install」に切り替わり、パッケージがインストールされるようになります。

cygwin_install_006

デフォルト設定では、vimもsshもrsyncもインストールされていない不便な環境になってしまいます。必要なアプリケーションやコマンドがどのパッケージ群に含まれているかを調べるには、画面上部の「Search」をご利用ください。

cygwin_install_007

全てをInstallにするとダウンロードに非常に時間がかかりますし、ディスクスペースを圧迫します。必要そうなパッケージ群のみインストールすると良いでしょう。

何をインストールするかは好みが分かれる所ですが、私がインストールしているパッケージ群を参考情報として紹介します。「SHELL」に含まれるbash_completionは入力補完が効く便利ツールですが、Windows Cygwin環境では動作が遅くなる可能性がある事に注意して下さい。

パッケージ群説明
Basesed, tar, whichなど何かと便利なコマンド群を含んでます。
Develmake, gccなどのコンパイルに必要な環境を整えます。
Editorvim, emacsなどエディタを含みます。
Netssh, rsyncなどのネットワーク接続関連のコマンドを含んでいます。
Utilswgetなどの便利なコマンドを含んでいます。
X11X Serverを起動できるようになります。

パッケージの選択が完了しましたら、「次へ」を押下します。

cygwin_install_008

「次へ」を押下します。

cygwin_install_009

パッケージのダウンロードとインストールが完了するまで待ちます。性能不足なProxyを使わざるを得ない勤務先の場合ならば、インストールに半日以上かかる場合もあります。

cygwin_install_010

「完了」を押下します。

cygwin_install_011

デスクトップにCygwinのアイコンが作成された事を確認します。

cygwin_install_012

Cygwin設定

minttyのカスタマイズ

デスクトップにsygwinのアイコンが現れます。これはcygwinに同梱されているminttyと呼ばれるターミナルソフトです。cygwinは、コマンドプロンプトやTeraTermなど他のターミナルソフトで操作する事もできますが、minttyも一部の方には根強い人気があります。

minttyは最小限の機能を備えたシンプルなターミナルソフトです。TeraTermやPutyyのような高機能はありませんが、cygwinと連携される手間なく、すぐに使用できるのは大きな魅力です。

以下、minttyを自分好みの環境に変更する方法について説明します。画面上部にカーソルを合わせ右メニューを表示し、「Options」を押下します。

cygwin_mintty_001

他のターミナルソフトと同様に、フォントサイズの設定やコピペ時の挙動などを定義する事ができます。

cygwin_mintty_002

Cygwinの環境設定

Redhat系Linuxのllのようなaliasに慣れている方もいるかもしれません。また、自分専用のaliasを使いまくる人もいるかもしれません。そのような方は、/etc/bash.bashrcを編集する事でalias登録を自動化する事ができます。/etc/bash.bashrcの設定例は以下の通りです。

起動時に読み込まれるファイルの順番については説明を省略します。環境や設定によっては、読み込まれる順番が変わる事に注意して下さい。

細かい説明は他のブログにお任せしますが、お好みに合わせて以下のような設定を行う方もいます。

  • SSH関連の設定 (鍵の配置や.ssh/configなど)
  • ログインシェルの変更 : zshに慣れている人はbashから変更しておくと良いでしょう。
  • bash_completionの微調整 (cygwin版bash_completionは読込に非常に時間がかかりストレスフルです。貧弱なマシンの方は、bash_completionをアンインストールしたりアレンジしたりするのも良いでしょう)

環境変数 PATHの設定

この設定は便利な反面、既存のアプリケーションを壊してしまうリスクがあります。リスクを理解している人のみ使用して下さい。

環境変数PATHにcygwinのbinディレクトリを含める事によって、コマンドプロンプトからcygwinのコマンドを利用できるようになります。

cygwin_mintty_003

ただし、この設定は既存環境を壊すリスクがある事を理解ください。例えば、GNS3というネットワークエミュレータはpython3を使用しますが、cygwinにpython2をインストールしpython3よりも優先的に呼び出されるようになれば、GNS3は動作しなくなります。pythonに限らず、ruby, php, javaなどあらゆるランタイム(実行環境)が影響を受ける事に注意して下さい。

X Serverの起動および接続

X Serverの起動 ( Windows側の操作 )

mintty(またはcygwin操作が可能なターミナルソフト)を起動し、”startx”コマンドを実行します。

cygwin_start_001

以下のようなX windowが起動する事を確認します。

cygwin_start_002

X Serverの接続許可 ( Windows側の設定 )

X Serverはクライアント端末で起動するサーバソフトウェアです。遠隔に存在するLinuxサーバのX Clientがクライアント端末のX Serverに接続します。どのようなX Clientからの接続からも許可してしまうのはセキュアではないので、デフォルト設定では全てのX Clientからの接続を拒否しています

X Clientからの接続を許可するには、xhostコマンドを使用します。以下のようにxhost + と入力すると、全ホストからの接続を許可します。

xhostコマンドにより設定を確認できます。「access control disabled」と表示されている事を確認します。

以下のように特定のホストからの接続のみを許可するように設定する事も可能です。

X Clientの接続許可 ( Linux側の設定 )

sshd_config – X11Forwarding

X Clientは、ssh接続を試みたホストに対して、X Serverの接続を試みます。X Serverの接続を試みるかどうかは、/etc/ssh/sshd_configに記載されています。「X11Forwarding」がyesとなっている事を確認ください。デフォルト設定は、OSディストリビューションやクラウド事業者によって異なりますので、注意が必要です。

設定変更を行った場合は、sshd再起動により設定を反映させます。

xauth インストール

xauthは、X ClientとX Server間のセキュアな通信を行うための認証パッケージです。xauthがインストールされているかどうかをrpmコマンドを利用して調べます。

xauthがインストールされていない場合は、yumコマンドなどを利用してxauthをインストールします。パッケージ名はディストリビューションによって異なる可能性がありますので、適宜変更して下さい。

環境変数 XAUTHORITYの引継ぎ ( sudo を必要とする環境のみ )

sudoを必要とするコマンドのX Server接続はやや注意が必要です。XAUTHORITYに関する設定に気を付けないと、”X11 connection rejected because of wrong authentication.”とのエラーメッセージが出力されます。

X Serverに接続する際はxauthの認証情報を使用しますが、認証情報は以下の順に探されます。

  • 環境変数「XAUTHORITY」で指定されたファイル
  • ${HOME}/.Xauthority

上記エラー出力を詳しく解説します。Oracleユーザで接続したので認証情報は/home/oracle/.Xauthorityに保存されます。しかし、「sudo virt-manager」コマンドを実行した時に使用される認証情報は/root/.Xauthorityになります。そのため、エラーが発生してしまいます。

このエラーを回避するには、明示的にXAUTHORITY変数を設定して下さい。実行例は以下の通りです。

XAUTORITYの設定が手間な方は、./bashrcなどを利用するもの良いでしょう。

X Serverへの接続

Linuxサーバへsshに-Xまたは-Yオプションを付与して接続します。-Xと-Yの違いは後程説明しますが、トラブルが少ないのは-Yオプションです。

以下のようなコマンドでSSH接続を行って下さい。

cygwin_start_003

適当なGUIアプリケーションを起動できる事を確認します。

cygwin_start_004

Tips

sshオプション -Xと-Yの違い

X Window Systemが開発された当初は、ハイスペックなマシンを全員で共同利用し、画像描画は各自のクライアントマシンを利用する想定の設計思想でした。全員で共同利用するマシンは多くの人がログインするので、もしかしたらマシンを利用する人の中には悪意をもった人がいるかもしれません。

そのような背景から、Xを転送する場合は転送元(X Client)を「信頼するか」「信頼しないか」を設定できるようになりました。この設定は/etc/ssh/ssh_configの「ForwardX11」「ForwardX11Trusted」で制御する事が可能です。もし、転送元(X Client)を「信頼しない」とすれば、セキュアな仕様になる反面、X ClientのDISPLAY設定を無視したり20分毎に認証トークンを発行したりと何かと不便が生じます。

この「ForwardX11Trusted」設定を使用するか否かが-Xと-Yの違いです。-Xは「ForwardX11Trusted」の指定通りに動作しますが、-Yは「ForwardX11Trusted」を無視して無条件にX Clientを信頼します。今日では、X Clientを信用しない要件は滅多にないと思いますので、特別な理由がない限りは-Yを使った方がトラブルが少ないと思われます。

 意味
-Xssh_configの「ForwardX11Trusted」に基づいて、クライアントを信頼するかどうかを決めます。ForwardX11Trustedがnoとなった場合は、X11転送の一部処理に制限が生じ、一部アプリケーションが動作しない可能性があります。
-Yssh_configの「ForwardX11Trusted」に関わらず、クライアントを信頼します。全てのX11転送処理を許可するので、-Xに比べてトラブルの少ない設定となります。

X Server接続のトラブルシューティング

デバッグメッセージの出力

X Server接続のトラブルシューティングを行うには、sshに-vオプションをつけると良いでしょう。-vをつける事によってデバッグメッセージが出力されます。-vを多くつければつける程、より多くのデバッグメッセージが出力されます。

Remote: No xauth program; cannot forward with spoofing. ( xauth 未インストール)

xauthが未インストールの場合は、”No xauth program”と表示されます。

X11 forwarding request failed

X ClientからX Serverへの画像転送リクエストに失敗した場合は、”X11 forwarding request failed”と表示されます。/etc/ssh/sshd_configでX11Forwardingが許可されていない場合やxauthが未インストールである場合などに表示されます。

untrusted X11 forwarding setup failed

一見するとエラーのように見えますが、単なる警告文でエラーではありません。-Xオプションで接続した場合は、「信頼されないホスト」からのX11転送の一部処理を拒否する旨を警告するメッセージです。

このメッセージが気持ち悪い方は、ssh -Yで接続するようにしましょう。

X11 connection rejected because of wrong authentication

認証情報に誤りがある事を表すメッセージです。sudo実行の場合は、認証情報の取り扱いが難しいので、設定ファイル/.Xauthorityや環境変数XAUTHORITYを見直しましょう。

動作確認環境

動作確認環境は以下の通りです。

  • 動作確認日 : 2015/03/12
  • Windows 8.1 64bit (VMware Player)
  • Cygwin 2.870 ( 64bit )
  • Cygwin X server 1.17

シェアする

  • このエントリーをはてなブックマークに追加

フォローする