# Kウインドウマネージャーハンドブック

KDE チーム
バージョン 0.19.15-, 1998年11月29日

このドキュメントは kwm バージョン 0.19.3 向けにに最終更新されました。 この文章に対してのコメントや追加があれば、著者に送ってください。

KDE Window manager

KDE
window manager

## はじめに

このドキュメントは kwm についての全般的な情報と機能のリファレンス、 それと kwm 制御モジュール と システムサウンドモジュール の開発者に役立つ技術情報について述べたものです。

低レベルで(ただし、kwinconfig の開発者にとって面白いだけの) kwm をカスタマイズ するためのもっと詳細な情報については、設定ツールによって生成された kwmrc や、kwmのソースコードなどを参照してください。

すべてのプログラマーのために:　KDE をあなたの目的のために使うための情報に ついては、libkdecore ディレクトリにある `kwm.h` を参照してください。 モジュールについては、 `KWMModuleApplication` というクラスがモジュールを書くためのよい参考になるでしょう。

### 機能

kwm は KDE のためのウインドウマネージャーです。 とりわけ、次のような機能をもっています:

- KDE への完全な統合

- 完全な キーボードの制御.

- 暗号のようなリソースファイルで設定する必要がない、ユニークな ウインドウタイトルとアイコンの現代的なルックアンドフィール。

- シェルプロンプトに素早くにアクセスするための、履歴検索が使える便利な ミニコマンドラインウインドウ。

- ウインドウマネージャーを再起動せずに、同期的に設定を変更する機能。 この機能でルックアンドフィールに関係する部分やキーボードのショートカットの設定を変更できます。

- 第二世代のウィンドウ マネージャ。kwm はウィジェット (ボタン、メニュ ー、リストボックス、など) に対して現代的な GUI ツールキットを使用しており、 商用の、あるいは通常の Xlib の実装によってコードを肥大させるようなことはしません。

- 複数の仮想デスクトップを行き来して作業する場合でも卓越したフォーカス ハンドリング (デスクトップを切り替えるとフォーカスを失ってしまうといった、他 のウィンドウ マネージャで通常起きるようなことがありえません)。

- 従来のアプリケーションを、アイコン化、最大化、特定のデスクトップ、特別 な装飾を施した状態、あるいは固定表示といった、KDE ウィンドウ特有のプロパティ を付加して起動することが可能な `kstart` ユーティリティ。 `kstart -help` を実行するだけで、より詳細な情報がご覧になれます。

- 旧式な(つまり従来の)アプリケーションのための セッション管理機能とワーキングセッション管理用プロキシを持つこと。 このプロクシはウインドウの属性(最大化されている、アイコン化されている、 スティッキー状態になっている、などの)や、どの仮想デスクトップに あるか等のアプリケーションの状態を、ログアウト前の状態に戻すことができます。

- 使用可能な場合に X サーバを使用する現代的なモジュールの概念。 KWM モジュール同士は非常も独立性が高く、そのモジュールは kwm が 起動する前にも後にも起動することができます。 モジュールがまだ動 いている時でもKWMは再起動でき、再起動の後自動的にモジュールと再接続 しようとします。

- KDEデスクトップパネル(これにはタスクバーも含まれています)や非常に凝った デスクトップぺージャー等の強力なモジュールを持つこと。

- `kwm.h` によりXサーバーに拡張機能を提供します。 それによりKDEアプリケーションは最大化(またはスティッキー状態や、飾り付けられた/飾り付けてない状態、等に)できたり、 ミニアイコンを定義することができたりします。 これはマップされた(目に見える)ウインドウにもはたらきます。

## Using kwm

### コマンドラインオプション

kwm は次のコマンドラインオプションを受け付けます:

-version

  パッチレベルを含めたバージョンを表示するだけで、kwm を起動しません

-nosession

  前のセッションの内容を復元せずに、kwm を起動します

### ショートカット

KDE全体のショートカットキーはKDEコントロールセンターで設定できます。 以下のリストははデフォルトのショートカットキーであり、他の設定にすることもできます。

Alt-Esc または Control-Esc

  ログアウトボタンを押したときに表示される「カレントセッション」マネージャーを表示します

Alt-Tab と Alt-Shift-Tab

  現在のデスクトップ上にあるウインドウを切り替えます

Ctrl-Tab と Ctrl-Shift-Tab

  仮想デスクトップを切り替えます(kwmrc でこの機能を使わないように設定を変えることもできます)

Alt-F2

  ミニコマンドラインウインドウを開く

Alt-F3

  ウインドウ操作メニューを出す

Alt-F4

  ウインドウを閉じる

Ctrl-F&lsqb;1..8&rsqb;

  仮想デスクトップを切り替える

Ctrl-Alt-Esc

  ウインドウの消去モードに入る (カーソルがドクロマークに変わります)

### マウスによる操作

マウスによる操作は、キーボードのショートカットの場合と同じく、コントロール センターで設定できます。以下は標準設定の一覧です。

タイトルバーまたはウインドウの端をクリックした時

- 左ボタン でウィンドウをアクティブにし、最前面に出します

- 真ん中のボタン でウィンドウをアクティブにし、背面に下げます。

- 右ボタン でウインドウがアクティブならばウインドウの操作メニューを表示し、 アクティブでなければウインドウを上げずにアクティブにします

タイトルバーをダブルクリックするとウインドウの最大化を行います

タイトルバーをドラッグした時

- 左ボタン でウインドウを一番上に上げてウインドウを移動します

- 真ん中ボタン でウインドウを上げずにウインドウを移動します

ウインドウの角や端をドラッグした時

- 左ボタン でウインドウの大きさを変更して、ウインドウを一番上に上げます

- 真ん中ボタン でウインドウを上げずに、ウインドウの大きさを変更します

ウインドウの全体を指定した時

- Alt-左ボタン でウインドウを移動します

- Alt-真ん中ボタン でウインドウが一番上にある時、ウインドウを下げます

- Alt-右ボタン でウインドウの大きさを変更します

タイトルバーのボタン (設定可)

- メニュー ウインドウ操作のリストを表示します

- スティッキー スティッキーモード on/off を切り替えます (スティッキーモードとは、そのモードに入ったウインドウはデスクトップを切り替えた場合でもウインドウがその場に残るということです)

- アイコン化 ウインドウをアイコン化します

- 最大化

  - 左ボタン 最大化

  - 真ん中ボタン 縦方向にのみ最大化

  - 右ボタン 横方向にのみ最大化

- 閉じる ウィンドウを閉じます (アプリケーションが保存するもの があるかどうかを尋ねてくる場合があります)

### ミニコマンドラインウインドウ

`Alt-F2` を押すと小さなコマンドラインウインドウが開きます 。その中でUnixのシェルコマンドを入力できる( SHELL 環境変数はそのコマンドラインウインドウ内ででどのシェルを使うかを決めます)他に、 次のことが出来ます。

- URLを入力することで、 kfm のウインドウを一つ、指定した URL で開けます。 もしサーバーの名前が www. や ftp. で始まるならば、それぞれ http:// や ftp://を省略できます。

- `man:コマンド` を入力すれば、その コマンド についてのUnix マニュアルを kfm ウインドウで開きます。

ミニコマンドラインウインドウでは、前に入力したコマンドを上矢印キーで呼び出せます。また、他のさまざまなシェルの 場合と同じく、途中まで入力したファイル名を tab キーで補完することができます。

### コマンド

以下の二つのどちらかの方法でkwmにコマンドを送ることができます。

`KWM::sendKWMCommand(QString)` (KDE アプリケーションから) または `kwmcom` コマンド (コマンドラインから)

これは、特に kglobalshortcut の開発者にとっては興味深いでしょう。

現在のところ、 kwm は以下のコマンドを受け付けます。

- refreshScreen 画面をリフレッシュします。

- darkenScreen 画面を黒くします。注意:これを使うと、キーボードやマウスの入力をデスクトップがすぐには受け付けなくなります。

- logout ログアウトダイアログを表示します

- commandLine ミニコマンドラインウインドウ を開きます

- taskManager 「カレントセッション」マネージャを表示します。

- configure kwmrc から設定を読み込みます

- - winMove

  - winResize

  - winRestore

  - winIconify

  - winClose

  - winShade

  - winSticky

  - winOperations

  これらのコマンドはそのときアクティブなウインドウにはたらき、名前から 予想されること以上のことを行います。 (`winOperations` はウインドウ操作メニューを表示します)

- - deskUnclutter

  - deskCascade

  これらのコマンドはデスクトップ上のウインドウを再構成します。

- desktop&lsqb;1-8&rsqb; 指定された仮想デスクトップに切り替えます。 desktop

- - desktop+1

  - desktop+2

  - desktop-1

  - desktop-2

  - desktop&percnt;2

  これらのコマンドはデスクトップ同士を切り替えます。 `desktop&percnt;2` は奇数番号のデスクトップとその次に大きな偶数番号のデスクトップ同士を切り替えます。 つまり、1と2を切り替え、3と4を切り替えるということです。 これは、KDEページャで使われる仮想的な n*2 の行列において、「上」と「下」をエミュレートするのに便利です。同じように、 `desktop+2` は「右」を意味し、 `desktop-1` は「左」を意味します。

- go:other go コマンドは kwm とそのすべてのモジュールを終了し、代わりに other を起動します。 other には、たとえば fvwm のような別のウィンドウ マネージャの名前が入ります。 goコマンドに渡せるのは、実行可能ファイルの名前だけです。パス を渡すことはできません。これは、 `kwmcom` が 20 文字までに制限されているからです。

## 設定

kwm は KDE コントロールセンター (アプリケーションスタータ > KDEコントロールセンター) 「ウィンドウ」ツリーを開くと、さまざまな設定オプションを操作できます。キーボードのショートカットは 「グローバル キー」セクションで設定することができます。

仮想デスクトップを設定するには、「アプリケーション」ツリーを開いて、「パネル」を選択してください。

設定ファイルを編集する方を好む人に対して、このセクションでは ˜/.kde/share/config にある `kwmrc` ファイルのオプションについて説明します。

### kwmrc

kwmrc設定ファイルは以下のセクションに分けられます。

- ボタン

- 全般

- セッション

- デスクトップ

- 装飾

- フォーカス

- 固定表示

#### &lsqb;ボタン&rsqb;

このセクションでは、タイトルバー内のウィンドウのコントロールボタンの位置を制 御します。ここには以下の書式のような行が入ります。

ButtonX=button-name

ここで X は A-F の 1 文字であり、 button-name は `Menu, Sticky, Iconify, Maximize, Close, Off` のいずれかです。 A、B、および C の ボタンはウィンドウ タイトルの左側に、また D、E、および F のボタンは右側に表示されます。

#### &lsqb;全般&rsqb;

このセクションでは、以下のようなさまざまな設定項目を定義しています:

`AltTabStyle`=KDE&verbar;CDE

  (標準設定では KDE)

  CDE スタイルの AltTab 機能は従来のフォーカス ポリシーで使用可能です。従来の フォーカス ポリシーでは、CDE スタイルが標準です。そういった環境下では、KDE スタイルがあまり意味をなさないためです。

`AutoRaise`=value (in milliseconds)

  `FocusPolicy` が `FocusFollowMouse` である場合、この項目では、マウスが ウィンドウ内に入った際にフォーカスを得てからウィンドウが最前面に出るまでの遅延時間を指定します。

`BorderSnapZone`=value (ピクセル単位)

  ユーザがウィンドウを移動させる際に、ウィンドウのいずれかの縁がデスクトップの 縁に接近すれば、ウィンドウは瞬時に縁まで移動します。 value では、ウィン ドウがデスクトップの縁まで瞬時に移動するのに必要とされる接近距離を指定します。

`Button3Grab`=on&verbar;off

  `off` の場合、マウスの右ボタンをともなうようなウィンドウ操作は無効化さ れ、アプリケーション ウィンドウがマウスの右ボタン イベントを受け取れるようになります。

`ControlTab`=on&verbar;off

  `on` の場合、ユーザは `Ctrl+Tab` を押せば、仮想デスクトップ同士を切り替えられます。

`ElectricBorder`=value (ミリ秒単位)

  複数のデスクトップを使用している場合、画面の端までマウスを移動させると、 ElectricBorder 機能により、デスクトップ同士のあいだで移動することができます。 value では、デスクトップが切り替わるまでマウス ポインタを端に置 いておくべき時間の長さを指定します。 value が 1 の場合、この機能は無効になります。

`ElectricBorderPointerWarp`=NoWarp&verbar;MiddleWarp&verbar;FullWarp

  `ElectricBorder` オプションが `on` の時、これを `on` にすると、デスクトップが切り替わった際に、対応する位置までマウスが移動します。

`ElectricBorderNumberOfPushes`=value

  (標準設定は 5回)

  `ElectricBorder` プロパティにより与えられた時間枠内における押しの回数 であり、これによって、ウィンドウをドラッグすることなく仮想デスクトップを切り替えられます。

`FocusPolicy`=ClickToFocus&verbar;FocusFollowMouse&verbar;ClassicFocusFollowsMouse&verbar;ClassicSloppyFocus

  `ClickToFocus` の場合、ユーザはウィンドウにフォーカスを与えるために、ウィンドウ内でマウスをクリックする必要があります。 `FocusFollowMouse` であれ ば、マウスが乗っているウィンドウに常にフォーカスが与えられます。 `ClassicFocusFollowsMouse` では、マウスのないウィンドウにはフォーカスが与えられません。以前であれば、kwm の focusFollowMouse はフォーカスを新規ウィン ドウに置くようになっていたか、Alt-tab によるキーボード操作がうまくおこなえる ようになっていました。

`MaximizeOnlyVertically`=off&verbar;on

  `on` の場合、この設定によって、 ウィンドウの最大化は縦方向のみに制限されます。

`ResizeAnimation`=1..10 (最大のスピード)

  `on`の場合、ウィンドウの最小化と最大化の際に動画表示されます。 (標準設定は 1)

`RstartProtocol`=...

  (標準設定は "rstart -v")

`ShapeMode`=off&verbar;on

  ShapeMode が `on`の場合、 kwm はウィンドウの縁に対し、標準のものの代わりにユーザ定義のピックスマップを使用します (以下を参照)。

`ShapePixmapTop`=pixmap
`ShapePixmapBottom`=pixmap
`ShapePixmapLeft`=pixmap
`ShapePixmapRight`=pixmap
`ShapePixmapTopLeft`=pixmap
`ShapePixmapTopRight`=pixmap
`ShapePixmapBottomLeft`=pixmap
`ShapePixmapBottomRight`=pixmap

  `ShapeMode` が `on` の場合、これらのオプションはウィンドウのそれぞれの縁/隅に表示される画像を指定します。 pixmap は share/apps/kwm/pics に存在 するピックスマップ ファイル (.xpm) でなければなりません。

  kwm のソースには「images」というサブフォルダが含まれており、この中には上の shape エクステンションの見本が入っています。

`TitlebarLook`=shaded&verbar;plain&verbar;pixmap

  この設定はウィンドウのタイトルバーの外観を決定します。 `pixmap` を選択する と、以下の項目で指定されるように、 kwm にユーザ定義の画像をタイトルバーに表示させることができます。

`TitlebarPixmapActive`=pixmap

  TitlebarPixmapInactive=pixmap

  TitleBarLook が `pixmap` の場合、これらのオプションはアクティブ/非アクティブの各ウィンドウのタイトルバーに表示される画像を指定します。

`TitleAnimation`=value (ミリ秒単位)

  TitleAnimation が有効になっていると、 kwm は、(長すぎてタイトルバーの色 つきエリアにおさまらないような) 長いウィンドウ タイトルを左右にスライドさせ、表示可能にします。 value では動画表示の速度を指定します。 0 に設定すると、動画表示は無効になります。

`TitlebarDoubleClickCommand`=winMaximize&verbar;winShade&verbar;winMove&verbar; winResize&verbar;winRestore&verbar;winIconify&verbar;winClose&verbar;winSticky&verbar; winOperations

  このオプションでは、ユーザがタイトルバーをダブルクリックした際のウィンドウの挙動を指定できます。

`TraverseAll`=on&verbar;off

  `on` の場合、 `Alt-tab` による操作がすべてのデスクトップ上の全ウィンドウに行きわたります。 `off` の場合、 `Alt-tab` は現在のデスクトップ上のウィンドウにしか行きわたりません。

`WindowMoveType`=Opaque&verbar;Transparent

  このオプションは、ユーザがデスクトップ上でウィンドウを別の場所へドラッグする 際にともなう視覚的な表現を制御します。 `Transparent` であればウィンドウの輪郭のみが表示され、 `Opaque` であればウィンドウ全体が表示されます。

`WindowsPlacement`=cascade&verbar;interactive&verbar;manual&verbar;random&verbar;smart

  このオプションは、ウィンドウをはじめて開いた際に kwm がそれをデスクトップ上でどのように配置するかを決定します。 `manual` の場合、ユーザがウィンドウを配置することができます。 `interactive` の場合は、加えて次のようなパー センテージの値がともないます:

  `interactive` 配置では、それによって指定のパーセンテージを超えて既存のウィンドウに重なるようなことがないかぎり、 kwm は `smart` 配置アルゴリ ズムを用いてウィンドウを配置します。逆にそれに該当するような場合には、ユーザは `manual` 配置によって、ウィンドウを配置することができます。パーセンテ ージは 100 より大きくすることが可能です。

  他のオプションでは、ウインドウの配置を kwm に任せます。

`WindowSnapZone`=value (in pixels)

  ユーザがウィンドウを移動させる際に、ウィンドウのいずれかの縁が別のウィンドウ の縁に接近すれば、移動中のウィンドウの縁が瞬時に相手のウィンドウの縁まで移動します。 value では、ウィンドウが相手のウィンドウの縁まで瞬時に移動する のに必要とされる接近距離を指定します。

#### &lsqb;Session&rsqb;

`proxyignore`=xemacs,xterm,...

  コンマで区切った、(非 KDE) アプリケーションの一覧。これらのアプリケーション の状態 (ウィンドウ プロパティ) はユーザのログアウトの際に保存されません。任 意のコマンド行引数をつけてアプリケーション名を列挙してください。

#### &lsqb;Desktop&rsqb;

当セクションでは、仮想デスクトップの数、名前、および位置を定義します。ここに は以下のような各行が入っています:

`NumberOfDesktops`=value

  仮想デスクトップの数を指定します。これを書いている時点では、 kwm は 8個までの仮想デスクトップをサポートしています。

`Desktop&num;&lsqb;C&rsqb;`=name

  Desktop &num; の 名前 を指定します。 たとえばこのようになります

  `Desktop1[C]=One`

  Desktop には 1-8 の番号がつけられます。

`Desktop&num;Region`=geometry

  Desktop &num; のジオメトリを指定します; たとえばこのようになります

  `Desktop1Region=101+0+923+722`

ただし、設定ファイル中の各部分を上書きしても、ほとんど影響はありません。 kpanel は、起動とともに、現在のデスクトップにとって適切な値を kwm に教えるよ うになっているからです。ログアウトの際には、kwm はこの新しい設定を保存します。

#### &lsqb;装飾&rsqb;

- noDecorationTitles=,

- tinyDecorationTitles=,

- noDecorationClasses=,

- tinyDecorationClasses=,

#### &lsqb;フォーカス&rsqb;

- noFocusTitles=,

- noFocusClasses=,

#### &lsqb;固定表示&rsqb;

- stickyTitles=,

- stickyClasses=,

各プロパティでは、正規表現をコンマで区切って列挙し、指定することができます。 指定された表現にマッチするタイトルやクラスのウィンドウは、指定のとおりに装飾されます。

注意: これらのヒントは新規ウィンドウにしか適用されません。 kwmrc ファイルを変更したあとは必ず、 `kwmcom` configure を呼び出すか、 `kwm` を再起動するかしてください。

恐らく、設定ファイルを弄り回すより、 `kstart` ユーティリティの利用を希望されると思います。

## サウンドイベント

KWM ではサウンド イベントがいくつか発生しますが、これらはシステム サウンド モジュールで使用することが可能です。現在のところ、次のようなサウンド イベントが実装されています:

- Window Iconify

- Window DeIconify

- Window Maximize

- Window UnMaximize

- Window Sticky

- Window UnSticky

- Window New

- Window Delete

- Window New Trans

- Window Delete Trans

- Window Shade Up

- Window Shade Down

- Logout

- Logout Message

## よくある質問

### kwm を使わなければならないのはなぜ?

私は数日かかって 10 種類のウィンドウ マネージャの設定法を学びました。望むこ とをそのとおりやってくれる、678 行にわたるリソース ファイル群を私が持ってい るとなれば、今にでも私のウィンドウ マネージャを持っていってしまいたいことでしょう!

回答: 強制 というわけではなく、 自発的提案にすぎません。 KDE は現行のすべてのウィンドウ マネージャをサポートしていますが、恩恵 を余すところなく受けようとすれば、 kwm のご使用をお勧めします。 機能の一覧をご覧ください。

### アプリケーション起動用のショートカットを新たに定義することができないのですが?

回答: これはウィンドウ マネージャの仕事ではないからです。もっとも、 こういったことをやってくれる小規模なアプリケーションを作成することも可能です。 libkdecore にある KGlobalAccel クラスを使用すれば、どのような KDE アプリ ケーションでも、システム全般にわたるショートカットに容易にアクセスすることができます。

### Why does kwm の外観がこんなに Windows 95 に似ているのはなぜ?

回答: あれ、そうなのですか? ええっと.... (Matthias はどのコンピュータにも Windows 95 を入れていないので、Windows 95 を入れている人を探していま す。うーん、ここには Windows 95 を入れている人はいないですね。それなら、古い Linux ディストリビューションを引っ張ってきて、fvwm95-2 をインストールしてみ ましょう.....) いやいや、全然そんなふうに思えませんよ。KWM のほうがずっとか っこよく見えるし、ウィンドウ マネジメントの核となる機能性は高いです。

### 他のウインドウ マネージャに KDE としての拡張を加えることは可能ですか?

回答: はい、可能です。 `libkdecore` にある `kwm.h` や `kwm.C` をよく調べてお好みのウィンドウ マネージャを拡張し、そういった リクエストに対して正しく応答するようにするだけです。ウィンドウ マネージャの 中にはこの導入手順のうち一部、もしくは大部分をすでにサポートしているものがあ ると聞いています。

### Does kwm は OpenStep 風の、グラデーションのついたウインドウをサポートしていますか?

回答: はい。

## おわりに

### 開発者

`Matthias Ettrich`

### 著者

`Matthias Ettrich`

`Stephen Schaub` - 編集

`Kalle Dalheimer` - 編集

`Robert Williams` - 編集