概要
plwm は、 Prolog で書かれた動的タイル型X11ウィンドウマネージャ。 高いカスタマイズ性 と 軽快な動作、論理プログラミングの学習にも最適。 SWI-Prolog を基盤とし、さまざまなレイアウトや外部バー、多画面対応などをサポート。 設定はPrologで記述、柔軟なワークスペース管理やキーバインドが特徴。 導入や設定方法、基本操作、カスタマイズ例 などを簡潔に解説。
plwmとは何か
- plwm は、 Prolog で実装された X11用動的タイル型ウィンドウマネージャ
- 高品質なコードとドキュメンテーション
- 強力かつ簡単なカスタマイズ
- タイル型WMユーザーの主要ニーズをカバー
- 小規模・シンプル・拡張性重視
- SWI-Prolog を使用
主な特徴
- ハッキング容易性 :Prologによる論理プログラミング入門に最適
- 宣言的設定 :設定ファイルもPrologソース、専用フォーマットのような扱いやすさ
- 多様なレイアウト :monocle、スタック、グリッド、左右/上下/中央マスター、nrows(N)・ncols(N)など
- フローティングウィンドウ :マウスで移動・リサイズ可能
- 外部バー対応 :polybar, lemonbarなど
- EWMH準拠 :一部進行中
- 軽量高速 :10-15MB程度のメモリ使用量
- 動的ワークスペース管理 :作成・リネーム・再インデックス・削除が即時可能
- 多画面対応、ギャップ、dmenu/rofi連携、ルール、フック、アニメーション、FIFOコマンド等
インストール
- 依存パッケージ :xorg(libx11-dev, libxft-dev, libxrandr-dev)、SWI-Prolog
- Ubuntu 22.04例
sudo apt install xorg-dev swi-prolog
- ビルド・インストール
make && sudo make install- デフォルトインストール先:/usr/local/bin/(Makefileで変更可)
最小限の環境構築
- ~/.xinitrc の末尾に
exec plwmを追加 - ttyでstartx 実行で起動
- 自動起動例(~/.bash_profile等)
-
if [ -z "$DISPLAY" -a $(tty) = "/dev/tty1" ]; then exec startx fi
-
ディスプレイマネージャでの利用
- /usr/share/xsessions/plwm.desktop を作成
- [Desktop Entry]
- Name=plwm
- Comment=This session logs you into plwm
- Exec=plwm
- Icon=plwmのロゴパス
- Type=Application
- [Desktop Entry]
基本操作・挙動
- コマンドラインオプション :
plwm -hで一覧表示 - 全ウィンドウ自動管理 :新規ウィンドウは自動でスタックに追加、レイアウトに応じ自動配置・サイズ調整
- マスタースタック型レイアウト :nmaster数(デフォルト1)がマスター領域に割り当て
- 例:lmaster, nmaster=1, mfact=2/3
- スタック最上位ウィンドウが左2/3、残りが右1/3
- 例:lmaster, nmaster=1, mfact=2/3
この方式の利点
- 宣言的ウィンドウ管理 :配置方法を指示するだけで自動調整
- ウィンドウの増減時も自動再配置
- レイアウト・nmaster・mfactの組み合わせで多彩な配置を実現
- 画面スペースを常時100%活用(ギャップ有りなら99%)
デフォルトキーバインド一覧
| キー操作 | アクション | 説明 | |----------|-----------|------| | super + j | shift_focus(down) | 次のウィンドウへフォーカス移動 | | super + k | shift_focus(up) | 前のウィンドウへフォーカス移動 | | super + shift + j | move_focused(down) | フォーカスウィンドウを次と入れ替え | | super + shift + k | move_focused(up) | フォーカスウィンドウを前と入れ替え | | super + Return | focused_to_top | フォーカスウィンドウをスタック最上位へ | | super + q | close_focused | フォーカスウィンドウを閉じる | | super + shift + space | toggle_floating | フローティング/タイル切替 | | super + f | toggle_fullscreen | フルスクリーン切替 | | super + shift + q | quit | plwmを終了 | | super + i | change_nmaster(+1) | マスター数を増やす | | super + d | change_nmaster(-1) | マスター数を減らす | | super + h | change_mfact(-0.05) | マスター領域を縮小 | | super + l | change_mfact(+0.05) | マスター領域を拡大 | | super + shift + f | layout:set_layout(floating) | フローティングレイアウトへ | | super + shift + m | layout:set_layout(monocle) | モノクルレイアウトへ | | super + shift + s | layout:set_layout(stack) | スタックレイアウトへ | | super + shift + h | layout:set_layout(hstack) | 水平スタックへ | | super + shift + g | layout:set_layout(grid) | グリッドレイアウトへ | | super + shift + l | layout:set_layout(lmaster) | 左マスターレイアウトへ | | super + shift + r | layout:set_layout(rmaster) | 右マスターへ | | super + shift + t | layout:set_layout(tmaster) | 上マスターへ | | super + shift + b | layout:set_layout(bmaster) | 下マスターへ | | super + shift + c | layout:set_layout(cmaster) | 中央マスターへ | | super + Tab | toggle_workspace | 直前ワークスペースに切替 | | super + shift + Tab | toggle_hide_empty_workspaces | 空ワークスペース非表示切替 | | super + 1...9 | switch_workspace('1'...‘9’) | 指定ワークスペースに移動 | | super + p/n | switch_workspace(prev/next) | 前/次ワークスペースに移動 | | super + shift + 1...9 | move_focused_to_workspace('1'...‘9’) | フォーカスウィンドウを指定ワークスペースへ移動 | | super + shift + p/n | move_focused_to_workspace(prev/next) | フォーカスウィンドウを前/次ワークスペースへ移動 | | super + ,/. | switch_monitor(prev/next) | 前/次モニターへ切替 | | super + shift + ,/. | move_focused_to_monitor(prev/next) | フォーカスウィンドウを前/次モニターへ移動 |
- Tips
- change_nmaster/1, change_mfact/1は絶対値指定も可能(+/-なしで値指定)
- switch_workspace/1, move_focused_to_workspace/1はprev_nonempty, next_nonemptyも指定可
- nrows(N), ncols(N)レイアウトも利用可能(例:super + shift + "T" -> layout:set_layout(ncols(3)))
- 複数アクションをカンマ区切りで一括バインド可能
設定方法
- config.pl を編集し、
make && sudo make installで再ビルド - 起動時の設定ファイル読み込み順
$XDG_CONFIG_HOME/plwm/config.pl$HOME/.config/plwm/config.pl/etc/plwm/config.pl
- -cフラグ で任意パス指定可能
- モジュール名はruntime_config!
make mkconfigでsrc/config.plからランタイム用設定生成- -Cフラグ で設定ファイルのバリデーション可
- 主な設定項目例
- default_nmaster:初期マスター数
- default_mfact:マスター領域比率(0.05~0.95)
- default_layout:デフォルトレイアウト
- attach_bottom:新規ウィンドウを下に追加
- border_width/border_color:枠線幅・色
- snap_threshold:ドラッグ時吸着閾値
- outer_gaps/inner_gaps:外周・内部ギャップ
- workspaces:ワークスペース名リスト
- starting_workspace:起動時ワークスペース
- hide_empty_workspaces:空ワークスペース非表示
- ws_format/occupied:バー表示フォーマット
- layout_default_overrides:モニタ・ワークスペース別上書き設定
- bar_class/bar_placement:外部バー関連
- fifo_enabled/fifo_path:FIFOコマンド関連
- menucmd:メニューコマンド
- animation_enabled:アニメーション有無
よくある質問・補足
- plwmの開発状況 :活発にメンテナンス中、EWMH対応など一部進行中
- 類似プロジェクト :dwm, xmonad, i3など
- 貢献方法 :GitHubのリポジトリ参照、Issue/PR歓迎
- スクリーンショットや詳細 :公式ドキュメント・リポジトリ参照
plwmは 論理プログラミング と X11ウィンドウ管理 を融合した、 高度なカスタマイズ性 と 軽量さ を両立したユニークな選択肢。 Prolog の知識を活かしたい方や、 自分好みのWMを構築したいユーザー に特におすすめ。