「Herbstluftwm」の版間の差分
(en:Herbstluftwmへの転送ページ) |
(→起動: 同期) |
||
| (3人の利用者による、間の9版が非表示) | |||
| 1行目: | 1行目: | ||
| + | [[Category:タイル型ウィンドウマネージャ]] |
||
| − | #redirect[[en:Herbstluftwm]] |
||
| + | [[en:Herbstluftwm]] |
||
| + | {{Related articles start}} |
||
| + | {{Related|ウィンドウマネージャ}} |
||
| + | {{Related articles end}} |
||
| + | [http://herbstluftwm.org Herbstluftwm] は Xlib と Glib を使用する X11 向けの手動タイル型ウィンドウマネージャです。 |
||
| + | |||
| + | ==インストール== |
||
| + | Herbstluftwm は {{Pkg|herbstluftwm}} パッケージや {{AUR|herbstluftwm-git}} パッケージで[[インストール]]できます。 |
||
| + | |||
| + | == 起動 == |
||
| + | |||
| + | === tty から === |
||
| + | |||
| + | [[xinit]] から {{ic|herbstluftwm}} を起動します。 |
||
| + | |||
| + | === ディスプレイマネージャー === |
||
| + | |||
| + | {{Pkg|herbstluftwm}} には、ウィンドウマネージャーを起動する [[Xsession]] として {{ic|herbstluftwm.desktop}} が含まれています。 |
||
| + | |||
| + | === 他のウィンドウマネージャー内から === |
||
| + | |||
| + | すでにウィンドウマネージャーセッションに入っている場合は、{{ic|herbstluftwm --replace}} を実行して、そのウィンドウマネージャーを herbstluft に置き換えることができます。 |
||
| + | |||
| + | == はじめに == |
||
| + | |||
| + | {{man|1|herbstluftwm}} と {{man|1|herbstclient}} の man ページを読んでください。これらには、レイアウトが保存されるバイナリツリーの説明から、設定ファイルのオプションと設定値まで、様々な情報が載っています。 |
||
| + | |||
| + | ==設定== |
||
| + | |||
| + | {{ic|/etc/xdg/herbstluftwm/autostart}} ファイルを {{ic|$HOME/.config/herbstluftwm/autostart}} にコピーしてください。コピーしたファイルは必要に応じて編集できます。autostart ファイルには実行可能属性を付与してください。そうしないとキーバインドが機能しません。 |
||
| + | |||
| + | herbstluftwm の設定は {{ic|herbstclient reload}} を実行するか、reload コマンドに対応するキーバインドを使うことで即座に反映されます (コマンドセクションを参照)。リロードされるたびに Autostart が呼び出されるので、まず autostart の中にある既存の設定を解除するようにするのが普通です。 |
||
| + | |||
| + | ===マルチモニターのサポート=== |
||
| + | |||
| + | Herbstluftwm はマルチモニターを仮想概念でサポートしています。herbstluftwm におけるモニターは xrandr で確認できる実際のモニターの構成とは一致しません。柔軟にモニターを配置を制御することができるようになっています。{{ic|herbstclient detect_monitors}} を使うことで自動的に物理的なセットアップに適応できます。モニターを追加・削除・リサイズする方法は man ページを見てください。マルチモニターのタグはモニターによって"占有"されることがありません。既に他のモニターで使われているタグを別のモニターで使用すると、モニターはそれぞれのタグを交換します。 |
||
| + | |||
| + | ==コマンド== |
||
| + | |||
| + | Herbstclient はコマンドラインからウィンドウマネージャを完全に制御することができる強力なツールです。 |
||
| + | |||
| + | herbstclient のパラメータはタブ補完が効きます。{{ic|herbstclient list_commands}} で全てのパラメータを確認してください |
||
| + | |||
| + | 間違ったパラメータをコマンドで使ってもエラーメッセージは表示されません。代わりにゼロ以外の返り値がきます。($SHELL プロンプトの設定で) コマンドの返り値を表示しないようにしている場合、{{ic|echo $?}} で最後に実行したコマンドの返り値を確認できます。 |
||
| + | |||
| + | ==スクリプトとフック== |
||
| + | |||
| + | herbstluftwm を制御するときは herbstclient のコマンドを使うのがメインになりますが、herbstclient はどんなスクリプトからも呼び出せるので、スクリプトを使うことで柔軟に herbstluftwm を制御することが可能です。さらに、ウィンドウ管理のイベントに反応して制御を行うこともできます。 |
||
| + | |||
| + | ===次の empty タグに切り替えるスクリプト=== |
||
| + | |||
| + | 以下の Ruby スクリプトを使うことで (次あるいは前の full または empty) タグを切り替えることができます。(+1 または -1) と (full または empty) の引数を付けて実行してください。例えば、スクリプトを {{ic|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 |
||
| + | |||
| + | 以下がそのスクリプトです: |
||
| + | {{bc|<nowiki> |
||
| + | #!/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 |
||
| + | </nowiki>}} |
||
| + | |||
| + | ===内側の余白 (などの設定) を変更するスクリプト=== |
||
| + | |||
| + | 以下は内側の余白を切り替える Ruby スクリプトです。他の設定を変更するように作り変えることもできます。{{ic|/tmp}} にダミーファイルを作ることで現在のレイアウトを確認しています。 |
||
| + | |||
| + | {{bc|<nowiki> |
||
| + | #!/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 |
||
| + | </nowiki>}} |
||
| + | |||
| + | ===タグごとに装飾を変更するスクリプト=== |
||
| + | |||
| + | 以下の Perl スクリプトではフックを使うことでウィンドウ管理のイベントに反応します。(バックグラウンドで) 自動実行することが可能です。 |
||
| + | |||
| + | {{bc|<nowiki> |
||
| + | #!/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 |
||
| + | </nowiki>}} |
||
| + | |||
| + | == トラブルシューティング == |
||
| + | |||
| + | * インストール後、{{ic|$mod+enter}} キーバインドはターミナルを起動しません。herbstluftwm 自動起動設定ファイルはデフォルトで xterm ターミナルを使用します。{{Pkg|xterm}} が [[インストール]] されていることを確認するか、別の端末を使用するように自動起動ファイルを編集してください。 |
||
| + | * herbstluftwm からログアウトするには、コマンド {{ic|herbstclient quit}} またはデフォルトのキーバインド {{ic|$mod+shift-q}} を使用します。 |
||
| + | |||
| + | ==参照== |
||
| + | * [http://herbstluftwm.org herbstluftwm ホームページ] |
||
| + | * [https://bbs.archlinux.org/viewtopic.php?id=128646 herbstluftwm スレッド] |
||
| + | * {{ic|/usr/share/doc/herbstluftwm/examples/}} - 様々なスクリプト |
||
| + | * {{ic|/usr/share/doc/herbstluftwm/BUGS}} - バグ |
||
| + | * [http://crunchbang.org/forums/viewtopic.php?pid=204358%23p204358#p204358k ACrunchBang フォーラムの herbstluftwm スレッド] |
||
| + | * '''スクリーンショットと設定ファイル:''' [https://bbs.archlinux.org/viewtopic.php?id=133557 ArchLinux フォーラム], [http://dotshare.it/category/wms/herbstluft/ DotShare.it]。 |
||
| + | * {{ic|#herbstluftwm}} - IRC チャンネル at the irc.freenode.net |
||
| + | * [https://github.com/ypnos/hlwm User git repository #1] with autostart written in Perl and a few custom scripts |
||
| + | * [https://github.com/ylixir/hlwm-config User git repository #2] with autostart and panel written in Python |
||
2024年3月11日 (月) 10:56時点における最新版
関連記事
Herbstluftwm は Xlib と Glib を使用する X11 向けの手動タイル型ウィンドウマネージャです。
目次
インストール
Herbstluftwm は herbstluftwm パッケージや herbstluftwm-gitAUR パッケージでインストールできます。
起動
tty から
xinit から herbstluftwm を起動します。
ディスプレイマネージャー
herbstluftwm には、ウィンドウマネージャーを起動する Xsession として herbstluftwm.desktop が含まれています。
他のウィンドウマネージャー内から
すでにウィンドウマネージャーセッションに入っている場合は、herbstluftwm --replace を実行して、そのウィンドウマネージャーを herbstluft に置き換えることができます。
はじめに
herbstluftwm(1) と herbstclient(1) の 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
トラブルシューティング
- インストール後、
$mod+enterキーバインドはターミナルを起動しません。herbstluftwm 自動起動設定ファイルはデフォルトで xterm ターミナルを使用します。xterm が インストール されていることを確認するか、別の端末を使用するように自動起動ファイルを編集してください。 - herbstluftwm からログアウトするには、コマンド
herbstclient quitまたはデフォルトのキーバインド$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