「Bspwm」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(en:Bspwmへの転送ページ)
 
1行目: 1行目:
  +
{{Lowercase title}}
#redirect[[en:Bspwm]]
 
  +
[[Category:タイル型ウィンドウマネージャ]]
  +
[[en:Bspwm]]
  +
{{Related articles start}}
  +
{{Related3|bspwm/Example configurations|bspwm/設定例}}
  +
{{Related articles end}}
  +
  +
''bspwm'' はウィンドウがフルバイナリツリーの葉となるタイル型ウィンドウマネージャです。[http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html EWMH] やマルチモニターに対応しており、メッセージで設定したり制御することができます。
  +
  +
== インストール ==
  +
  +
{{Pkg|bspwm}} と {{Pkg|sxhkd}} を[[インストール]]してください。あるいは開発版も存在します: {{AUR|bspwm-git}} と {{AUR|sxhkd-git}}。Sxhkd はシンプルな X ホットキーデーモンで、{{ic|bspc}} で bspwm と対話したりアプリケーションを起動したりするのに使います。
  +
  +
ログイン時に bspwm を起動させるには、以下を {{ic|~/.xinitrc}} や {{ic|~/.xprofile}} に追加してください (設定するファイルは X を起動する方法やディスプレイマネージャによって異なります):
  +
  +
{{bc|
  +
sxhkd &
  +
exec bspwm
  +
}}
  +
  +
== 設定 ==
  +
  +
設定例は [https://github.com/baskerville/bspwm/blob/master/examples/ GitHub] や {{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|~/.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 に実行可能権限を付与してください。
  +
  +
ウィンドウマネージャの設定やキーバインドを設定するファイルは2つ存在します。[[en2:bspwm/Example configurations|bspwm/設定例]]に注釈付きのサンプルがあります。
  +
  +
bspwm のドキュメントは {{ic|man bspwm}} を実行することで確認できます。
  +
  +
sxhkd のドキュメントも {{ic|man sxhkd}} を実行すれば確認できます。
  +
  +
==== マルチモニターの設定 ====
  +
  +
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つあります ([https://github.com/baskerville/bspwm/commit/cd97a3290aa8d36346deb706fa307f5f8faa2f34 cd97a32])。
  +
  +
1番目の方法は組み込まれている rule コマンドを使う方法です。bspwmrc のサンプルでも使われています:
  +
{{bc|<nowiki>
  +
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
  +
</nowiki>}}
  +
  +
2番目の方法は外部の rule コマンドを使う方法です。こちらの方法は複雑ですが、複雑なウィンドウルールを作成することができます。ルールコマンドの例は [https://github.com/baskerville/bspwm/tree/master/examples/external_rules こちらのサンプル] を見て下さい。
  +
  +
特定のウィンドウが設定したルールのとおりに動かない場合、プログラムのクラス名を確認してください。{{ic|xprop <nowiki>|</nowiki> grep WM_CLASS}} を実行することでクラス名を確認することができます。
  +
  +
=== パネル ===
  +
{{AUR|lemonbar}} のパネルのサンプルが GitHub ページの examples フォルダに存在します。[[en2:Lemonbar|Lemonbar]] の wiki ページで何か考えが得られるかもしれません。パネルは bspwmrc の {{ic|panel &}} を置き換えることで実行できます。bspwm パッケージの opt-depends を確認して、必要なパッケージをチェックしてください。
  +
  +
様々なシステムコールを使うことでステータスバーにシステム情報を表示することが可能です。以下の例では {{ic|panel}} を編集して BAR にボリュームの情報を表示します:
  +
  +
{{bc|<nowiki>
  +
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
  +
}</nowiki>}}
  +
  +
次に、パネルを呼び出して {{ic|$PANEL_FIFO}} にパイプするようにしてください:
  +
  +
{{bc|<nowiki>
  +
while true; do
  +
echo "S" "$(panel_volume) $(panel_clock) > "$PANEL_FIFO"
  +
sleep 1s
  +
done &
  +
</nowiki>}}
  +
  +
=== スクラッチパッド ===
  +
  +
コマンドのショートカットを追加することで (i3 のような) スクラッチパッドをエミュレートできます:
  +
  +
{{bc|<nowiki>
  +
xdotool search --onlyvisible --classname scratchpad windowunmap \
  +
|| xdotool search --classname scratchpad windowmap \
  +
|| st -c scratchpad -g 1000x400+460 &
  +
</nowiki>}}
  +
  +
そして以下のルールを追加してください:
  +
  +
{{bc|<nowiki>
  +
bspc rule -a scratchpad sticky=on state=floating
  +
</nowiki>}}
  +
  +
[https://bbs.archlinux.org/viewtopic.php?pid=1338582#p1338582] や [http://yuri-rage.github.io/geekery/2015/01/26/bleeding-edge-bspwm/] も参照。
  +
  +
スクラッチパッドでは定義済みのルールがないどんなウィンドウタイプでも使うことができます。参照: [https://www.reddit.com/r/bspwm/comments/3xnwdf/i3_like_scratch_for_any_window_possible/cy6i585]。
  +
  +
多数のターミナルに対応して、tmuxinator/tmux のセッションを任意で起動したり、ウィンドウを即座にスクラッチパッドに変えたり、モニターに合わせてスクラッチパッドのサイズを自動的に調整する、高性能なスクラッチパッドスクリプトを探している場合 {{AUR|tdrop-git}} を見て下さい。
  +
  +
=== マシンごとにモニターの設定を変える ===
  +
  +
{{ic|bspwmrc}} はシェルスクリプトなので、以下のように設定することができます:
  +
  +
#! /bin/sh
  +
<nowiki>
  +
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
  +
</nowiki>
  +
  +
== トラブルシューティング ==
  +
  +
=== 画面が表示されずキーバインドが機能しない ===
  +
  +
デバッグする方法はあまりありません。まず、画面が表示されないのは問題ありません。bspwm が動いているということだからです。
  +
  +
xinitrc が以下のようになっているか確認してください:
  +
  +
{{bc|<nowiki>
  +
sxhkd &
  +
exec bspwm
  +
</nowiki>}}
  +
  +
アンパサンド (&) は重要です。次に、xinitrc でターミナルを実行して正しく位置取りがされるか確認してください。画面の"中心"に表示されるはずです。ターミナルを実行するには、{{ic|.xinitrc}} に以下を記述します:
  +
  +
{{bc|<nowiki>
  +
sxhkd &
  +
urxvt &
  +
exec bspwm
  +
</nowiki>}}
  +
  +
何も表示されない場合、おそらく urxvt がインストールされていません。表示はされるが画面全体を覆ってしまう場合、BSPWM が正しく起動していません。{{ic|chmod +x ~/.config/bspwm/bspwmrc}} を実行したか確認してください。
  +
  +
次に、表示されたターミナルに {{ic|pidof sxhkd}} と入力してみてください。数字が返ってくるはずです。返ってこない場合、sxhd が動いていません。{{ic|sxhkd -c ~/.config/sxhkd/sxhkdrc}} で明示的に実行してみてください。sxhkdrc で Super キーを Alt キーなどに変更して何か変わらないかも確認してください。また、サンプルファイルから (物理的にファイルをコピーしないで) テキストをコピーしたときに何か問題があった可能性もあります。コードをコピーアンドペーストするとインデントに何か不具合が生じることがあり、sxhkd はそれによって上手く動作しなくなったのかもしれません。
  +
  +
=== ウィンドウボックスがアプリケーションよりも大きく表示される ===
  +
  +
GTK3 アプリを使っている場合にダイアログボックスでこの問題が起こることがあります。gtk3 のテーマファイル ({{ic|~/.config/gtk-3.0/gtk.css}}) に以下を作成・追加することで解決できます:
  +
  +
{{bc|<nowiki>
  +
.window-frame, .window-frame:backdrop {
  +
box-shadow: 0 0 0 black;
  +
border-style: none;
  +
margin: 0;
  +
border-radius: 0;
  +
}
  +
  +
.titlebar {
  +
border-radius: 0;
  +
}
  +
</nowiki>}}
  +
  +
(ソース: [https://bbs.archlinux.org/viewtopic.php?pid=1404973#p1404973 Bspwm フォーラムスレッド])
  +
  +
=== Java アプリケーションの問題 ===
  +
Java アプリケーションのウィンドウがリサイズできない、メニューがクリックするとすぐ閉じてしまうなどの問題が起こる場合、[[Java]] を見て下さい。
  +
  +
=== fish を使用する場合のキーバインドの問題 ===
  +
[[fish]] を使うと、デスクトップが切り替えられなくなります。これは bspc が ^ 文字を使っており fish と互換性がないためです。コマンドを実行するときは bash を使うように sxhkd を設定することで解決できます:
  +
$ set -U SXHKD_SHELL /usr/bin/bash
  +
  +
もしくは、sxhkdrc ファイルの ^ 文字をバックスラッシュでエスケープすることもできます。
  +
  +
== 参照 ==
  +
  +
* メーリングリスト: bspwm ''at'' librelist.com.
  +
* {{ic|#bspwm}} - IRC チャンネル at irc.freenode.net
  +
* https://bbs.archlinux.org/viewtopic.php?id=149444 - Arch BBS thread
  +
* https://github.com/baskerville/bspwm - GitHub プロジェクト
  +
* https://github.com/windelicato/dotfiles/wiki/bspwm-for-dummies - earsplit's "bspwm for dummies"
  +
* https://github.com/smlb/dotfiles/wiki/Bspwm - smlb の wiki

2015年12月29日 (火) 18:17時点における版

関連記事

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

インストール

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

ログイン時に bspwm を起動させるには、以下を ~/.xinitrc~/.xprofile に追加してください (設定するファイルは X を起動する方法やディスプレイマネージャによって異なります):

sxhkd &
exec bspwm

設定

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

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

~/.config/bspwm/~/.config/sxhkd/ を作成して、/usr/share/doc/bspwm/examples/bspwmrc~/.config/bspwm/ に、/usr/share/doc/bspwm/examples/sxhkdrc~/.config/sxhkd/ にコピーしてください。そして chmod +x ~/.config/bspwm/bspwmrc で bspwmrc に実行可能権限を付与してください。

ウィンドウマネージャの設定やキーバインドを設定するファイルは2つ存在します。bspwm/設定例に注釈付きのサンプルがあります。

bspwm のドキュメントは man bspwm を実行することで確認できます。

sxhkd のドキュメントも man sxhkd を実行すれば確認できます。

マルチモニターの設定

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 を実行することでクラス名を確認することができます。

パネル

lemonbarAUR のパネルのサンプルが 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 &

スクラッチパッド

コマンドのショートカットを追加することで (i3 のような) スクラッチパッドをエミュレートできます:

xdotool search --onlyvisible --classname scratchpad windowunmap \
|| xdotool search --classname scratchpad windowmap \
|| st -c scratchpad -g 1000x400+460 &

そして以下のルールを追加してください:

bspc rule -a scratchpad sticky=on state=floating

[1][2] も参照。

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

多数のターミナルに対応して、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
 

トラブルシューティング

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

デバッグする方法はあまりありません。まず、画面が表示されないのは問題ありません。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 はそれによって上手く動作しなくなったのかもしれません。

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

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 ファイルの ^ 文字をバックスラッシュでエスケープすることもできます。

参照