「Herbstluftwm」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) |
Kusanaginoturugi (トーク | 投稿記録) (関連記事を追加) |
||
| 1行目: | 1行目: | ||
[[Category:タイル型ウィンドウマネージャ]] |
[[Category:タイル型ウィンドウマネージャ]] |
||
[[en:Herbstluftwm]] |
[[en:Herbstluftwm]] |
||
| + | {{Related articles start}} |
||
| + | {{Related|ウィンドウマネージャ}} |
||
| + | {{Related articles end}} |
||
[http://herbstluftwm.org Herbstluftwm] は Xlib と Glib を使用する X11 向けの手動タイル型ウィンドウマネージャです。 |
[http://herbstluftwm.org Herbstluftwm] は Xlib と Glib を使用する X11 向けの手動タイル型ウィンドウマネージャです。 |
||
2021年10月12日 (火) 13:03時点における版
関連記事
Herbstluftwm は Xlib と Glib を使用する X11 向けの手動タイル型ウィンドウマネージャです。
目次
インストール
Herbstluftwm は herbstluftwm パッケージや herbstluftwm-gitAUR パッケージでインストールできます。
起動
xinit から herbstluftwm を起動します。
はじめに
herbstluftwm(1) と {{man|1|herbstclient} の man ページを読んでください。これらには、レイアウトが保存されるバイナリツリーの説明から、設定ファイルのオプションと設定値まで、様々な情報が載っています。
設定
/etc/xdg/herbstluftwm/autostart ファイルを $HOME/.config/herbstluftwm/autostart にコピーしてください。コピーしたファイルは必要に応じて編集できます。autostart ファイルには実行可能属性を付与してください。そうしないとキーバインドが機能しません。
herbstluftwm の設定は herbstclient reload を実行するか、reload コマンドに対応するキーバインドを使うことで即座に反映されます (コマンドセクションを参照)。リロードされるたびに Autostart が呼び出されるので、まず autostart の中にある既存の設定を解除するようにするのが普通です。
マルチモニターのサポート
Herbstluftwm はマルチモニターを仮想概念でサポートしています。herbstluftwm におけるモニターは xrandr で確認できる実際のモニターの構成とは一致しません。柔軟にモニターを配置を制御することができるようになっています。herbstclient detect_monitors を使うことで自動的に物理的なセットアップに適応できます。モニターを追加・削除・リサイズする方法は man ページを見てください。マルチモニターのタグはモニターによって"占有"されることがありません。既に他のモニターで使われているタグを別のモニターで使用すると、モニターはそれぞれのタグを交換します。
コマンド
Herbstclient はコマンドラインからウィンドウマネージャを完全に制御することができる強力なツールです。
herbstclient のパラメータはタブ補完が効きます。herbstclient list_commands で全てのパラメータを確認してください
間違ったパラメータをコマンドで使ってもエラーメッセージは表示されません。代わりにゼロ以外の返り値がきます。($SHELL プロンプトの設定で) コマンドの返り値を表示しないようにしている場合、echo $? で最後に実行したコマンドの返り値を確認できます。
スクリプトとフック
herbstluftwm を制御するときは herbstclient のコマンドを使うのがメインになりますが、herbstclient はどんなスクリプトからも呼び出せるので、スクリプトを使うことで柔軟に herbstluftwm を制御することが可能です。さらに、ウィンドウ管理のイベントに反応して制御を行うこともできます。
次の empty タグに切り替えるスクリプト
以下の Ruby スクリプトを使うことで (次あるいは前の full または empty) タグを切り替えることができます。(+1 または -1) と (full または empty) の引数を付けて実行してください。例えば、スクリプトを herbst-move.rb と保存した場合、次のコマンドを実行することで次の full タグに移動します:
$ ruby herbst-move.rb +1 full
キーバインドでスクリプトを呼び出すこともできます:
hc keybind $Mod-Left spawn ruby /home/carl/Ruby/herbst-move.rb -1 empty hc keybind $Mod-Right spawn ruby /home/carl/herbst-move.rb +1 empty hc keybind $Mod-Up spawn ruby /home/carl/Ruby/herbst-move.rb -1 full hc keybind $Mod-Down spawn ruby /home/carl/Ruby/herbst-move.rb +1 full
以下がそのスクリプトです:
#!/usr/local/bin/ruby
incr, type = ARGV
d = incr.to_i
if type == 'full'
ch = '.'
else
ch = ':'
end
array = `herbstclient tag_status 0`.scan(/[:\.\#][^\t]*/)
len = array.length
orig = array.find_index{|e| e[0] == '#'}
i = (orig+d) % len
while
array[i][0] == ch
i = (i+d) % len
end
if i != orig
system "herbstclient use_index #{i}"
end
内側の余白 (などの設定) を変更するスクリプト
以下は内側の余白を切り替える Ruby スクリプトです。他の設定を変更するように作り変えることもできます。/tmp にダミーファイルを作ることで現在のレイアウトを確認しています。
#!/usr/bin/ruby
file1 = "/tmp/herbst-padding-1"
file2 = "/tmp/herbst-padding-2"
pad1 = 'pad 0 0 0 0 0'
pad2 = 'pad 0 0 20 0 200'
pad3 = 'pad 0 0 0 0 150'
files = [file1, file2].map{|f| File.exist? File.expand_path(f)}
if files == [false, false] # 0 files
system "herbstclient #{pad2}"
system "touch #{file1}"
elsif files == [true, false] # 1 file
system "herbstclient #{pad1}"
system "touch #{file2}"
else # 2 files
system "herbstclient #{pad3}"
system "rm #{file1} #{file2}"
end
タグごとに装飾を変更するスクリプト
以下の Perl スクリプトではフックを使うことでウィンドウ管理のイベントに反応します。(バックグラウンドで) 自動実行することが可能です。
#!/usr/bin/perl
# This script watches for tag changes and gives visual feedback
## Configuration (fill with your tag names)
my %colors = (
main => '#DD0000',
devel => '#13B8E0',
write => '#96E013',
admin => '#C713E0'
);
## Apply tag color
# Right now we change the active window's border color to the tag's color.
sub redecorate
{
my ($foo, $activity) = @_;
system("herbstclient", "set", "window_border_active_color",
"$colors{$activity}");
}
## main routine
use v5.20;
# set up a pipe for reading hooks
open HOOKS, "herbstclient -i '(tag_changed|reload)'|"
or die "can't fork: $!";
# process incoming messages
OUTER:
while (<HOOKS>) {
chomp;
for ($_) {
redecorate(split(/\t/)) when /^tag_changed/;
last OUTER when /^reload/; # quit on reload
}
}
close HOOKS or die "unfinished love story: $! $?"; # happens on hlwm crash
Troubleshooting
- After installing,
$mod+enterkeybind does not start a terminal: the herbstluftwm autostart config file uses the xterm terminal by default. Make sure xterm is installed or edit the autostart file to use a different terminal. - To log out of herbstluftwm, use the command
herbstclient quitor the default keybind of$mod+shift-q
参照
- herbstluftwm ホームページ
- herbstluftwm スレッド
/usr/share/doc/herbstluftwm/examples/- 様々なスクリプト/usr/share/doc/herbstluftwm/BUGS- バグ- ACrunchBang フォーラムの herbstluftwm スレッド
- スクリーンショットと設定ファイル: ArchLinux フォーラム, DotShare.it。
#herbstluftwm- IRC チャンネル at the irc.freenode.net- User git repository #1 with autostart written in Perl and a few custom scripts
- User git repository #2 with autostart and panel written in Python