「Bspwm」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「http://standards.freedesktop.org/」を「https://standards.freedesktop.org/」に置換)
(→‎インストール: 情報を更新)
 
(2人の利用者による、間の18版が非表示)
13行目: 13行目:
 
== インストール ==
 
== インストール ==
   
{{Pkg|bspwm}} と {{Pkg|sxhkd}} を[[インストール]]してください。あるいは開発版も存在します: {{AUR|bspwm-git}} と {{AUR|sxhkd-git}}Sxhkd はシンプルな X ホットキーデーモンで、{{ic|bspc}} で bspwm と対話したりアプリケーションを起動したりするのに使います。
+
{{Pkg|bspwm}} と {{Pkg|sxhkd}} を[[インストール]]してください。あるいは開発版も存在します: {{AUR|bspwm-git}} と {{AUR|sxhkd-git}} Sxhkd はシンプルな X ホットキーデーモンで、{{ic|bspc}} で bspwm と対話したりアプリケーションを起動したりするのに使います。
   
  +
{{Note|2020年8月以降リリースはありません。問題が発生した場合、または不足している機能が必要な場合は、Git パッケージをインストールして下さい。}}
ログイン時に bspwm を起動させるには、以下を {{ic|~/.xinitrc}} や {{ic|~/.xprofile}} に追加してください (設定するファイルは X を起動する方法やディスプレイマネージャによって異なります):
 
   
  +
==スタート==
{{bc|
 
  +
sxhkd &
 
  +
[[xinit]] を使用して {{ic|bspwm}} を実行します。
exec bspwm
 
}}
 
   
  +
==設定==
設定ファイルの bspwmrc で sxhkd を起動する場合は最初の行は省いてください。
 
   
  +
'''重要:''' $XDG_CONFIG_HOME 環境変数を設定しないと bspwmrc が認識されません。{{ic|1=export XDG_CONFIG_HOME="$HOME/.config"}} を {{ic|~/.profile}} に追加してください。
== 設定 ==
 
   
設定例は [https://github.com/baskerville/bspwm/blob/master/examples/ GitHub] や {{ic|/usr/share/doc/bspwm/examples/}} にあります。
+
設定例は{{ic|/usr/share/doc/bspwm/examples/}} にあります。
   
'''重要:''' $XDG_CONFIG_HOME 環境変数設定しないと bspwmrc が認識されません。{{ic|1=XDG_CONFIG_HOME="$HOME/.config"}} {{ic|export XDG_CONFIG_HOME}} を {{ic|~/.profile}} に追加てください
+
そこから {{ic|bspwmrc}} を {{ic|~/.config/bspwm/}} に、{{ic|sxhkdrc}} を {{ic|~/.config/sxhkd/}}} にコピー/インストールます
   
  +
ファイル {{ic|bspwmrc}} に実行可能権限を付与して下さい。これは、デフォルトの例が単純にシェル・スクリプトであるためです。
{{ic|~/.config/bspwm/}} と {{ic|~/.config/sxhkd/}} を作成して、{{ic|/usr/share/doc/bspwm/examples/bspwmrc}} を {{ic|~/.config/bspwm/}} に、{{ic|/usr/share/doc/bspwm/examples/sxhkdrc}} を {{ic|~/.config/sxhkd/}} にコピーしてください。そして {{ic|chmod +x ~/.config/bspwm/bspwmrc}} で bspwmrc に実行可能権限を付与してください。
 
  +
{{ic|bspc}} コマンドを使用して bspwm を構成します。
   
  +
$ install -Dm755 /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwm/bspwmrc
ウィンドウマネージャの設定やキーバインドを設定するファイルは2つ存在します。[[en2:bspwm/Example configurations|bspwm/設定例]]に注釈付きのサンプルがあります。
 
  +
$ install -Dm644 /usr/share/doc/bspwm/examples/sxhkdrc ~/.config/sxhkd/sxhkdrc
   
  +
これら2つのファイルは、それぞれ wm 設定とキー割り当てを設定する場所です。
bspwm のドキュメントは {{ic|man bspwm}} を実行することで確認できます。
 
   
sxhkd のドキュメント{{ic|man sxhkd}} を実行すれば確認できます
+
詳細なドキュメントについては、{{man|1|bspwm}} および {{man|1|sxhkd}} のマニュアル参照してください
   
==== マルチモニターの設定 ====
+
====マルチモニターの設定====
   
 
1つのモニターに10のデスクトップを設定する bspwmrc の例:
 
1つのモニターに10のデスクトップを設定する bspwmrc の例:
52行目: 53行目:
 
上記の例では、使用するデスクトップの合計は10なので、sxhkdrc で 'super + {1-9,0}' とそれぞれのデスクトップを指定することができます。
 
上記の例では、使用するデスクトップの合計は10なので、sxhkdrc で 'super + {1-9,0}' とそれぞれのデスクトップを指定することができます。
   
=== ルール ===
+
===ルール===
   
 
ウィンドウルールを設定する方法は2つあります ([https://github.com/baskerville/bspwm/commit/cd97a3290aa8d36346deb706fa307f5f8faa2f34 cd97a32])。
 
ウィンドウルールを設定する方法は2つあります ([https://github.com/baskerville/bspwm/commit/cd97a3290aa8d36346deb706fa307f5f8faa2f34 cd97a32])。
69行目: 70行目:
 
特定のウィンドウが設定したルールのとおりに動かない場合、プログラムのクラス名を確認してください。{{ic|xprop <nowiki>|</nowiki> grep WM_CLASS}} を実行することでクラス名を確認することができます。
 
特定のウィンドウが設定したルールのとおりに動かない場合、プログラムのクラス名を確認してください。{{ic|xprop <nowiki>|</nowiki> grep WM_CLASS}} を実行することでクラス名を確認することができます。
   
=== パネル ===
+
===パネル===
  +
{{AUR|lemonbar}}{{Broken package link|パッケージが存在しません}} のパネルのサンプルが GitHub ページの examples フォルダに存在します。[[Lemonbar]] の wiki ページで何か考えが得られるかもしれません。パネルは bspwmrc の {{ic|panel &}} を置き換えることで実行できます。bspwm パッケージの opt-depends を確認して、必要なパッケージをチェックしてください。
 
  +
====lemonbar を使用する====
  +
{{AUR|lemonbar-git}} のパネルのサンプルが GitHub ページの examples フォルダに存在します。[[Lemonbar]] の wiki ページで何か考えが得られるかもしれません。パネルは bspwmrc の {{ic|panel &}} を置き換えることで実行できます。bspwm パッケージの opt-depends を確認して、必要なパッケージをチェックしてください。
   
 
様々なシステムコールを使うことでステータスバーにシステム情報を表示することが可能です。以下の例では {{ic|panel}} を編集して BAR にボリュームの情報を表示します:
 
様々なシステムコールを使うことでステータスバーにシステム情報を表示することが可能です。以下の例では {{ic|panel}} を編集して BAR にボリュームの情報を表示します:
98行目: 101行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
====yabar を使用する====
=== スクラッチパッド ===
 
  +
  +
lemonbar を使用してサンプルパネルを使用するには、環境 (.profile) を設定し、パネルスクリプトがパス上にあることを確認する必要があります。設定するファイルは、 {{AUR|yabar}} で、設定ファイルは1つだけです。
  +
  +
====polybar を使用する====
  +
  +
[[Polybar]] を使用するには、bspwmrc 設定ファイルに {{ic|polybar ''example'' &}} を追加します。{{ic|''example''}} はバーの名前です。
  +
  +
===スクラッチパッド===
  +
  +
====pid を使う====
   
 
bspwm のウィンドウフラグを使うことで (i3 のスクラッチパッド機能でターミナルを表示したときのような) ドロップダウンターミナルを模す事ができます。bspwm の設定ファイルの末尾に以下を追加してください (使用しているターミナルエミュレータに置き換えてください):
 
bspwm のウィンドウフラグを使うことで (i3 のスクラッチパッド機能でターミナルを表示したときのような) ドロップダウンターミナルを模す事ができます。bspwm の設定ファイルの末尾に以下を追加してください (使用しているターミナルエミュレータに置き換えてください):
104行目: 117行目:
 
{{bc|<nowiki>
 
{{bc|<nowiki>
 
bspc rule -a scratchpad sticky=on state=floating hidden=on
 
bspc rule -a scratchpad sticky=on state=floating hidden=on
st -c scratchpad -e ~/bin/scratch &
+
# check scratchpad already running
  +
[ "$(ps -x | grep -c 'scratchpad')" -eq "1" ] && st -c scratchpad -e ~/bin/scratch &
 
</nowiki>}}
 
</nowiki>}}
   
111行目: 125行目:
 
{{bc|<nowiki>
 
{{bc|<nowiki>
 
#!/usr/bin/sh
 
#!/usr/bin/sh
bspc query -N -n .floating > /tmp/scratchid
+
# only add floating scratchpad window node id to /tmp/scratchid
  +
bspc query -N -n .floating | xargs -i sh -c 'bspc query --node {} -T | grep -q scratchpad && echo {} > /tmp/scratchid'
$SHELL
 
  +
exec $SHELL
 
</nowiki>}}
 
</nowiki>}}
   
 
スクラッチパッドを切り替えるホットキーは以下のように指定してください:
 
スクラッチパッドを切り替えるホットキーは以下のように指定してください:
 
 
{{bc|<nowiki>
 
{{bc|<nowiki>
 
id=$(cat /tmp/scratchid);\
 
id=$(cat /tmp/scratchid);\
126行目: 140行目:
 
多数のターミナルに対応して、tmuxinator/tmux のセッションを任意で起動したり、ウィンドウを即座にスクラッチパッドに変えたり、モニターに合わせてスクラッチパッドのサイズを自動的に調整する、高性能なスクラッチパッドスクリプトを探している場合 {{AUR|tdrop-git}} を見て下さい。
 
多数のターミナルに対応して、tmuxinator/tmux のセッションを任意で起動したり、ウィンドウを即座にスクラッチパッドに変えたり、モニターに合わせてスクラッチパッドのサイズを自動的に調整する、高性能なスクラッチパッドスクリプトを探している場合 {{AUR|tdrop-git}} を見て下さい。
   
  +
====クラス名を使う====
=== マシンごとにモニターの設定を変える ===
 
  +
  +
この例では、ドロップダウン端末としてカスタムクラス名を持つ ''termite'' を使用します。 ''termite'' である必要はありません。
  +
  +
まず、次の内容のファイルをパスに作成し、実行可能にします。この例では、これを {{ic|scratchpad.sh}} と呼びます。
  +
  +
{{bc|<nowiki>
  +
#!/usr/bin/bash
  +
  +
if [ -z $1 ]; then
  +
echo "Usage: $0 <name of hidden scratchpad window>"
  +
exit 1
  +
fi
  +
  +
pids=$(xdotool search --class ${1})
  +
for pid in $pids; do
  +
echo "Toggle $pid"
  +
bspc node $pid --flag hidden -f
  +
done
  +
</nowiki>}}
  +
  +
次に、これを bspwm の設定に追加します。
  +
  +
{{bc|<nowiki>
  +
...
  +
bspc rule -a dropdown sticky=on state=floating hidden=on
  +
termite --class dropdown -e "zsh -i" &
  +
...
  +
</nowiki>}}
  +
  +
ウィンドウを切り替えるには、 [[sxhkd]] のカスタムルールが必要です。パラメータとしてカスタムクラス名を指定します。
  +
  +
{{bc|<nowiki>
  +
super + u
  +
scratchpad.sh dropdown
  +
</nowiki>}}
  +
  +
====その他====
  +
  +
事前定義されたルールなしで任意のウィンドウタイプを使用できるスクラッチパッドについては、 [https://www.reddit.com/r/bspwm/comments/3xnwdf/i3_like_scratch_for_any_window_possible/cy6i585] を参照してください。
  +
  +
多くの端末を最初からサポートし、オプションで tmuxinator/tmux セッションを開始したり、任意のウィンドウをその場でスクラッチパッドにしたり、現在のモニタに合うように自動的にスクラッチパッドのサイズを変更したりするためのフラグを持つ、より洗練されたスクラッチパッドスクリプトについては、 {{AUR|tdrop-git}} を参照してください。
  +
  +
===マシンごとにモニターの設定を変える===
   
 
{{ic|bspwmrc}} はシェルスクリプトなので、以下のように設定することができます:
 
{{ic|bspwmrc}} はシェルスクリプトなので、以下のように設定することができます:
132行目: 189行目:
 
#! /bin/sh
 
#! /bin/sh
 
<nowiki>
 
<nowiki>
if [[ $(hostname) == 'myhost' ]]; then
+
if [[ $(hostname) == 'myhost' ]]; then
bspc monitor eDP1 -d I II III IV V VI VII VIII IX X
+
bspc monitor eDP1 -d I II III IV V VI VII VIII IX X
elif [[ $(hostname) == 'otherhost' ]]; then
+
elif [[ $(hostname) == 'otherhost' ]]; then
bspc monitor VGA-0 -d I II III IV V
+
bspc monitor VGA-0 -d I II III IV V
bspc monitor VGA-1 -d VI VII VIII IX X
+
bspc monitor VGA-1 -d VI VII VIII IX X
elif [[ $(hostname) == 'yetanotherhost' ]]; then
+
elif [[ $(hostname) == 'yetanotherhost' ]]; then
bspc monitor DVI-I-3 -d VI VII VIII IX X
+
bspc monitor DVI-I-3 -d VI VII VIII IX X
bspc monitor DVI-I-2 -d I II III IV V
+
bspc monitor DVI-I-2 -d I II III IV V
fi
+
fi
</nowiki>
+
</nowiki>
   
=== 全てのウィンドウがフロートするデスクトップの設定 ===
+
===全てのウィンドウがフロートするデスクトップの設定===
   
 
以下はフリーティングウィンドウだけを表示するデスクトップ3を設定するスクリプトです。マルチウィンドウの GIMP などのアプリケーションで役に立ちます。
 
以下はフリーティングウィンドウだけを表示するデスクトップ3を設定するスクリプトです。マルチウィンドウの GIMP などのアプリケーションで役に立ちます。
151行目: 208行目:
 
#!/bin/bash
 
#!/bin/bash
 
<nowiki>
 
<nowiki>
# change the desktop number here
+
# change the desktop number here
FLOATING_DESKTOP_ID=$(bspc query -D -d '^3')
+
FLOATING_DESKTOP_ID=$(bspc query -D -d '^3')
  +
 
bspc subscribe node_manage | while read -a msg ; do
+
bspc subscribe node_manage | while read -a msg ; do
desk_id=${msg[2]}
+
desk_id=${msg[2]}
wid=${msg[3]}
+
wid=${msg[3]}
[ "$FLOATING_DESKTOP_ID" = "$desk_id" ] && bspc node "$wid" -t floating
+
[ "$FLOATING_DESKTOP_ID" = "$desk_id" ] && bspc node "$wid" -t floating
done
+
done
</nowiki>
+
</nowiki>
   
 
([https://github.com/baskerville/bspwm/issues/428#issuecomment-199985423 ソース])
 
([https://github.com/baskerville/bspwm/issues/428#issuecomment-199985423 ソース])
   
  +
===キーボード===
== トラブルシューティング ==
 
  +
  +
Bspwm はキーボード入力を一切扱わず、代わりに ''bspc'' プログラムをインタフェースとして提供します。
  +
  +
キーボードショートカットを使用するには、{{Pkg|sxhkd}} (開発版は {{AUR|sxhkd-git}}) のようなホットキーデーモンを設定する必要があります。
  +
  +
==トラブルシューティング==
   
=== 画面が表示されずキーバインドが機能しない ===
+
===画面が表示されずキーバインドが機能しない===
   
 
デバッグする方法はあまりありません。まず、画面が表示されないのは問題ありません。bspwm が動いているということだからです。
 
デバッグする方法はあまりありません。まず、画面が表示されないのは問題ありません。bspwm が動いているということだからです。
188行目: 251行目:
 
次に、表示されたターミナルに {{ic|pidof sxhkd}} と入力してみてください。数字が返ってくるはずです。返ってこない場合、sxhd が動いていません。{{ic|sxhkd -c ~/.config/sxhkd/sxhkdrc}} で明示的に実行してみてください。sxhkdrc で Super キーを Alt キーなどに変更して何か変わらないかも確認してください。また、サンプルファイルから (物理的にファイルをコピーしないで) テキストをコピーしたときに何か問題があった可能性もあります。コードをコピーアンドペーストするとインデントに何か不具合が生じることがあり、sxhkd はそれによって上手く動作しなくなったのかもしれません。
 
次に、表示されたターミナルに {{ic|pidof sxhkd}} と入力してみてください。数字が返ってくるはずです。返ってこない場合、sxhd が動いていません。{{ic|sxhkd -c ~/.config/sxhkd/sxhkdrc}} で明示的に実行してみてください。sxhkdrc で Super キーを Alt キーなどに変更して何か変わらないかも確認してください。また、サンプルファイルから (物理的にファイルをコピーしないで) テキストをコピーしたときに何か問題があった可能性もあります。コードをコピーアンドペーストするとインデントに何か不具合が生じることがあり、sxhkd はそれによって上手く動作しなくなったのかもしれません。
   
  +
===カーソルテーマがデスクトップに適用されない===
=== ウィンドウボックスがアプリケーションよりも大きく表示される ===
 
  +
  +
こちらを参照、 [[カーソルテーマ#形が X のデフォルトカーソルの変更]]
  +
  +
===ウィンドウボックスがアプリケーションよりも大きく表示される===
   
 
GTK3 アプリを使っている場合にダイアログボックスでこの問題が起こることがあります。gtk3 のテーマファイル ({{ic|~/.config/gtk-3.0/gtk.css}}) に以下を作成・追加することで解決できます:
 
GTK3 アプリを使っている場合にダイアログボックスでこの問題が起こることがあります。gtk3 のテーマファイル ({{ic|~/.config/gtk-3.0/gtk.css}}) に以下を作成・追加することで解決できます:
207行目: 274行目:
 
(ソース: [https://bbs.archlinux.org/viewtopic.php?pid=1404973#p1404973 Bspwm フォーラムスレッド])
 
(ソース: [https://bbs.archlinux.org/viewtopic.php?pid=1404973#p1404973 Bspwm フォーラムスレッド])
   
=== Java アプリケーションの問題 ===
+
===Java アプリケーションの問題===
 
Java アプリケーションのウィンドウがリサイズできない、メニューがクリックするとすぐ閉じてしまうなどの問題が起こる場合、[[Java]] を見て下さい。
 
Java アプリケーションのウィンドウがリサイズできない、メニューがクリックするとすぐ閉じてしまうなどの問題が起こる場合、[[Java]] を見て下さい。
   
=== fish を使用する場合のキーバインドの問題 ===
+
===fish を使用する場合のキーバインドの問題===
 
[[fish]] を使うと、デスクトップが切り替えられなくなります。これは bspc が ^ 文字を使っており fish と互換性がないためです。コマンドを実行するときは bash を使うように sxhkd を設定することで解決できます:
 
[[fish]] を使うと、デスクトップが切り替えられなくなります。これは bspc が ^ 文字を使っており fish と互換性がないためです。コマンドを実行するときは bash を使うように sxhkd を設定することで解決できます:
 
$ set -U SXHKD_SHELL /usr/bin/bash
 
$ set -U SXHKD_SHELL /usr/bin/bash
216行目: 283行目:
 
もしくは、sxhkdrc ファイルの ^ 文字をバックスラッシュでエスケープすることもできます。
 
もしくは、sxhkdrc ファイルの ^ 文字をバックスラッシュでエスケープすることもできます。
   
  +
===fish を使用した時のパフォーマンスの問題===
=== 起動時に "Could not grab key 43 with modfield 68" というエラーメッセージ ===
 
  +
  +
[[sxhkd]] は、SHELL 環境変数に設定されたシェルを使用してコマンドを実行します。[[fish]] は、設定ファイルが大きいか不適切に設定されているため、初期化に時間がかかる場合があります。そのため、すべての sxhkd コマンドは、他のシェルよりも実行に時間がかかる場合があります。デフォルトのシェルを変更せずにこれを修正するには、sxhkd に明示的に bash を使うように指示するか、別のより高速なシェルでコマンドを実行するように指示します (たとえば、sh)
  +
  +
$ set -U SXHKD_SHELL sh
  +
  +
===起動時に "Could not grab key 43 with modfield 68" というエラーメッセージ===
 
同じキーを二回使用としたか、sxhkd を二回起動しようとしています。bspwmrc や {{ic | ~/.profile}}、{{ic | ~/.bash_profile}} などをチェックして sxhkd を二重に起動してないか確認してください。
 
同じキーを二回使用としたか、sxhkd を二回起動しようとしています。bspwmrc や {{ic | ~/.profile}}、{{ic | ~/.bash_profile}} などをチェックして sxhkd を二重に起動してないか確認してください。
   
== 参照 ==
+
==参照==
   
* メーリングリスト: bspwm ''at'' librelist.com.
+
*メーリングリスト: bspwm ''at'' librelist.com.
* {{ic|#bspwm}} - IRC チャンネル at irc.freenode.net
+
*{{ic|#bspwm}} - IRC チャンネル at irc.freenode.net
* https://bbs.archlinux.org/viewtopic.php?id=149444 - Arch フォーラムスレッド
+
*https://bbs.archlinux.org/viewtopic.php?id=149444 - Arch フォーラムスレッド
* https://github.com/baskerville/bspwm - GitHub プロジェクト
+
*https://github.com/baskerville/bspwm - GitHub プロジェクト
* https://github.com/windelicato/dotfiles/wiki/bspwm-for-dummies - earsplit's "bspwm for dummies"
+
*https://github.com/windelicato/dotfiles/wiki/bspwm-for-dummies - earsplit's "bspwm for dummies"
* https://github.com/smlb/dotfiles/wiki/Bspwm - smlb の wiki
+
*https://github.com/smlb/dotfiles/wiki/Bspwm - smlb の wiki

2024年2月2日 (金) 19:09時点における最新版

関連記事

bspwm はウィンドウがフルバイナリツリーの葉となるタイル型ウィンドウマネージャです。EWMH やマルチモニターに対応しており、メッセージで設定したり制御することができます。

インストール

bspwmsxhkdインストールしてください。あるいは開発版も存在します: bspwm-gitAURsxhkd-gitAUR Sxhkd はシンプルな X ホットキーデーモンで、bspc で bspwm と対話したりアプリケーションを起動したりするのに使います。

ノート: 2020年8月以降リリースはありません。問題が発生した場合、または不足している機能が必要な場合は、Git パッケージをインストールして下さい。

スタート

xinit を使用して bspwm を実行します。

設定

重要: $XDG_CONFIG_HOME 環境変数を設定しないと bspwmrc が認識されません。export XDG_CONFIG_HOME="$HOME/.config"~/.profile に追加してください。

設定例は、/usr/share/doc/bspwm/examples/ にあります。

そこから bspwmrc~/.config/bspwm/ に、sxhkdrc~/.config/sxhkd/} にコピー/インストールします。

ファイル bspwmrc に実行可能権限を付与して下さい。これは、デフォルトの例が単純にシェル・スクリプトであるためです。 bspc コマンドを使用して bspwm を構成します。

$ install -Dm755 /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwm/bspwmrc
$ install -Dm644 /usr/share/doc/bspwm/examples/sxhkdrc ~/.config/sxhkd/sxhkdrc

これら2つのファイルは、それぞれ wm 設定とキー割り当てを設定する場所です。

詳細なドキュメントについては、bspwm(1) および sxhkd(1) のマニュアルを参照してください。

マルチモニターの設定

1つのモニターに10のデスクトップを設定する bspwmrc の例:

bspc monitor -d I II III IV V VI VII VIII IX X

上記の行を修正して、以下のようにモニターごとにデスクトップを追加してください:

bspc monitor DVI-I-1 -d I II III IV
bspc monitor DVI-I-2 -d V VI VII
bspc monitor DP-1 -d VIII IX X

`xrandr -q` や `bspc query -M` を使うことでモニターの名前を確認できます。

上記の例では、使用するデスクトップの合計は10なので、sxhkdrc で 'super + {1-9,0}' とそれぞれのデスクトップを指定することができます。

ルール

ウィンドウルールを設定する方法は2つあります (cd97a32)。

1番目の方法は組み込まれている rule コマンドを使う方法です。bspwmrc のサンプルでも使われています:

bspc rule -a Gimp desktop=^8 follow=on state=floating
bspc rule -a Chromium desktop=^2
bspc rule -a mplayer2 state=floating
bspc rule -a Kupfer.py focus=on
bspc rule -a Screenkey manage=off

2番目の方法は外部の rule コマンドを使う方法です。こちらの方法は複雑ですが、複雑なウィンドウルールを作成することができます。ルールコマンドの例は こちらのサンプル を見て下さい。

特定のウィンドウが設定したルールのとおりに動かない場合、プログラムのクラス名を確認してください。xprop | grep WM_CLASS を実行することでクラス名を確認することができます。

パネル

lemonbar を使用する

lemonbar-gitAUR のパネルのサンプルが GitHub ページの examples フォルダに存在します。Lemonbar の wiki ページで何か考えが得られるかもしれません。パネルは bspwmrc の panel & を置き換えることで実行できます。bspwm パッケージの opt-depends を確認して、必要なパッケージをチェックしてください。

様々なシステムコールを使うことでステータスバーにシステム情報を表示することが可能です。以下の例では panel を編集して BAR にボリュームの情報を表示します:

panel_volume()
{
        volStatus=$(amixer get Master | tail -n 1 | cut -d '[' -f 4 | sed 's/].*//g')
        volLevel=$(amixer get Master | tail -n 1 | cut -d '[' -f 2 | sed 's/%.*//g')
        # is alsa muted or not muted?
        if [ "$volStatus" == "on" ]
        then
                echo "%{Fyellowgreen} $volLevel %{F-}"
        else
                # If it is muted, make the font red
                echo "%{Findianred} $volLevel %{F-}"
        fi
}

次に、パネルを呼び出して $PANEL_FIFO にパイプするようにしてください:

while true; do
echo "S" "$(panel_volume) $(panel_clock)" > "$PANEL_FIFO"
        sleep 1s
done &

yabar を使用する

lemonbar を使用してサンプルパネルを使用するには、環境 (.profile) を設定し、パネルスクリプトがパス上にあることを確認する必要があります。設定するファイルは、 yabarAUR で、設定ファイルは1つだけです。

polybar を使用する

Polybar を使用するには、bspwmrc 設定ファイルに polybar example & を追加します。example はバーの名前です。

スクラッチパッド

pid を使う

bspwm のウィンドウフラグを使うことで (i3 のスクラッチパッド機能でターミナルを表示したときのような) ドロップダウンターミナルを模す事ができます。bspwm の設定ファイルの末尾に以下を追加してください (使用しているターミナルエミュレータに置き換えてください):

bspc rule -a scratchpad sticky=on state=floating hidden=on
# check scratchpad already running
[ "$(ps -x | grep -c 'scratchpad')" -eq "1" ] && st -c scratchpad -e ~/bin/scratch &

スティッキーフラグによってウィンドウが常時デスクトップに表示されるようになります。そして ~/bin/scratch は以下のようにします:

#!/usr/bin/sh
# only add floating scratchpad window node id to /tmp/scratchid
bspc query -N -n .floating | xargs -i sh -c 'bspc query  --node {} -T | grep -q scratchpad && echo {} > /tmp/scratchid'
exec $SHELL

スクラッチパッドを切り替えるホットキーは以下のように指定してください:

id=$(cat /tmp/scratchid);\
bspc node $id --flag hidden;bspc node -f $id

スクラッチパッドでは定義済みのルールがないどんなウィンドウタイプでも使うことができます。参照: [1]

多数のターミナルに対応して、tmuxinator/tmux のセッションを任意で起動したり、ウィンドウを即座にスクラッチパッドに変えたり、モニターに合わせてスクラッチパッドのサイズを自動的に調整する、高性能なスクラッチパッドスクリプトを探している場合 tdrop-gitAUR を見て下さい。

クラス名を使う

この例では、ドロップダウン端末としてカスタムクラス名を持つ termite を使用します。 termite である必要はありません。

まず、次の内容のファイルをパスに作成し、実行可能にします。この例では、これを scratchpad.sh と呼びます。

#!/usr/bin/bash

if [ -z $1 ]; then
	echo "Usage: $0 <name of hidden scratchpad window>"
	exit 1
fi
    
pids=$(xdotool search --class ${1})
for pid in $pids; do
	echo "Toggle $pid"
	bspc node $pid --flag hidden -f
done

次に、これを bspwm の設定に追加します。

...
bspc rule -a dropdown sticky=on state=floating hidden=on
termite --class dropdown -e "zsh -i" &
...

ウィンドウを切り替えるには、 sxhkd のカスタムルールが必要です。パラメータとしてカスタムクラス名を指定します。

super + u
        scratchpad.sh dropdown

その他

事前定義されたルールなしで任意のウィンドウタイプを使用できるスクラッチパッドについては、 [2] を参照してください。

多くの端末を最初からサポートし、オプションで tmuxinator/tmux セッションを開始したり、任意のウィンドウをその場でスクラッチパッドにしたり、現在のモニタに合うように自動的にスクラッチパッドのサイズを変更したりするためのフラグを持つ、より洗練されたスクラッチパッドスクリプトについては、 tdrop-gitAUR を参照してください。

マシンごとにモニターの設定を変える

bspwmrc はシェルスクリプトなので、以下のように設定することができます:

#! /bin/sh

  if [[ $(hostname) == 'myhost' ]]; then
      bspc monitor eDP1 -d I II III IV V VI VII VIII IX X
  elif [[ $(hostname) == 'otherhost' ]]; then
      bspc monitor VGA-0 -d I II III IV V
      bspc monitor VGA-1 -d VI VII VIII IX X
  elif [[ $(hostname) == 'yetanotherhost' ]]; then
      bspc monitor DVI-I-3 -d VI VII VIII IX X
      bspc monitor DVI-I-2 -d I II III IV V
  fi
  

全てのウィンドウがフロートするデスクトップの設定

以下はフリーティングウィンドウだけを表示するデスクトップ3を設定するスクリプトです。マルチウィンドウの GIMP などのアプリケーションで役に立ちます。

$PATH の通っているディレクトリに以下のスクリプトを配置して .xinitrc などから呼び出してください (呼び出すときは末尾に & を付けます):

#!/bin/bash

  # change the desktop number here
  FLOATING_DESKTOP_ID=$(bspc query -D -d '^3')
 
  bspc subscribe node_manage | while read -a msg ; do
     desk_id=${msg[2]}
     wid=${msg[3]}
     [ "$FLOATING_DESKTOP_ID" = "$desk_id" ] && bspc node "$wid" -t floating
  done
  

(ソース)

キーボード

Bspwm はキーボード入力を一切扱わず、代わりに bspc プログラムをインタフェースとして提供します。

キーボードショートカットを使用するには、sxhkd (開発版は sxhkd-gitAUR) のようなホットキーデーモンを設定する必要があります。

トラブルシューティング

画面が表示されずキーバインドが機能しない

デバッグする方法はあまりありません。まず、画面が表示されないのは問題ありません。bspwm が動いているということだからです。

xinitrc が以下のようになっているか確認してください:

sxhkd &
exec bspwm

アンパサンド (&) は重要です。次に、xinitrc でターミナルを実行して正しく位置取りがされるか確認してください。画面の"中心"に表示されるはずです。ターミナルを実行するには、.xinitrc に以下を記述します:

sxhkd &
urxvt &
exec bspwm

何も表示されない場合、おそらく urxvt がインストールされていません。表示はされるが画面全体を覆ってしまう場合、BSPWM が正しく起動していません。chmod +x ~/.config/bspwm/bspwmrc を実行したか確認してください。

次に、表示されたターミナルに pidof sxhkd と入力してみてください。数字が返ってくるはずです。返ってこない場合、sxhd が動いていません。sxhkd -c ~/.config/sxhkd/sxhkdrc で明示的に実行してみてください。sxhkdrc で Super キーを Alt キーなどに変更して何か変わらないかも確認してください。また、サンプルファイルから (物理的にファイルをコピーしないで) テキストをコピーしたときに何か問題があった可能性もあります。コードをコピーアンドペーストするとインデントに何か不具合が生じることがあり、sxhkd はそれによって上手く動作しなくなったのかもしれません。

カーソルテーマがデスクトップに適用されない

こちらを参照、 カーソルテーマ#形が X のデフォルトカーソルの変更

ウィンドウボックスがアプリケーションよりも大きく表示される

GTK3 アプリを使っている場合にダイアログボックスでこの問題が起こることがあります。gtk3 のテーマファイル (~/.config/gtk-3.0/gtk.css) に以下を作成・追加することで解決できます:

.window-frame, .window-frame:backdrop {
  box-shadow: 0 0 0 black;
  border-style: none;
  margin: 0;
  border-radius: 0;
}
    
.titlebar {
  border-radius: 0;
}

(ソース: Bspwm フォーラムスレッド)

Java アプリケーションの問題

Java アプリケーションのウィンドウがリサイズできない、メニューがクリックするとすぐ閉じてしまうなどの問題が起こる場合、Java を見て下さい。

fish を使用する場合のキーバインドの問題

fish を使うと、デスクトップが切り替えられなくなります。これは bspc が ^ 文字を使っており fish と互換性がないためです。コマンドを実行するときは bash を使うように sxhkd を設定することで解決できます:

$ set -U SXHKD_SHELL /usr/bin/bash

もしくは、sxhkdrc ファイルの ^ 文字をバックスラッシュでエスケープすることもできます。

fish を使用した時のパフォーマンスの問題

sxhkd は、SHELL 環境変数に設定されたシェルを使用してコマンドを実行します。fish は、設定ファイルが大きいか不適切に設定されているため、初期化に時間がかかる場合があります。そのため、すべての sxhkd コマンドは、他のシェルよりも実行に時間がかかる場合があります。デフォルトのシェルを変更せずにこれを修正するには、sxhkd に明示的に bash を使うように指示するか、別のより高速なシェルでコマンドを実行するように指示します (たとえば、sh)

$ set -U SXHKD_SHELL sh

起動時に "Could not grab key 43 with modfield 68" というエラーメッセージ

同じキーを二回使用としたか、sxhkd を二回起動しようとしています。bspwmrc や ~/.profile ~/.bash_profile などをチェックして sxhkd を二重に起動してないか確認してください。

参照