実際に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年
このファイルの著作権は大槻昌弥が所有しています。
無断転載厳禁。