実際にCygwinでX11環境を使ってみよう。
CygwinでX Window/XFree86ではなくX.orgのX WINDOW SYSTEMを使用することが出来ます。
利用できるX WINDOW SYSTEMバージョンはX11R6.3です。
まずユーザ設定ファイルをcp /etc/X11/xinit/xinitrc ~/.xinitrcと cp /etc/X11/xdm/Xresources ~/.Xresources を実行してユーザ設定ファイルを用意します。
日本語キーボードとキーマップが異なって、うまく操作できない場合はhttp://www.atmarkit.co.jp/flinux/special/cygwin/cygwin02d.htmlからxmodmap.jpをとってきて、~/.xmmodmap
にコピーすると日本語キーボードのキーバインドが使えるようになります。
また、キーコードを知りたい場合はX環境のターミナルからxev
というコマンドで調べることが出来ます。
bashの場合、~/.bash_profile
の環境変数PATH
に/usr/X11R6.4/bin
を追加しておきますと、cygwinを起動したときにX11のコマンドパスを検索してくれるようになります。
またWindowsのスタートアップメニュからX Window Systemのアプリケーションを起動したい場合は、~/.bash_profile
ではなく、Windows側で環境変数PATHにCygwinのパスを追加しておきます。
環境変数をexport DISPLAY=$(hostname):0.0
とかすればよさそうですが、$(hostname)
を用いたのでは、ホストネームがセットされることになるのでDNSからアドレス参照きが必要になってしまうことになります。
DNSがローカルアドレスの紹介を行わなかったり、そもそもDNSを運用していないところでは、export DISPLAY=$(hostname):0.0
は非力であります。
そこで何とかIPアドレスを環境変数にセットしたいものであります。Windowsではネットワークの設定を参照するのにIPCONFIG
というコマンドがありまして、IPアドレスの確認ができます。
C:\home\om>IPCONFIG Windows 2000 IP Configuration Ethernet adapter ローカル エリア接続: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.2.120 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.2.1 C:\home\om>
このIPCONFIG
の出力を加工してIPアドレスだけを切り出して出力すれば、特にプログラミングもする必要もなしに、IPアドレスを環境変数DISPLAYにセットできるだろうということになります。
とりあえず、IPアドレスの行だけ出力するにはGNU grepを使ってしまうのが簡単ですので、とりあえずIPCONFIG
の出力をgrep
の入力にパイプしてあげることにします。
C:\home\om>ipconfig |grep "IP Address" IP Address. . . . . . . . . . . . : 192.168.2.120 C:\home\om>
192.168.2.120よりも手前の文字列 IP Address. . . . . . . . . . . . : が邪魔ですので、さらにGNU sedにパイプして文字列を編集してしまえばIPアドレスだけの文字列になるということです。
ということで環境変数IP_ADDRESSを用意して、IP_ADRESSにディスプレイ番号を足したのをDISPLAYに代入すれば良いということになります。
環境変数DISPLAYは以下のように(~/.bashrcなどの)スクリプトを記述すればすれば、自動的にセットできるようになる
export IP_ADDRESS=$(ipconfig |grep "IP Address" |sed -e "s/.IP\sAddress\.\s\.\s\.\s\.\s\.\s\.\s\.\s\.\s\.\s\.\s\.\s\.\s:\s//" |sed -e "s/\r//")
export DISPLAY=$IP_ADDRESS:0.0
X WINDOWの起動はコマンドstartxを実行します。
X-Windowが動き出しますと、Xサーバの出力画面は環境変数DISPLAYで指定したパソコンのアドレス及び画面階層に描写されます。
デフォルトの設定で起動した場合は、ウィンドウマネージャがXサーバXWin.exeにビルドインされたWidnows統合ウィドウマネージャになっております。
画面には時計の横にXのアイコンが並んで、デスクトップ上にはXTermがターミナルウィンドウとして一つ起動します。このターミナルウィンドウでexitを実行するとX-Windowを終了することが出来ます。
gtk2+に関係する環境変数PKG_CONFIG_PATHをセットします。現在のPKG_CONFIG_PATHを確認するにはecho $PKG_CONFIG_PATHを打ち込んで実行します。
たぶんCygwinのセットアップからgnomeやgtk関係のアプリケーションをインストールした初期の状態では/usr/X11R6/lib/pkgconfig
ぐらいしかセットされていないでしょう。gtk+環境を十分に機能させるにはpkgconfigのパスを全て列挙させる必要があります。
たとえば以下のようなコードを~/.bash_profile
等に書き加えておます。
PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/X11R6/lib/pkgconfig"
export PKG_CONFIG_PATH
スタートメニューやデスクトップにあるアイコンをクリックしてCygwinのX環境を起動する場合は、アイコンに関連付けられているバッチファイルstartxserver.bat
に上述の環境変数を以下のように書き加えておきます。
SET PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/X11R6/lib/pkgconfig"
もちろんconfigure --prefix=/usr/local
など自前ビルドで追加インストールしたばあいも、追加されたpkgconfigのパスを列挙する。
コマンドプロンプトやWindowsアプリケーションからCygwinをちゃんぽんに使う場合はコントロールパネルのシステムからWindowsの環境変数にPKG_CONFIG_PATHを設定するひつようがあります。
デフォルトのウィンドウマネージャはWindows統合ウィンドウマネージャで、ルートウィンドウはWindowsのデスクトップなのでWindowsと親和性が高いGUIといえるかもしれません。
でもWindowsのデスクトップが見えるのが嫌いだとか、X Windowのウィンドウマネージャデスクトップを利用したい場合には、Xサーバの起動オプションを変更することで、外部ウィンドウマネージャも利用できます。
CygwinにおけるXサーバの起動オプションは実に多彩であります。Webで公開されているドキュメントよりもはるかに多いように思えます。
$ xwin --help -a # mouse acceleration (pixels) -ac disable access control restrictions -audit int set audit trail level -auth file select authorization file bc enable bug compatibility -br create root window with black background +bs enable any backing store support -bs disable any backing store support -c turns off key-click c # key-click volume (0-100) -cc int default color visual class -co file color database file -core generate core dump on fatal error -dpi int screen resolution in dots per inch -deferglyphs [none|all|16] defer loading of [no|all|16-bit] glyphs -f # bell base (0-100) -fc string cursor font -fn string default font name -fp string default font path -help prints message with these options -I ignore all remaining arguments -ld int limit data space to N Kb -lf int limit number of open files to N -ls int limit stack space to N Kb -logo enable logo in screen saver nologo disable logo in screen saver -nolisten string don't listen on protocol -noreset don't reset after last client exists -reset reset after last client exists -p # screen-saver pattern duration (minutes) -pn accept failure to listen on all ports -nopn reject failure to listen on all ports -r turns off auto-repeat r turns on auto-repeat -render [default|mono|gray|color] set render color alloc policy -s # screen-saver timeout (minutes) -sp file security policy file -su disable any save under support -t # mouse threshold (pixels) -terminate terminate at server reset -to # connection time out -tst disable testing extensions ttyxx server started from init on /dev/ttyxx v video blanking for screen-saver -v screen-saver without video blanking -wm WhenMapped default backing-store -x string loads named extension at init time -maxbigreqsize set maximal bigrequest size +extension name Enable extension -extension name Disable extension -query host-name contact named host for XDMCP -broadcast broadcast for XDMCP -indirect host-name contact named host for indirect XDMCP -port port-num UDP port number to send messages to -from local-address specify the local address to connect from -once Terminate server after one session -class display-class specify display class to send in manage -cookie xdm-auth-bits specify the magic cookie for XDMCP -displayID display-id manufacturer display ID for request The X Keyboard Extension adds the following arguments: -kb disable the X Keyboard Extension +kb enable the X Keyboard Extension [+-]accessx [ timeout [ timeout_mask [ feedback [ options_mask] ] ] ] enable/disable accessx key sequences -ar1 set XKB autorepeat delay -ar2 set XKB autorepeat interval -noloadxkb don't load XKB keymap description -xkbdb file that contains default XKB keymaps -xkbmap XKB keyboard description to load on startup -depth bits_per_pixel Specify an optional bitdepth to use in fullscreen mode with a DirectDraw engine. -emulate3buttons [timeout] Emulate 3 button mouse with an optional timeout in milliseconds. -engine engine_type_id Override the server's automatically selected engine type: 1 - Shadow GDI 2 - Shadow DirectDraw 4 - Shadow DirectDraw4 Non-Locking -fullscreen Run the server in fullscreen mode. -refresh rate_in_Hz Specify an optional refresh rate to use in fullscreen mode with a DirectDraw engine. -screen scr_num [width height [x y] | [[WxH[+X+Y]][@m]] ] Enable screen scr_num and optionally specify a width and height and initial position for that screen. Additionally a monitor number can be specified to start the server on, at which point, all coordinates become relative to that monitor (Not for Windows NT4 and 95). Examples: -screen 0 800x600+100+100@2 ; 2nd monitor offset 100,100 size 800x600 -screen 0 1024x768@3 ; 3rd monitor size 1024x768 -screen 0 @1 ; on 1st monitor using its full resolution (the default) -lesspointer Hide the windows mouse pointer when it is over an inactive Cygwin/X window. This prevents ghost cursors appearing where the Windows cursor is drawn overtop of the X cursor -nodecoration Do not draw a window border, title bar, etc. Windowed mode only. -mwextwm Run the server in multi-window external window manager mode. -internalwm Run the internal window manager. -rootless Run the server in rootless mode. -multiwindow Run the server in multi-window mode. -multiplemonitors EXPERIMENTAL: Use the entire virtual screen if multiple monitors are present. -clipboard Run the clipboard integration module. Do not use at the same time as 'xwinclip'. -nounicodeclipboard Do not use Unicode clipboard even if NT-based platform. -scrollbars In windowed mode, allow screens bigger than the Windows desktop. Moreover, if the window has decorations, one can now resize it. -[no]trayicon Do not create a tray icon. Default is to create one icon per screen. You can globally disable tray icons with -notrayicon, then enable it for specific screens with -trayicon for those screens. -clipupdates num_boxes Use a clipping region to constrain shadow update blits to the updated region when num_boxes, or more, are in the updated region. Currently supported only by `-engine 1'. -[no]unixkill Ctrl+Alt+Backspace exits the X Server. -[no]winkill Alt+F4 exits the X Server. -xkbrules XKBRules Equivalent to XKBRules in XF86Config files. -xkbmodel XKBModel Equivalent to XKBModel in XF86Config files. -xkblayout XKBLayout Equivalent to XKBLayout in XF86Config files. For example: -xkblayout de -xkbvariant XKBVariant Equivalent to XKBVariant in XF86Config files. For example: -xkbvariant nodeadkeys -xkboptions XKBOptions Equivalent to XKBOptions in XF86Config files. -logfile filename Write logmessages to <filename> instead of /tmp/Xwin.log. -logverbose verbosity Set the verbosity of logmessages. [NOTE: Only a few messages respect the settings yet] 0 - only print fatal error. 1 - print additional configuration information. 2 - print additional runtime information [default]. 3 - print debugging and tracing information. -[no]keyhook Grab special windows key combinations like Alt-Tab or the Menu key. These keys are discarded by default. -swcursor Disable the usage of the windows cursor and use the X11 software cursor instead
XWin.exeの数多くある起動オプションのうち特に注目すべきものを列挙すると以下のようなものがあります。
有効にするスクリーンの階層数scr_num と、そのスクリーン用の幅および高さを指定する。
重要なことには、第1番目の-screen
パラメーターの前に指定されたどんなパラメーターも、すべてのスクリーンに適用されす。
第1番目の-screen
パラメーターの後のどんなオプションも、パラメーターより前に指定されたスクリーンにのみ適用されます。
Example-->例:
XWin -fullscreen -screen 0 -screen 1 -depth 8 -screen 2
スクリーンはすべてフルスクリーンになるでしょう、しかし、スクリーン2は階層深度8になるでしょう。
その一方でスクリーン0および1は既定の深度( Windows が現在稼働しているどんな深度でも)であるでしょう。
scr_numは、0.5のようにするとスクリーン0に0.0か0.5までの6つのスクリーンを持たせることができるらしい。 また0.0~0.15あるいは1.0~1.15が指定できるようだ。 [width height]で、たとえばheightを画面の解像度からタスクバー分だけ小さくした数値を与えることができる。
-rootless
および -fullscreen.
を指定しないでください。
-multiwindow
および -fullscreen.
を指定しないでください。
-fullscreen
オプションが指定されない場合に無視されます。
-fullscreen
オプションと協力するDirectDrawベースのエンジンを使用するとき(ビット・パー・ピクセルで)を適用すべきスクリーン番号を指定してください。
もし-fullscreen
オプションが指定ではないなら、無視された-fullscreen
オプションと共に DirectDraw ベースのエンジンを使って(ビット・パー・ピクセルで)作動するべきスクリーン深度を指定してください。
デフォルトでは、それを支援するすべてのシステム上でDirectDrawに基づいたエンジンを使用するでしょう。
Ctrl+Alt+Backspaceキーの組み合わせによるサーバのシャットダウンを無効にします。(即定値)
例:
XWin -unixkill -screen 0 -screen 1 -screen 2 -nounixkill
スクリーン0および1はCtrl+Alt+Backspaceを許可するでしょう。しかし、スクリーン2は許可しないでしょう。
-multiwindow
および -rootless
を指定しないでください。
-multiwindow
および -rootless
を指定しないでください。
-fullscreen
オプションと共に使用された時、使用するリフレッシュレートを指定してください。
トレイアイコンを無効にします
例:
XWin -notrayicon -screen 0 -screen 1 -screen 2 -trayicon
スクリーン0および1はトレー・アイコンを持たないでしょう。しかし、スクリーン2ではトレー・アイコンを有します。
外部ウィンドウマネージャも利用できるわけですが、Windows統合ウィンドウマネージャよりも動作が重たくなる傾向があるようです。
KEDは大変重く、fvwm2やや重く・・・
twmは軽いほうなのですが素っ気もない感じで面白みがないかもしれません。
blackboxというのも比較的軽いのですが、癖のあるUIというきがして好き嫌いが色々ありそうです。
twmの他を利用するならば、まぁ、何とか使えそうなのがWindow Makerというところです。
他に試すならばJWMでしょうか。
ウィンドウマネージャはXサーバの起動オプションを変更して外部のウィンドウマネージャを利用することを指定できます。
Xサーバの起動オプションを変更する場合は~/.xserverrc
に起動のコマンドラインを記述します。
exec /usr/X11R6/bin/X <オプション>
外部ウィンドウマネージャにはtwmやfvwm2, Window Maker, KED, gnome 2, blackbox などが利用できます。
外部ウィンドウマネージャの起動は~/.xinitrc
に外部ウィンドウマネージャを起動するコマンドラインを追加します。
Window Maker を使うには、最初にwmaker.instというインストールスクリプトを実行して設定ファイルを環境変数HOMEにあるパスの下にGNUstep
というディレクトリを作成して設定ファイルを格納します。
このインストールスクリプトは実行する前に、環境変数LANG
を言語ロケールja_JP.ujis
にセットしておくと、カタログから日本語化した設定を生成してくれます。
そして、~/.xinitrc
で環境変数LANG
に言語ロケールja_JP.UTF-8
をセットしておくと、メニューなどの表示が日本語になります。
Window Makerも重いし、twmもいやだというならば、OpenBoxを試してみると、若干軽いようですけど、デフォルトのウィンドウマネージャにくらべればどれも若干重たいようです。
CygwinのセットアップにJWMが見つからない場合はソースコードをダウンロードして自前ビルドあるのみです。 今回はgentoo Linuxのインストールしてあるパソコンから、jwm-2.0.1.tar.bz2とfrbidi-0.10.9.tar.gzを、Pedrosaのssh接続とzmodem転送を利用してLAN越しに転送してきてビルドしました。
/opt/src
など、適当なディレクトリを作ってcd
コマンドで移動してtar -zvxf frbidi-0.10.9.tar.gzとかtar -jvxf jwm-2.0.1.tar.bz2などのようにソースコードを展開します。
cd frbidi-0.10.9のようにfrbidiソースディレクトリに移動してconfigure --prefix==<インストール先> CFLAGS="-march=<プロセッサ名> -mtune=<プロセッサ名>"でMakefile
を生成してmake allといった具合にビルドを開始します。ビルドが正常に終わったらmake installでインストールします。
設定に関係するメッセージが英語で表示されますので、指摘された環境変数の設定を行います。
次にjwm-2.0.1のソースディレクトリにcd
コマンドで移動します。
configure --prefix==<インストール先> --libdir=<frbidiのライブラリがあるディレクトリ> --includedir=<frbidiのインクルードファイルがあるディレクトリ> --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib --with-x --disable-xinerama CFLAGS="-march=<プロセッサ名> -mtune=<プロセッサ名> -I<frbidiのインクルードファイルがあるディレクトリ>" CPPFLAGS=-I<frbidiのインクルードファイルがあるディレクトリ> LDFLAGS=<frbidiのライブラリがあるディレクトリ>
てなぐあいに、長々と必要なパラメータを記述して実行しますと、Makefileができます。src/Makefile
をエディタで開いてEXE = jwm
の行をEXE = jwm.exe
にします。
さらに.SUFFIXES: .o .h .c
とかいてある行の後ろに空白をいれて.exe
を書き足します。
あとはご多分に漏れずmake allとmake installを実行してインストールは終わりです。
ホームディレクトリに.xserverrc
というファイルをexec XWin -mwextwm -clipboard -silent-dup-error
のようにしてXサーバの起動オプションを変更します。
さらに、ホームディレクトリに.xinitrc
というファイルを作ってexec jwm
というふうにを書きます。
jwmをインストールしたディレクトリのetc
ディレクトリにsystem.jwmrc
というデフォルト設定のXMLファイルがあります。
system.jwmrc
をエディタで開いて<Tray x="0" y="-0" height="32">
とあるところのy="-0"
をy="-30"
ぐらいにしておきますとWindosのタスクバーとJWMのトレイが重ならないようになります。
起動はいつものようにstarxで起動させるだけです。
jwmのクリップボードとCygwinのクリップボードが競合するようでX環境起動中にエラーメッセージがでるようです。.xserverrc
で-clipboard
をつけなければ競合は起きないと思われますが、すこし不便になってしまいます。
ということで、jwmのクリップボードを無効化するとかCygwinと整合性を取る必要があります。
ROX Desktopは数百メガヘルツで動作する組み込み用RISCプロセッサのような小さなパフォーマンス(経験則的にいうと、CISCプロセッサのベンチマークと比較して、ほぼPentium程度のパフォーマンスに相当します。)で動作させることを目的としたウィンドウマネージャです。 ROX Desktopに関する日本語の情報はRox Filer Informationにあります。 こういったものをCygwinへ移植するのも一つの選択肢だと思います。
文章
文章
著作権 大槻昌弥 © 2001年
このファイルの著作権は大槻昌弥が所有しています。
無断転載厳禁。