Binary Space Partitioning Window Manager (bspwm)は、Linux用の強力なミニマリストウィンドウマネージャです。高度な設定が可能で、ウィンドウ管理に対する革新的なアプローチを 提案しています。BspwmはC言語で書かれており、任意の言語を使用して設定することができます。Bspwm はウィンドウマネージャにおけるユーザのカスタマイズの縮図です。このため、パワーユーザや、自分独自のワークフローを作ることを学びたいと 思っているいじり好きな人にとっても魅力的です。

バイナリ・スペース・パーティショニングの説明

バイナリスペースパーティショニングは、デスクトップ上のウィンドウを完全なバイナリツリーの葉として表現する考え方です。バイナリツリーとは、階層化されたノードを用いて情報を順序付ける構造です。そのツリー内の情報は、ルートノードが常に2つのノードを含んでいる状態で、2つずつソートされます。

Bspwmはノードで動作します。実際には、空のデスクトップにウィンドウを作成すると、bspwmはそのウィンドウを配置するための1つのノードを作成します。そのノードはリーフノードと考えることができます。しかし、そのデスクトップにさらにウィンドウを作成すると、そのリーフノードがルートノードになり、bspwmはそれに付随する新しいリーフノードを2つ作成します。そして、現在のウィンドウと新しく作成されたウィンドウをそれらのリーフノードに配置します。

この後に作成される新しいウィンドウは、それらのリーフノードのどちらかに関連付けられ、それらをそれぞれのルートノードに変えます。

このようにウィンドウを並べると、デスクトップ内に明確な階層が生まれます。どのリーフノードが最初に生成され、どれが特定のルートノードのグループから生成されたものであるかが明確になります。これは、特定のウィンドウやウィンドウ レイアウトのカスタム動作ルールを作成する場合に便利です。

キーバインドとステータスバー

bspwmはウィンドウを管理するだけであることに注意することが重要です。つまり、ウィンドウの管理に関係しない他の機能は bspwm パッケージに含まれません。これには、キーを関数にバインドする機能や、ステータスバーを表示する機能が含まれます。

bspwmでキーバインドを使うために、開発者はキーバインドだけを管理するSimple X Hotkey Daemon (sxhkd) という別のプログラムを作りました。しかし、ステータスバーについては、ユーザは polybar や lemonbar のような様々なサードパーティのアプリケーションをインストールすることができます。

bspwm と sxhkd のインストール

bspwm と sxhkd のインストールは比較的簡単です。どちらのプログラムも、ほとんどの Linux リポジトリで利用可能です。例えば、Debian や Ubuntu にこれらをインストールするには、 apt を使ってインストールすることができます。

sudo apt install bspwm sxhkd

Arch Linux では、pacman を使うことができます。

sudo pacman -Syu bspwm sxhkd

Fedora では、dnf を使用することができます。

sudo dnf install bspwm sxhkd

Void Linux では、xbps を使用することができます。

sudo xbps-install bspwm sxhkd

私の場合、Void Linuxにインストールするので、XBPSを使用します。

bspc: bspwm 用のユニバーサルコントローラ

bspwm を使用するためには、bspc という 1 つのプログラムとのやり取りが必要です。bspc は bspwm の動作を制御、設定することができる強力なユーティリティです。bspcはbspwmの動作を制御、設定できる強力なユーティリティです。実際、windowsの操作や動作の設定に使用するコマンドはすべてbspcコマンドだけです。

bspwmの設定ファイルの準備

bspwmの設定を始めるには、まず設定ファイルを作成する必要があります。これは、bspwmが最初に起動するときに実行するbspcコマンドを探す場所です。デフォルトでは、bspwmは「/home/$USER/.config/bspwm/bspwmrc」ファイルを探します。そのファイルを作成するには、次のように入力します。

mkdir -p /home/$USER/.config/bspwm && touch /home/$USER/.config/bspwm/bspwmrc

このコマンドは、「/home/$USER/.config/」にbspwmフォルダを作成し、そのフォルダ内にbspwmrcファイルを作成します。

さて、bspwmrcファイルは、実行可能であれば、どのような言語で書いてもかまいません。つまり、まずファイルのプロパティをそのように設定する必要があります。これは次のように入力することで可能です。

sudo chmod 774 /home/$USER/.config/bspwm/bspwmrc

これで、我々と我々のユーザーグループの誰もがこのファイルを実行できるようになります。

その後、bspwmrc ファイルを開くことができます。私の場合、設定ファイルを編集するためにvimを使用します。そのために、次のようにタイプします。

vim /home/$USER/.config/bspwm/bspwmrc

これで、空のファイルが開かれ、設定を書き始めることができます。

bspwmの設定

bspwmの基本的な設定は以下のような感じです。

#!/bin/bash
 
xsetroot -cursor_name left_ptr
sxhkd &
 
bspc の設定 border_width 2
bspc の window_gap 0 を設定する。
 
bspc コンフィグ split_ratio 0.62
bspc コンフィグ focus_follows_pointer true
bspc のポインタ修飾子 mod1 の設定
 
bspc の自動化スキーム spiral
 
bspc ルール -a Chromium desktop='^2'
bspc rule -a Gimp desktop='^8' state=floating follow=on

最初の行のshebangが示すように、この設定はBashで書かれています。最初のいくつかのコマンドは、bspwmの設定を行う前に実行したいプログラムです。

最初のxsetrootは、デフォルトのXカーソルをより親しみやすい左ポインタに変更します。2つ目はバックグラウンドでホットキーデーモンを初期化するものです。

bspcの設定とbspcのルール

コンフィギュレーションにある以下のコマンドはbspcに特有のものです。bspc config` はウィンドウマネージャの一般的な設定を扱います。美的な設定と機能的な設定の両方が含まれます。

  • border_width は、ウィンドウのボーダー幅の太さをピクセルで決定します。
  • window_gap は、ウィンドウの周囲のギャップの量をピクセル単位で指定します。
  • split_ratio は、2つのリーフノードを分割するときの比率を指定します。
  • focus_follows_pointer は、マウスポインタがどのウィンドウにフォーカスを当てるかを設定する。
  • pointer_modifier は、マウスを使用してウィンドウのサイズを変更するためのキーボードキーを決定します。
  • automatic_scheme は、自動モードでの分割時のウィンドウのレイアウトを決定する。

一方、bspcルールは、bspwmで開いたときのプログラムの動作を扱います。

  • この例の最初のルールは、Chromiumを2番目のデスクトップで実行するように強制します。
  • 2番目のルールは、Gimpを8番目のデスクトップで実行するように強制します。また、Gimpをデフォルトのタイル状ではなく、フローティングの状態で実行するように強制します。最後に、Gimp を読み込むときにウィンドウのフォーカスを強制的に Gimp に合わせます。

これで、bspwmの基本的な設定ができました。しかし、bspc configbpsc rule のオプションは広範囲に渡っていることに注意する必要があります。bspwmrc の微調整についてもっと知りたい場合は、Github の Github ドキュメントをチェックすると、可能なすべての設定のリストが表示されます。

sxhkd: bspwm 用のキーバインドユーティリティ

sxhkd はシンプルなプログラムです。キーボードの入力イベントを聞き、押されたキーに応じたコマンドを実行します。コード化によって複数のキー入力を扱うことができ、シンプルでわかりやすい設定ファイルを持っています。

sxhkdの設定ファイルの準備

sxhkdの設定ファイルの準備は、bspwmrcファイルの設定と同様です。まず、sxhkdの設定フォルダと設定ファイルを作成する必要があります。これは、以下のコマンドを入力することで行えます。

mkdir -p /home/$USER/.config/sxhkd/ && touch /home/$USER/.config/sxhkd/sxhkdrc

次に、sxhkdrcファイルを実行可能な状態に設定します。

sudo chmod 774 /home/$USER/.config/sxhkd/sxhkdrc

これで、すべてのキーバインドを挿入するためのsxhkd設定ファイルができました。

sxhkd の設定

sxhkd は特定のパターンでキーバインドを認識します。まず、モディファイアキーを要求します。これは Alt, Super, Hyper, Control のいずれかになります。その後、修飾キーを補完する通常のキーを入力する必要があります。そして、この2つのキーの間に “+” 記号を追加することで、キーバインドとして結合することができます。

したがって、sxhkdのキーバインドの一般的な形式は次のようになります。

修飾キー + 通常キー (+ {_, additional, keys})

これができたら、キーバインドの下にインデントされた行を作成するために EnterTab を押す必要があります。その後、キーバインドが押されたときに実行したいコマンドを指定する必要があります。

sxhkd の設定ファイルの例は次のようなものです。

# sxhkd に設定ファイルを再読み込みさせる
alt + エスケープ
	pkill -USR1 -x sxhkd
 
# bspwm を終了または再起動する
alt + shift + {q,r}
	bspc {quit,wm -r}
 
# 新しいターミナルウィンドウを作成するか、現在のウィンドウを画面内で最も大きいウィンドウに交換する 
alt + {_,shift + }Return
	{st, bspc node -s biggest.local} # ウィンドウを閉じる、または殺す
 
# ウィンドウを閉じるか強制終了する
ALT + {_,SHIFT + }C
	bspc node -{k,c}を実行します。
 
# ウィンドウの状態を変更する
alt + {t,ctrl + t,l,f} # ウィンドウの状態を変更する
	bspc node -t {tiled,pseudo_tiled,floating,fullscreen} # ウィンドウを拡大する。
 
# ウィンドウの一辺を外側に移動してウィンドウを拡張する
Super + Alt + {h,j,k,l} とする。
	bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0} # フォーカスするかウィンドウを
 
# 与えられたデスクトップにフォーカスを当てるか、ウィンドウを送信する
alt + {_,shift + }{1-9,0}を実行します。
	bspc {desktop -f,node -d} '^{1-9,10}'.

キーバインド構文の説明

上で説明したように、sxhkdのキーバインドシンタックスは比較的単純です。さらに、sxhkdはキーバインドをグループ化することができ、キーコードを使って分岐したコマンドを実行することができます。

例えば、この設定には中括弧を利用したコマンドが多数あります。これにより、類似のキーバインドで複数の機能を割り当てることができます。この設定にあるコマンドを考えてみましょう。

Alt + Shift + {q,r}
	bspc {quit, wm -r} です。

このコマンドはbspwmの終了と再起動を処理します。キーバインドにある中括弧は、コマンドラインにある中括弧と同じです。したがって、キーボードの Alt + Shift + Q を押すと、コマンドが実行されます。bspc quit というコマンドが実行されます。しかし、Alt+Shift+R を押すと、bbspc wm -r` が実行されます。

また、分岐の際に追加でキーを入力する必要がないようにすることもできます。次のような例を考えてみましょう。

alt + {_,shift + }Return
	{st, bspc node -s biggest.local} となります。

このコマンドは端末の起動を扱います。また、デスクトップ上のウィンドウを入れ替えます。最初のコマンドは Alt + Enter で実行でき、2番目のコマンドは Alt + Shift + Enter で実行することができます。

これは、アンダースコア文字がキーバインドのパススルーとして機能するためです。これにより、あるコマンドのデフォルトのキーバインドを持ちながら、他のコマンドのキーバインドを「変更」することができるのです。

最後に、sxhkdは1つの分岐に限定されるものではありません。次の例を見てください。

alt + {_,shift + }{1-9,0}と入力します。
	bspc {desktop -f,node -d} '^{1-9,10}'.

このコマンドはデスクトップの切り替えを処理します。また、それらのデスクトップ内のウィンドウの移動も管理します。最初のコマンドは Alt + 1-0 を押したときに実行され、2番目のコマンドは Shift 修飾キーで実行されます。

ここでは、中括弧を2つ使って、パススルーキーとデスクトップの番号を設定しています。この2つのオプションは、その下のコマンドの2つの中括弧に対応しています。

インストールの最終決定

これで、bspwm と sxhkd の設定に関する基本的な理解ができました。最後に必要なのは、ウィンドウマネージャとして bspwm を有効にすることです。これは Xorg から直接行うか、ディスプレイマネージャから行うことができます。

xinitrc を使って bspwm を起動する

bspwm を初期化する一番簡単な方法は .xinitrc ファイルに追記することです。もしあなたが最小限のLinuxディストリビューションを使っているなら、これはおそらくウィンドウマネージャをロードするために既に使っている方法でしょう。

これを行うには、.xinitrc の最後の行に次のように追記するだけです。

exec bspwm

ディスプレイマネージャを使って bspwm を実行する

しかし、Linux Mint や Ubuntu のようなフル機能のデスクトップを使用している場合、ログイン画面で bspwm を選択する必要があるかもしれません。

例えば、私のインストールした Ubuntu では、ログイン画面の歯車アイコンをクリックし、コンテキストメニューから bspwm を選択してロードする必要があります。

おめでとうございます。これでbspwmのインストールは完了です。これで、設定ファイルをいじったり、サードパーティのドックをインストールしたりして、さらにデスクトップをカスタマイズすることができます。ここに、あなたを刺激するカスタマイズされたデスクトップがいくつかあります。

よくある質問

1. 初めてログインしたときに画面が真っ黒なのはなぜですか?

デスクトップの背景が設定されていないことが原因だと思われます。これは、最小限のインストールを実行している場合によくあることです。fehなどの画像閲覧ソフトで背景のテーマを変更することができます。

2. 2. キーバインドが機能しないのはなぜですか?

これはおそらく2つの原因があります。

  • sxhkdが起動していないため、キーバインドがロードされませんでした。
  • sxhkdrcにシンタックスエラーがあった。sxhkd を設定する際に最もよくある間違いはインデントに関するものです。コマンドを正しく初期化するには、インデントされた行にTabスペースを挿入する必要があります。

3. 3. システムにログインすると、システムプロンプトが表示されるだけでした。

これは、いくつかの原因が考えられます。しかし、最も一般的な原因は、.xinitrc ファイルに問題があることです。bspwmがXorgがロードする最後のプログラムであること、バックグラウンドプロセスとして実行されていないことを確認する必要があります。

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。