「Dwm」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(2人の利用者による、間の28版が非表示)
4行目: 4行目:
 
[[de:Dwm]]
 
[[de:Dwm]]
 
[[en:Dwm]]
 
[[en:Dwm]]
[[es:Dwm]]
+
[[pt:Dwm]]
[[fr:DWM]]
 
[[ru:Dwm]]
 
 
[[zh-hans:Dwm]]
 
[[zh-hans:Dwm]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|dmenu}}
 
{{Related|dmenu}}
{{Related|wmii}}
+
{{Related|ウィンドウマネージャ}}
 
{{Related articles end}}
 
{{Related articles end}}
[http://dwm.suckless.org/ dwm] は [[Xorg]] の動的ウィンドウマネージャです。タイル・スタック・フルスクリーンレイアウトでウィンドウを管理し、さらに[[#パッチ|パッチ]]を使うことで他のレイアウトも利用できます。レイアウトは動的に適用することができるため、アプリケーションを使用する環境と作業を最適化することが可能です。dwm はきわめて軽量かつ高速であり、C で書かれていてソースコードの行数を2000行以下から増やさないという設計目標を掲げています。[[xrandr]] や Xinerama による[[マルチディスプレイ]]もサポートしています。
+
[http://dwm.suckless.org/ dwm] は [[Xorg]] の動的ウィンドウマネージャです。タイル・スタック・フルスクリーンレイアウトでウィンドウを管理し、さらに[[#パッチ|パッチ]]を使うことで他のレイアウトも利用できます。レイアウトは動的に適用することができるため、アプリケーションを使用する環境と作業を最適化することが可能です。dwm はきわめて軽量かつ高速であり、C で書かれていてソースコードの行数を2000行以下から増やさないという設計目標を掲げています。[[xrandr]] や Xinerama による [[マルチディスプレイ]] もサポートしています。
   
 
== インストール ==
 
== インストール ==
   
{{note|ソースから dwm をコンパイルしない場合、dwm のカスタマズはできませんソードを編集して設定変更することになっているためです詳しくは [[#設定]] をさい。}}
+
dwm は、パッケージ {{AUR|dwm}} または {{AUR|dwm-git}} ンストールできまビルドとインルの '''前に'''、必要な [[Dwm#設定|設定]] の変更を行ってください。[[makepkg]] を参照しください。
   
  +
{{Tip|[https://git.suckless.org/dwm/file/README.html アップストリームの手順] に従うこともできますが、[[pacman]] がファイルを追跡せずにファイルをインストールします。}}
{{AUR|dwm}} パッケージを[[インストール]]してください。もしくは [[ABS]] や {{AUR|dwm-git}} (開発版) パッケージを使って、必要に応じてソースを変更して dwm をソースからコンパイルしてください。[[Xorg]] 用の軽量・高速なダイナミックメニューである [[dmenu]] もインストールすると良いでしょう。
 
   
== dwm の起動 ==
+
=== 設定 ===
   
  +
dwm はコンパイル時にいくつかのソースファイル、特に {{ic|config.h}} を編集することで設定します。これらの設定に関する詳細な情報は、同梱され、コメントが付いています。{{ic|config.def.h}} と、dwm のウェブサイトの [https://dwm.suckless.org/customisation/ customisation section] を参照してください。
[[ディスプレイマネージャ]]のメニューから ''Dwm'' を選択してください。
 
   
  +
公式サイトには、dwm に機能を追加するための [https://dwm.suckless.org/patches/ パッチ] が多数あります。これらのパッチは主に {{ic|dwm.c}} ファイルを変更するものですが、必要に応じて {{ic|config.h}} ファイルも変更されます。パッチの適用に関する情報は、[[パッケージにパッチを適用]] の記事を参照してください。
もしくは、{{Ic|startx}} や [[SLiM]] ログインマネージャで dwm を起動する場合、以下を {{ic|~/.xinitrc}} に追加します:
 
exec dwm
 
   
== 設定 ==
+
== 起動 ==
   
  +
任意の[[ディスプレイマネージャ]]のメニューから ''Dwm'' を選択します。あるいは、[[startx]] で dwm を起動するには、{{ic|exec dwm}} を {{ic|~/.xinitrc}} に追加し、他のプログラムも同様に実行するように前置きします、例えば、以下のようにします。
[[#インストール]] でも触れたように、dwm の設定はコンパイル時にソースコード ({{ic|config.h}}, {{ic|config.mk}}, {{ic|dwm.c}}) を編集することで行います。
 
   
  +
redshift -O3500; xset r rate 300 50; exec dwm
変更を加えたら、PKGBUILD のチェックサムを更新してください。[[PKGBUILD#md5sums]] を参照。もしくは、{{ic|--skipinteg}} スイッチを付けて ''makepkg'' を実行することで整合性のチェックをスキップできます。
 
   
  +
== 使い方 ==
そして、dwm をコンパイル・インストールしてください:
 
$ makepkg -fi
 
   
  +
dwm の基本的な使い方については、[https://dwm.suckless.org/tutorial dwm チュートリアル] を参照してください。
設定の変更が正しく行われていれば、上記のコマンドで dwm がコンパイルされ、パッケージがビルド・インストールされます。問題が発生した場合は、出力を確認してください。
 
   
  +
== ヒントとテクニック ==
最後に、dwm を再起動することで変更が適用されます。
 
 
{{Tip|簡単に再コンパイルできるように {{ic|.bashrc}} ファイルに {{ic|alias redwm<nowiki>=</nowiki>'cd ~/dwm; updpkgsums; makepkg -fi --noconfirm; killall dwm'}} と記述してエイリアスを作成しても良いでしょう。}}
 
 
=== パッチ ===
 
 
公式ウェブサイトには dwm に機能を追加する多数の [http://dwm.suckless.org/patches/ パッチ] を記載しています。これらのパッチは主として {{ic|dwm.c}} ファイルに変更を加えますが {{ic|config.h}} ファイルを変更することもあります。パッチの適用については、[[ABS でパッチを適用]]を見て下さい。
 
 
==== ウィンドウタイリングパッチ ====
 
 
デフォルトのタイリングモードでは縦に画面が分割されますが、[http://dwm.suckless.org/patches/bottom_stack Bottom Stack] パッチは横方向に画面を分割するタイリングモードを追加します。同じく、bstack horizontal はタイルを水平に分割します。[http://dwm.suckless.org/patches/gapless_grid gaplessgrid] パッチはウィンドウをグリッドのようにタイル化させることができます。
 
 
dwm ではデフォルトで、全てのタグに選択したレイアウトが適用されます。タグにあわせて異なるレイアウトを使うようにするには [http://dwm.suckless.org/patches/pertag pertag] パッチを使って下さい。
 
 
=== config.h のカスタマイズ ===
 
 
{{ic|config.h}} ファイルには dwm の基本的な設定が保存されています。ほとんどの設定は特に説明しなくてもわかるはずです。設定に関する詳しい情報は [http://dwm.suckless.org/customisation/ dwm のウェブサイト] を見て下さい。
 
 
==== カスタムキーバインド/ショートカットの追加 ====
 
 
カスタムキーバインドを作成するには {{ic|config.h}} に2つエントリが必要です。1つは {{ic|/* commands */}} セクションの下に記述し、もう1つは {{ic|1=static Key keys[] = {}} セクションの下に記述します。
 
 
static const char *''keybindname''[] = { "''command''", "''flags''", "''arguments''", NULL };
 
   
  +
=== ステータスバーの設定 ===
{{ic|''keybindname''}} は何でもかまいません。{{ic|''command''}}, {{ic|''flags''}}, {{ic|''arguments''}} も何でもかまいませんが {{ic|""}} で囲む必要があります。
 
   
  +
ステータスバーのその他の例については、[https://dwm.suckless.org/status_monitor/] を参照してください。
例:
 
 
{{ic|1={ MODKEY, XK_''key'', spawn, {.v = ''keybindname'' } <nowiki>}</nowiki>}} would bind {{ic|Mod+''key''}} to the command defined previously.
 
 
{{ic|1={ MODKEY<nowiki>|</nowiki>ShiftMask, XK_''key'', spawn, {.v = ''keybindname'' } <nowiki>}</nowiki>}} would bind {{ic|Mod+Shift+''key''}} Use ControlMask for {{ic|Ctrl}} key.
 
 
Single keys such as {{ic|Fn}} or multimedia keys have to be bound with the hex codes obtainable from the program ''xev''.
 
 
{{ic|1={ 0, 0xff00, spawn, {.v = ''keybindname'' } <nowiki>}</nowiki>}} would bind foo key {{ic|0xff00}} to {{ic|''keybindname''}}.
 
 
キーコードに関する情報は[[特別なキーボードキー#キーコード]]を見て下さい。
 
 
=== config.mk のカスタマイズ ===
 
 
{{Warning|ソースからコンパイルしたソフトウェアを直接インストールするのは推奨されません。インストールしたファイルを [[pacman]] が追跡できなくなるからです。}}
 
 
{{ic|config.mk}} ファイルは Makefile によって include されます。GNU ''make'' で dwm をコンパイル・実行する方法を設定できます。
 
 
パッケージを作成せずに、ソースから直接 dwm をインストールするときは、{{ic|config.mk}} を変更して適当なプレフィックスを設定してください:
 
 
{{Ic|PREFIX}} を修正:
 
PREFIX = /usr
 
X11 include フォルダ:
 
X11INC = /usr/include/X11
 
X11 lib ディレクトリ:
 
X11LIB = /usr/lib/X11
 
 
{{Tip|If you only wish to test configuration changes without affecting systemwide dwm, change {{ic|PREFIX}} to a local directory such as {{ic|${HOME}/.local}}. Note that if you are compiling using the {{AUR|dwm}} [[PKGBUILD]], you should change the {{ic|PREFIX}} in the PKGBUILD instead as this will take precedence over {{ic|config.mk}} - see the ''package()'' function - and you should also change the {{ic|pkgname}}.}}
 
 
=== ステータスバーの設定 ===
 
   
 
{{Note|以下の設定を使うには {{Pkg|xorg-xsetroot}} パッケージのインストールが必要です。}}
 
{{Note|以下の設定を使うには {{Pkg|xorg-xsetroot}} パッケージのインストールが必要です。}}
99行目: 44行目:
 
Dwm はルートウィンドウの名前を読み取ってステータスバーに送信します。ルートウィンドウは他の全てのウィンドウが描画されるウィンドウで、ウィンドウマネージャによって作成されます。他のウィンドウと同じように、ルートウィンドウにもタイトル/名前が存在しますが、ルートウィンドウはバックグラウンドで動作するため基本的に名前は定義されていません。
 
Dwm はルートウィンドウの名前を読み取ってステータスバーに送信します。ルートウィンドウは他の全てのウィンドウが描画されるウィンドウで、ウィンドウマネージャによって作成されます。他のウィンドウと同じように、ルートウィンドウにもタイトル/名前が存在しますが、ルートウィンドウはバックグラウンドで動作するため基本的に名前は定義されていません。
   
dwm のステータスバーに表示したい情報は {{ic|~/.xinitrc}} や ([[ディスプレイマネージャ]]を使っている場合) {{ic|~/.xprofile}} で {{ic|xsetroot -name ""}} コマンドを使うことで定義します。例:
+
dwm のステータスバーに表示したい情報は {{ic|~/.xinitrc}} や ([[ディスプレイマネージャ]] を使っている場合) {{ic|~/.xprofile}} で {{ic|xsetroot -name ""}} コマンドを使うことで定義します。例:
 
{{bc|xsetroot -name "Thanks for all the fish!"}}
 
{{bc|xsetroot -name "Thanks for all the fish!"}}
   
  +
動的に更新された情報は、バックグラウンドへ分岐するループに入れる必要があります。以下の例を参照してください。
Dynamically updated information should be put in a loop which is forked to background - see the example below:
 
 
{{bc|
 
{{bc|
 
# Statusbar loop
 
# Statusbar loop
115行目: 60行目:
 
exec dwm
 
exec dwm
 
}}
 
}}
上記の場合 [[wikipedia:ISO_8601|ISO 8601]] 形式で日付が表示され、起動時に [[PCManFM]] が実行されます。
+
上記の場合 [[RFC:3339]] 形式で日付が表示され、起動時に [[PCManFM]] が実行されます。
   
  +
{{note|更新間隔をゼロに等しくしたり、"sleep" 行を完全に削除することは、CPU 使用率を大幅に上昇させるので推奨されません (使用率は ''top'' や [[powertop]] で観察して下さい)}}
{{note|It is not recommended to set the update interval equal to zero or remove the "sleep" line entirely since this will cause CPU usage to rise substantially (you can assess the effect with ''top'' and [[powertop]]).}}
 
 
ステータスバーのサンプルは [http://dwm.suckless.org/dwmstatus/ suckless wiki] にあります。
 
   
 
==== Conky ステータスバー ====
 
==== Conky ステータスバー ====
   
 
{{Ic|xsetroot -name}} を使うことでステータスバーに [[Conky]] を出力することができます:
 
{{Ic|xsetroot -name}} を使うことでステータスバーに [[Conky]] を出力することができます:
  +
 
(conky | while read LINE; do xsetroot -name "$LINE"; done) &
 
(conky | while read LINE; do xsetroot -name "$LINE"; done) &
 
exec dwm
 
exec dwm
   
  +
'xsetroot' コマンドによって多くの PID を生成したくない場合は、次の C プログラムをコンパイルします:
この場合、コンソールにテキストを出力するように [[Conky]] を設定する必要があります。以下はデュアルコア CPU で統計を表示させる conkyrc の例です:
 
{{bc|
 
<nowiki>conky.config = {
 
out_to_console = true,
 
out_to_x = false,
 
background = false,
 
update_interval = 2,
 
total_run_times = 0,
 
use_spacer = 'none',
 
};
 
conky.text = [[
 
$mpd_smart :: ${cpu cpu1}% / ${cpu cpu2}% ${loadavg 1} ${loadavg 2 3} :: ${acpitemp}c :: $memperc% ($mem) :: ${downspeed eth0}K/s ${upspeed eth0}K/s :: ${time %a %b %d %I:%M%P}
 
]];</nowiki>
 
}}
 
   
  +
{{bc|1=
アイコンや色のオプションについては、[[dzen]] を見て下さい。
 
  +
#include <string.h>
  +
#include <stdlib.h>
  +
#include <stdio.h>
  +
#include <X11/Xlib.h>
   
  +
int main(int argc, char * argv[])
== 基本的な使い方 ==
 
  +
{
  +
Display * dpy = NULL;
  +
Window win = 0;
  +
size_t length = 0;
  +
ssize_t bytes_read = 0;
  +
char * input = NULL;
   
  +
dpy = XOpenDisplay(getenv("DISPLAY"));
以下のセクションだけでなく、dwm の基本的な使用方法については [http://dwm.suckless.org/tutorial dwm チュートリアル] も見て下さい。
 
  +
if (dpy == NULL)
  +
{
  +
fprintf(stderr, "Can't open display, exiting.\n");
  +
exit(1);
  +
}
  +
win = DefaultRootWindow(dpy);
   
  +
while ((bytes_read = getline(&input, &length, stdin)) != EOF)
=== dmenu を使う ===
 
  +
{
  +
input[strlen(input) - 1] = '\0';
  +
XStoreName(dpy, win, input);
  +
XFlush(dpy);
  +
fprintf(stderr, "Input: %s", input);
  +
fprintf(stderr, "\nbytes read: %ld\n", bytes_read);
  +
}
  +
free(input);
  +
return 0;
  +
}
  +
}}
   
  +
このコードをファイル dwm-setstatus.c に保存し、コンパイルします:
[[dmenu]] を起動するには、{{ic|Mod1}} + {{ic|P}} を押します ({{ic|Mod1}} はデフォルトでは {{ic|Alt}} キーです)。必要であればキーは変えられます。そして、トップバーに表示されるまで、実行したいバイナリの最初の文字列を入力します。左と右の方向キーでバイナリを選択してエンターを押します。
 
   
  +
$ gcc dwm-setstatus.c -lX11 -o dwm-setstatus
=== ウィンドウのコントロール ===
 
   
  +
$PATH 内で 'dwm-setstatus' を移動します ({{ic|/usr/local/bin}} など)
==== ウィンドウにタグを変更 ====
 
   
  +
# mv dwm-setstatus /usr/local/bin
ウィンドウのタグの変更は簡単です。カーソルをウィンドウに乗せて、ウィンドウをフォーカスされた状態にしてください。そして、{{ic|Shift}} + {{ic|Mod1}} + {{ic|x}} を押します。{{ic|x}} はウィンドウを移動したいタグの番号に置き換えてください。デフォルトでは {{ic|Mod1}} は {{ic|Alt}} キーになっています。
 
   
  +
実行します:
==== ウィンドウを閉じる ====
 
   
  +
$ conky | dwm-setstatus
dwm を使ってウィンドウを終了するには、{{ic|Shift}} + {{ic|Mod1}} + {{ic|c}} を押して下さい。
 
   
  +
これを行うには、conky にテキストをコンソールのみに出力するように指示する必要があります。以下は、デュアルコア CPU のサンプル conkyrc で、いくつかの使用統計を表示します:
==== ウィンドウレイアウト ====
 
   
  +
{{bc|<nowiki>
By default, dwm will operate in tiled mode. This can be observed by new windows on the same tag growing smaller and smaller as new windows are opened. The windows will, together, take up the entire screen (except for the menu bar) at all times. There are, however, two other modes: floating and monocle. Floating mode should be familiar to users of non-tiling window managers; it allows users to rearrange windows as they please. Monocle mode will keep a single window visible at all times.
 
  +
conky.config = {
  +
out_to_console = true,
  +
out_to_x = false,
  +
background = false,
  +
update_interval = 2,
  +
total_run_times = 0,
  +
use_spacer = 'none',
  +
};
  +
conky.text = [[
  +
$mpd_smart :: ${cpu cpu1}% / ${cpu cpu2}% ${loadavg 1} ${loadavg 2 3} :: ${acpitemp}c :: $memperc% ($mem) :: ${downspeed eth0}K/s ${upspeed eth0}K/s :: ${time %a %b %d %I:%M%P}
  +
]];
  +
</nowiki>}}
   
  +
アイコンと色のオプションについては、[[dzen]] を参照してください。
To switch to floating mode, simply press {{ic|Mod1}} + {{ic|F}}. {{ic|Mod1}} is, by default, the {{ic|Alt}} key. To check if you are in floating mode, you should see something like this next to the numbered tags in the top right corner of the screen: ><>.
 
   
  +
=== dwm の再起動 ===
To switch to monocole mode, press {{ic|Mod1}} + {{ic|M}}. To check if you are in monocle mode, you can see an M in square brackets (if no windows are open on that tag) or a number in square brackets (which corresponds with the number of windows open on that tag). Thus, a tag with no windows open would display this: [M], and a tag with 'n' windows open would display this: [n].
 
   
  +
ログアウトやアプリケーションの終了をせずに dwm を再起動するには、起動スクリプトを変更または追加して、例えば ''while'' ループの中で dwm をロードするようにします。
To return to tiled mode, press {{ic|Mod1}} + {{ic|T}}. You will see a symbol which looks like this: []= .
 
   
他のウィンドウレイアウトを使う方法は、[[#ウィンドウタイリングパッチ]]を見て下さい。
 
 
=== dwm の終了 ===
 
 
dwm を終了するには、{{ic|Shift}} + {{ic|Mod1}} + {{ic|q}} を押して下さい。
 
 
== ヒントとテクニック ==
 
 
=== ログアウトやプログラムを終了しないで dwm を再起動 ===
 
 
For restarting dwm without logging out or closing applications, change or add a startup script so that it loads dwm in a ''while'' loop, see below:
 
 
{{bc|
 
{{bc|
 
while true; do
 
while true; do
192行目: 151行目:
 
}}
 
}}
   
  +
dwm は通常の Mod-Shift-Q の組み合わせで、他の X ウィンドウを破壊することなく再起動できるようになりました。
dwm can now be restarted without destroying other X windows by pressing the usual Mod-Shift-Q combination.
 
   
  +
上記のスタートアップスクリプトを別のファイル、例えば {{ic|~/bin/startdwm}} に置き、{{ic|~/.xinitrc}} から実行するのが良いでしょう。X サーバーが終了した後もログインしたままだとセキュリティに影響が出るので、{{ic|exec}} でスクリプトを実行することを検討して下さい。詳しくは [[Xinit#ログイン時に X を自動起動|ログイン時に X を自動起動]] を参照して下さい。これ以降、Xセッションを終了したいときは、単に {{Ic|killall xinit}} を実行するか、便利なキーバインドにそれをバインドしてください。また、バイナリが変更された場合のみ、dwm セッションスクリプトを再立ち上げするように設定することもできます。これは、設定を変更したり、dwm のコードベースを更新したりする場合に便利です。
It is a good idea to place the above startup script into a separate file, {{ic|~/bin/startdwm}} for instance, and execute it through {{ic|~/.xinitrc}}. From this point on, when you wish to end the X session, simply execute {{Ic|killall xinit}}, or bind it to a convenient key. Alternatively, you could setup your dwm session script so that it relaunches dwm only if the binary changes. This could be useful in the case where you change a setting or update the dwm code base.
 
   
 
{{bc|1=
 
{{bc|1=
 
# relaunch DWM if the binary changes, otherwise bail
 
# relaunch DWM if the binary changes, otherwise bail
  +
csum=""
csum=$(sha1sum $(which dwm))
 
new_csum=""
+
new_csum=$(sha1sum $(which dwm))
 
while true
 
while true
 
do
 
do
214行目: 173行目:
 
}}
 
}}
   
=== 右 Alt キーを Mod4 (Windows キー) として使う ===
+
=== 右側の Alt キーを Mod4 にバインドする ===
   
When using Mod4 (the Super/Windows Key) as the {{Ic|MODKEY}}, it may be equally convenient to have the right Alt key ({{ic|Alt_R}}) act as {{ic|Mod4}}. This will allow you to perform otherwise awkward keystrokes one-handed, such as zooming with {{ic|Alt_R}}+{{ic|Enter}}.
+
Mod4 (スーパー/Windows キー) {{Ic|MODKEY}} として使用する場合、右 Alt キー ({{ic|Alt_R}}) {{ic|Mod4}} として使用すると、{{ic|Alt_R}}+{{ic|Enter}} でズームするような、不便なキーストロークを片手で実行できるようになります。
   
 
まず、{{ic|Alt_R}} に割り当てられているキーコードを確認してください:
 
まず、{{ic|Alt_R}} に割り当てられているキーコードを確認してください:
  +
 
xmodmap -pke | grep Alt_R
 
xmodmap -pke | grep Alt_R
   
  +
次に、スタートアップスクリプト (例:{{ic|~/.xinitrc}}) に以下を追加します。必要ならキーコード ''113'' を前の {{Ic|xmodmap}} コマンドで集めた結果に変更します。
Then simply add the following to the startup script (e.g. {{ic|~/.xinitrc}}), changing the keycode ''113'' if necessary to the result gathered by the previous {{Ic|xmodmap}} command:
 
xmodmap -e "keycode 113 = Super_L" # reassign Alt_R to Super_L
 
xmodmap -e "remove mod1 = Super_L" # make sure X keeps it out of the mod1 group
 
   
  +
{{ic|Alt_R}} を {{ic|Super_L}} に再割り当てします:
After doing so, any functions that are triggered by the {{ic|Super_L}} key press will also be triggered by an {{ic|Alt_R}} key press.
 
   
  +
xmodmap -e "keycode 113 = Super_L"
{{note|[[#config.h のカスタマイズ|config.h]] の #define オプションで modkey を切り替えることができます。}}
 
  +
  +
X が "mod1" グループから除外されていることを確認します。
  +
  +
xmodmap -e "remove mod1 = Super_L"
  +
  +
これを実行すると、{{ic|Super_L}} キーの押下によってトリガーされる機能はすべて、{{ic|Alt_R}} キーの押下によってもトリガーされます。
  +
  +
{{Note|[[dwm#設定|config.h]] には {{ic|#define}} オプションがあり、これを使用して modkey を切り替えることもできます。}}
  +
  +
=== DWM で Alt キーを両方 Meta として使用する ===
  +
  +
xmodmap を使って Alt_L を DWM のセカンダリメタキーとして割り当てます (Mod1Mask (Alt_R) を使って既に提供されています)
  +
  +
{{hc|~/.xinitrc|<nowiki>
  +
/usr/bin/xmodmap -e "clear mod5"
  +
/usr/bin/xmodmap -e "keycode 108 = Alt_L"
  +
</nowiki>}}
   
 
=== dwm のバーのフォントの周りの空白 ===
 
=== dwm のバーのフォントの周りの空白 ===
   
 
デフォルトでは、dwm のバーではフォントのサイズが 2px 追加されます。これを変更するには、{{ic|dwm.c}} の以下の行を変更してください:
 
デフォルトでは、dwm のバーではフォントのサイズが 2px 追加されます。これを変更するには、{{ic|dwm.c}} の以下の行を変更してください:
  +
{{bc|1=bh = dc.h = dc.font.height + 2;}}
 
  +
{{hc|dwm.c|2=bh = dc.h = dc.font.height + 2;}}
   
 
=== マウス追随フォーカスの無効化 ===
 
=== マウス追随フォーカスの無効化 ===
   
マウス追随フォーカスを無効するには、{{ic|dwm.c}} 以下の行をコメントアウトします:
+
マウスの動作に従うフォーカスを無効するには、構造体ハンドラーの定義内の行をコメントアウトします:
  +
{{bc|1=[EnterNotify] = enternotify, }}
 
  +
{{hc|dwm.c|2=[EnterNotify] = enternotify,}}
Note that this change can cause some difficulties; the first click on an inactive window will only bring the focus to it. To interact with window contents (buttons, fields etc) you need to click again. Also, if you have several monitors, you may notice that the keyboard focus does not switch to another monitor activated by clicking.
 
  +
  +
非アクティブなウィンドウを最初にクリックすると、そのウィンドウにのみフォーカスが移動します。ウィンドウの内容(ボタン、フィールドなど)を操作するには、もう一度クリックする必要があります。また、複数のモニターを使用している場合、クリックしてもキーボードのフォーカスが他のモニターに切り替わらないことがあります。
   
 
=== 特定のウィンドウをフロートさせる ===
 
=== 特定のウィンドウをフロートさせる ===
245行目: 223行目:
 
{ "Firefox", NULL, "Firefox Preferences", 1 << 8, True, -1 },
 
{ "Firefox", NULL, "Firefox Preferences", 1 << 8, True, -1 },
   
  +
=== dwm での Tilda の使用 ===
== トラブルシューティング ==
 
   
  +
[[Tilda]] はすべてのタグに追加され、フローティングに設定された場合に最もよく機能します。そのためには、{{ic|config.h}} の中のルール配列に以下を追加してください。
=== Java アプリケーションの挙動がおかしい問題の修正 ===
 
   
  +
{ "Tilda", NULL, NULL, 0, True, -1 },
JRE 6u20 現在、[[Java]] から dwm がウィンドウマネージャとして認識されないために、dwm で Java アプリケーションの挙動がおかしくなることがあります。マウスを離したときにメニューが閉じてしまうなどの問題が確認されています。まず、{{Pkg|wmname}} パッケージをインストールしてください。
 
   
そして、''wmname''使っJava が認識する WM の名前設定します:
+
{{ic|-C}} オプション指定しtilda起動します:
  +
$ wmname LG3D
 
  +
$ tilda -C
  +
  +
これで、Tilda を設定できるようになりました。次のオプションが推奨事項として提供されます:
  +
  +
{{bc|
  +
Font: Clean 9
  +
Appearance: Height: 50%, Width: 70%, Centered Horizontally
  +
Extras: Enable Transparency Level 15
  +
Animated Pulldown: 1500 usec, Orientation: Top
  +
Colors: Built-in Scheme "Green on Black"
  +
Scrolling: Scrollbar is on the left, 2000 lines scrollback
  +
Key Binding: F9
  +
}}
  +
  +
プルダウンアニメーションを有効にしないと、Tilda は非表示にするたびに下にジャンプしてしまいます。
  +
  +
=== スクリーンショットを撮る ===
  +
  +
{{Pkg|scrot}} パッケージをインストールします。次に 2 つのスクリプトを作成します
  +
  +
{{hc|/path/to/scripts/screenshot.sh|2=
  +
#!/bin/sh
  +
mkdir -p /path/to/pics && scrot /path/to/pics/%m-%d-%Y-%H%M%S.png
  +
}}
  +
  +
スクリーンショットの作成と
  +
  +
{{hc|/path/to/scripts/screenshotsel.sh|2=
  +
#!/bin/sh
  +
mkdir -p /path/to/pics && scrot /path/to/pics/%m-%d-%Y-%H%M%S.png --select --line mode=edge
  +
}}
  +
  +
選択ボックスでスクリーンショットを作成するため。
  +
実行権限を付与します。{{ic|config.h}} に以下を追加します
  +
  +
static const Key keys[] = {
  +
...
  +
  +
{ 0, XK_Print, spawn, SHCMD("/path/to/scripts/screenshot.sh") },
  +
{ ShiftMask, XK_Print, spawn, SHCMD("/path/to/scripts/screenshotsel.sh") },
  +
  +
...
  +
};
  +
  +
これは、スクリーンショットの撮影をプリントキーにマップし、選択ボックスでスクリーンショット撮影を shift + プリントキーにマップします。
  +
  +
=== マルチメディアキーのマッピング ===
  +
  +
{{ic|config.h}} の先頭に追加し、
  +
  +
#include <X11/XF86keysym.h>
  +
  +
[[Xmodmap#キーマップテーブル|マルチメディアキーを使用する]] これで、一般的なタスクをこれらのキーにマップできます。
  +
  +
==== 音量を調整する ====
  +
  +
{{Pkg|pipewire}} パッケージをインストールします。{{ic|config.h}} に、ミュートと音量の増減のコマンドを追加します。
  +
  +
static const char *up_vol[] = { "pactl", "set-sink-volume", "@DEFAULT_SINK@", "+10%", NULL };
  +
static const char *down_vol[] = { "pactl", "set-sink-volume", "@DEFAULT_SINK@", "-10%", NULL };
  +
static const char *mute_vol[] = { "pactl", "set-sink-mute", "@DEFAULT_SINK@", "toggle", NULL };
  +
...
  +
  +
static const Key keys[] = {
  +
...
  +
  +
{ 0, XF86XK_AudioMute, spawn, {.v = mute_vol } },
  +
{ 0, XF86XK_AudioLowerVolume, spawn, {.v = down_vol } },
  +
{ 0, XF86XK_AudioRaiseVolume, spawn, {.v = up_vol } },
  +
  +
...
  +
};
  +
  +
==== 明るさの調整 ====
  +
  +
{{Pkg|brightnessctl}} パッケージをインストールします。{{ic|config.h}} に、画面を暗くしたり明るくしたりするためのコマンドを追加します。
  +
  +
static const char *brighter[] = { "brightnessctl", "set", "10%+", NULL };
  +
static const char *dimmer[] = { "brightnessctl", "set", "10%-", NULL };
  +
...
  +
  +
static const Key keys[] = {
  +
...
  +
  +
{ 0, XF86XK_MonBrightnessDown, spawn, {.v = dimmer } },
  +
{ 0, XF86XK_MonBrightnessUp, spawn, {.v = brighter } },
  +
  +
...
  +
};
  +
  +
=== 自動起動 ===
  +
  +
[https://dwm.suckless.org/patches/autostart/ パッチ] が利用可能です。ハンドラーループに入る前に、{{ic|~/.dwm/autostart_blocking.sh}} と {{ic|~/.dwm/autostart.sh &}} を実行します。これらのファイルの一方または両方を省略できます。
  +
  +
== トラブルシューティング ==
  +
  +
=== Java アプリケーションの挙動がおかしい問題の修正 ===
   
  +
{{ic|1=export _JAVA_AWT_WM_NONREPARENTING=1}} を設定してみてください。{{Pkg|wmname}} を使用して {{ic|1=wmname "LG3D"}} を設定することも役立つかもしれません。
{{Note|この設定を使うと Chromium など特定のプログラムをタイルにしたときに問題が起こることがあります。}}
 
上記の設定は永続的ではないため、上のコマンドを {{ic|.xinitrc}} や {{ic|.xprofile}} に追加してください。
 
   
  +
こちらも参照 [[Java#灰色のウィンドウ、ウィンドウマネージャでアプリがリサイズされない、メニューがすぐに閉じる]]
もしくは、{{ic|/etc/profile.d/jre.sh}} で {{ic|1=export _JAVA_AWT_WM_NONREPARENTING=1}} を有効にする方法もあります。
 
   
 
=== ターミナルウィンドウ周辺のギャップを修正する ===
 
=== ターミナルウィンドウ周辺のギャップを修正する ===
265行目: 339行目:
 
これにより、dwm は端末だけでなく、すべてのクライアントウィンドウからのサイズ変更要求を無視します。この回避策の欠点は、一部の端末で再描画の異常 (特にゴーストラインや早まったラインラップなど) が発生する可能性があることです。
 
これにより、dwm は端末だけでなく、すべてのクライアントウィンドウからのサイズ変更要求を無視します。この回避策の欠点は、一部の端末で再描画の異常 (特にゴーストラインや早まったラインラップなど) が発生する可能性があることです。
   
または、 [[st]] ターミナルエミュレータを使用する場合は、 [https://st.suckless.org/patches/anysize/ anysize] パッチを適用して st を再コンパイルします。
+
または、[[st]] ターミナルエミュレータを使用する場合は、[https://st.suckless.org/patches/anysize/ anysize] パッチを適用して st を再コンパイルします。
   
 
== 参照 ==
 
== 参照 ==
   
 
* [http://dwm.suckless.org/ dwm の公式ウェブサイト]
 
* [http://dwm.suckless.org/ dwm の公式ウェブサイト]
* [https://www.youtube.com/watch?v=GQ5s6T25jCc Introduction to dwm video]
+
* [https://www.youtube.com/watch?v=GQ5s6T25jCc dwm ビデオの紹介]
 
* [[dmenu]] - dwm の開発者が作ったシンプルなアプリケーションランチャー
 
* [[dmenu]] - dwm の開発者が作ったシンプルなアプリケーションランチャー
* The [https://bbs.archlinux.org/viewtopic.php?id=57549/ dwm thread] on the forums
+
* [https://bbs.archlinux.org/viewtopic.php?id=57549/ dwm スレッド] フォーラム
* [https://bbs.archlinux.org/viewtopic.php?id=92895/ Hacking dwm thread]
+
* [https://bbs.archlinux.org/viewtopic.php?id=92895/ dwm ハッキング スレッド]
* Check out the forums' [https://bbs.archlinux.org/viewtopic.php?id=57768/ wallpaper thread] for a selection of dwm wallpapers
+
* dwm の壁紙は、フォーラムの [https://bbs.archlinux.org/viewtopic.php?id=57768/ wallpaper スレッド] をご覧ください。
*[https://bbs.archlinux.org/viewtopic.php?id=74599 Show off your dwm configuration forum thread]
+
* [https://bbs.archlinux.org/viewtopic.php?id=74599 dwm 設定を公開するフォーラムスレッド]
 
* [http://wongdev.com/blog/dwm-tags-are-not-workspaces/ dwm: Tags are not workspaces]
 
* [http://wongdev.com/blog/dwm-tags-are-not-workspaces/ dwm: Tags are not workspaces]

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

関連記事

dwmXorg の動的ウィンドウマネージャです。タイル・スタック・フルスクリーンレイアウトでウィンドウを管理し、さらにパッチを使うことで他のレイアウトも利用できます。レイアウトは動的に適用することができるため、アプリケーションを使用する環境と作業を最適化することが可能です。dwm はきわめて軽量かつ高速であり、C で書かれていてソースコードの行数を2000行以下から増やさないという設計目標を掲げています。xrandr や Xinerama による マルチディスプレイ もサポートしています。

インストール

dwm は、パッケージ dwmAUR または dwm-gitAUR でインストールできます。ビルドとインストールの 前に、必要な 設定 の変更を行ってください。makepkg を参照してください。

ヒント: アップストリームの手順 に従うこともできますが、pacman がファイルを追跡せずにファイルをインストールします。

設定

dwm はコンパイル時にいくつかのソースファイル、特に config.h を編集することで設定します。これらの設定に関する詳細な情報は、同梱され、コメントが付いています。config.def.h と、dwm のウェブサイトの customisation section を参照してください。

公式サイトには、dwm に機能を追加するための パッチ が多数あります。これらのパッチは主に dwm.c ファイルを変更するものですが、必要に応じて config.h ファイルも変更されます。パッチの適用に関する情報は、パッケージにパッチを適用 の記事を参照してください。

起動

任意のディスプレイマネージャのメニューから Dwm を選択します。あるいは、startx で dwm を起動するには、exec dwm~/.xinitrc に追加し、他のプログラムも同様に実行するように前置きします、例えば、以下のようにします。

redshift -O3500; xset r rate 300 50; exec dwm

使い方

dwm の基本的な使い方については、dwm チュートリアル を参照してください。

ヒントとテクニック

ステータスバーの設定

ステータスバーのその他の例については、[1] を参照してください。

ノート: 以下の設定を使うには xorg-xsetroot パッケージのインストールが必要です。

Dwm はルートウィンドウの名前を読み取ってステータスバーに送信します。ルートウィンドウは他の全てのウィンドウが描画されるウィンドウで、ウィンドウマネージャによって作成されます。他のウィンドウと同じように、ルートウィンドウにもタイトル/名前が存在しますが、ルートウィンドウはバックグラウンドで動作するため基本的に名前は定義されていません。

dwm のステータスバーに表示したい情報は ~/.xinitrc や (ディスプレイマネージャ を使っている場合) ~/.xprofilexsetroot -name "" コマンドを使うことで定義します。例:

xsetroot -name "Thanks for all the fish!"

動的に更新された情報は、バックグラウンドへ分岐するループに入れる必要があります。以下の例を参照してください。

# Statusbar loop
while true; do
   xsetroot -name "$( date +"%F %R" )"
   sleep 1m    # Update time every minute
done &

# Autostart section
pcmanfm & 

exec dwm

上記の場合 RFC:3339 形式で日付が表示され、起動時に PCManFM が実行されます。

ノート: 更新間隔をゼロに等しくしたり、"sleep" 行を完全に削除することは、CPU 使用率を大幅に上昇させるので推奨されません (使用率は toppowertop で観察して下さい)

Conky ステータスバー

xsetroot -name を使うことでステータスバーに Conky を出力することができます:

(conky | while read LINE; do xsetroot -name "$LINE"; done) &
exec dwm

'xsetroot' コマンドによって多くの PID を生成したくない場合は、次の C プログラムをコンパイルします:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <X11/Xlib.h>

int main(int argc, char * argv[])
{
        Display * dpy = NULL;
        Window win = 0;
        size_t length = 0;
        ssize_t bytes_read = 0;
        char * input = NULL;

        dpy = XOpenDisplay(getenv("DISPLAY"));
        if (dpy == NULL)
        {
                fprintf(stderr, "Can't open display, exiting.\n");
                exit(1);
        }
        win = DefaultRootWindow(dpy);

        while ((bytes_read = getline(&input, &length, stdin)) != EOF)
        {
                input[strlen(input) - 1] = '\0';
                XStoreName(dpy, win, input);
                XFlush(dpy);
                fprintf(stderr, "Input: %s", input);
                fprintf(stderr, "\nbytes read: %ld\n", bytes_read);
        }
        free(input);
        return 0;
}

このコードをファイル dwm-setstatus.c に保存し、コンパイルします:

$ gcc dwm-setstatus.c -lX11 -o dwm-setstatus

$PATH 内で 'dwm-setstatus' を移動します (/usr/local/bin など)

# mv dwm-setstatus /usr/local/bin

実行します:

$ conky | dwm-setstatus

これを行うには、conky にテキストをコンソールのみに出力するように指示する必要があります。以下は、デュアルコア CPU のサンプル conkyrc で、いくつかの使用統計を表示します:

conky.config = {
out_to_console = true,
out_to_x = false,
background = false,
update_interval = 2,
total_run_times = 0,
use_spacer = 'none',
};
conky.text = [[
$mpd_smart :: ${cpu cpu1}% / ${cpu cpu2}%  ${loadavg 1} ${loadavg 2 3} :: ${acpitemp}c :: $memperc% ($mem) :: ${downspeed eth0}K/s ${upspeed eth0}K/s :: ${time %a %b %d %I:%M%P}
]];

アイコンと色のオプションについては、dzen を参照してください。

dwm の再起動

ログアウトやアプリケーションの終了をせずに dwm を再起動するには、起動スクリプトを変更または追加して、例えば while ループの中で dwm をロードするようにします。

while true; do
    # Log stderror to a file 
    dwm 2> ~/.dwm.log
    # No error logging
    #dwm >/dev/null 2>&1
done

dwm は通常の Mod-Shift-Q の組み合わせで、他の X ウィンドウを破壊することなく再起動できるようになりました。

上記のスタートアップスクリプトを別のファイル、例えば ~/bin/startdwm に置き、~/.xinitrc から実行するのが良いでしょう。X サーバーが終了した後もログインしたままだとセキュリティに影響が出るので、exec でスクリプトを実行することを検討して下さい。詳しくは ログイン時に X を自動起動 を参照して下さい。これ以降、Xセッションを終了したいときは、単に killall xinit を実行するか、便利なキーバインドにそれをバインドしてください。また、バイナリが変更された場合のみ、dwm セッションスクリプトを再立ち上げするように設定することもできます。これは、設定を変更したり、dwm のコードベースを更新したりする場合に便利です。

# relaunch DWM if the binary changes, otherwise bail
csum=""
new_csum=$(sha1sum $(which dwm))
while true
do
    if [ "$csum" != "$new_csum" ]
    then
        csum=$new_csum
        dwm
    else
        exit 0
    fi
    new_csum=$(sha1sum $(which dwm))
    sleep 0.5
done

右側の Alt キーを Mod4 にバインドする

Mod4 (スーパー/Windows キー)を MODKEY として使用する場合、右 Alt キー (Alt_R) を Mod4 として使用すると、Alt_R+Enter でズームするような、不便なキーストロークを片手で実行できるようになります。

まず、Alt_R に割り当てられているキーコードを確認してください:

xmodmap -pke | grep Alt_R

次に、スタートアップスクリプト (例:~/.xinitrc) に以下を追加します。必要ならキーコード 113 を前の xmodmap コマンドで集めた結果に変更します。

Alt_RSuper_L に再割り当てします:

xmodmap -e "keycode 113 = Super_L"

X が "mod1" グループから除外されていることを確認します。

xmodmap -e "remove mod1 = Super_L"

これを実行すると、Super_L キーの押下によってトリガーされる機能はすべて、Alt_R キーの押下によってもトリガーされます。

ノート: config.h には #define オプションがあり、これを使用して modkey を切り替えることもできます。

DWM で Alt キーを両方 Meta として使用する

xmodmap を使って Alt_L を DWM のセカンダリメタキーとして割り当てます (Mod1Mask (Alt_R) を使って既に提供されています)

~/.xinitrc
/usr/bin/xmodmap -e "clear mod5"
/usr/bin/xmodmap -e "keycode 108 = Alt_L"

dwm のバーのフォントの周りの空白

デフォルトでは、dwm のバーではフォントのサイズが 2px 追加されます。これを変更するには、dwm.c の以下の行を変更してください:

dwm.c
bh = dc.h = dc.font.height + 2;

マウス追随フォーカスの無効化

マウスの動作に従うフォーカスを無効にするには、構造体ハンドラーの定義内の次の行をコメントアウトします:

dwm.c
[EnterNotify] = enternotify,

非アクティブなウィンドウを最初にクリックすると、そのウィンドウにのみフォーカスが移動します。ウィンドウの内容(ボタン、フィールドなど)を操作するには、もう一度クリックする必要があります。また、複数のモニターを使用している場合、クリックしてもキーボードのフォーカスが他のモニターに切り替わらないことがあります。

特定のウィンドウをフロートさせる

環境設定ダイアログのような一部のウィンドウでは、ウィンドウをタイル状にすることは意味がなく、代わりにフリーフローティングにすべきです。たとえば、Firefox の環境設定ダイアログをフロートさせるには、config.h のルール配列に次のように追加します。:

 { "Firefox",     NULL,       "Firefox Preferences",        1 << 8,         True,     -1 },

dwm での Tilda の使用

Tilda はすべてのタグに追加され、フローティングに設定された場合に最もよく機能します。そのためには、config.h の中のルール配列に以下を追加してください。

{ "Tilda",        NULL,       NULL,                         0,              True,       -1 },

-C オプションを指定して tilda を起動します:

$ tilda -C

これで、Tilda を設定できるようになりました。次のオプションが推奨事項として提供されます:

Font: Clean 9
Appearance: Height: 50%, Width: 70%, Centered Horizontally
Extras: Enable Transparency Level 15
Animated Pulldown: 1500 usec, Orientation: Top
Colors: Built-in Scheme "Green on Black"
Scrolling: Scrollbar is on the left, 2000 lines scrollback
Key Binding: F9

プルダウンアニメーションを有効にしないと、Tilda は非表示にするたびに下にジャンプしてしまいます。

スクリーンショットを撮る

scrot パッケージをインストールします。次に 2 つのスクリプトを作成します

/path/to/scripts/screenshot.sh
#!/bin/sh
mkdir -p /path/to/pics && scrot /path/to/pics/%m-%d-%Y-%H%M%S.png

スクリーンショットの作成と

/path/to/scripts/screenshotsel.sh
#!/bin/sh
mkdir -p /path/to/pics && scrot /path/to/pics/%m-%d-%Y-%H%M%S.png --select --line mode=edge

選択ボックスでスクリーンショットを作成するため。 実行権限を付与します。config.h に以下を追加します

static const Key keys[] = {
       ...
       
       { 0,         XK_Print, spawn, SHCMD("/path/to/scripts/screenshot.sh") },
       { ShiftMask, XK_Print, spawn, SHCMD("/path/to/scripts/screenshotsel.sh") },
       
       ...
};

これは、スクリーンショットの撮影をプリントキーにマップし、選択ボックスでスクリーンショット撮影を shift + プリントキーにマップします。

マルチメディアキーのマッピング

config.h の先頭に追加し、

#include <X11/XF86keysym.h>

マルチメディアキーを使用する これで、一般的なタスクをこれらのキーにマップできます。

音量を調整する

pipewire パッケージをインストールします。config.h に、ミュートと音量の増減のコマンドを追加します。

static const char *up_vol[]   = { "pactl", "set-sink-volume", "@DEFAULT_SINK@", "+10%",   NULL };
static const char *down_vol[] = { "pactl", "set-sink-volume", "@DEFAULT_SINK@", "-10%",   NULL };
static const char *mute_vol[] = { "pactl", "set-sink-mute",   "@DEFAULT_SINK@", "toggle", NULL };
...

static const Key keys[] = {
       ...
       
       { 0, XF86XK_AudioMute,        spawn, {.v = mute_vol } },
       { 0, XF86XK_AudioLowerVolume, spawn, {.v = down_vol } },
       { 0, XF86XK_AudioRaiseVolume, spawn, {.v = up_vol } },
       
       ... 
};

明るさの調整

brightnessctl パッケージをインストールします。config.h に、画面を暗くしたり明るくしたりするためのコマンドを追加します。

static const char *brighter[] = { "brightnessctl", "set", "10%+", NULL };
static const char *dimmer[]   = { "brightnessctl", "set", "10%-", NULL };
...

static const Key keys[] = {
       ...
       
       { 0, XF86XK_MonBrightnessDown, spawn, {.v = dimmer } },
       { 0, XF86XK_MonBrightnessUp,   spawn, {.v = brighter } },
       
       ...
};

自動起動

パッチ が利用可能です。ハンドラーループに入る前に、~/.dwm/autostart_blocking.sh~/.dwm/autostart.sh & を実行します。これらのファイルの一方または両方を省略できます。

トラブルシューティング

Java アプリケーションの挙動がおかしい問題の修正

export _JAVA_AWT_WM_NONREPARENTING=1 を設定してみてください。wmname を使用して wmname "LG3D" を設定することも役立つかもしれません。

こちらも参照 Java#灰色のウィンドウ、ウィンドウマネージャでアプリがリサイズされない、メニューがすぐに閉じる

ターミナルウィンドウ周辺のギャップを修正する

ターミナルウィンドウの外側にデスクトップスペースの空きがある場合は、ターミナルのフォントサイズが原因である可能性があります。ギャップを埋める理想的なスケールが見つかるまでサイズを調整するか、config.hresizehints0 に切り替えます。

これにより、dwm は端末だけでなく、すべてのクライアントウィンドウからのサイズ変更要求を無視します。この回避策の欠点は、一部の端末で再描画の異常 (特にゴーストラインや早まったラインラップなど) が発生する可能性があることです。

または、st ターミナルエミュレータを使用する場合は、anysize パッチを適用して st を再コンパイルします。

参照