「Dwm」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(英語版に追従して情報を整理)
 
(2人の利用者による、間の21版が非表示)
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 による [[マルチディスプレイ]] もサポートしています。
   
 
== インストール ==
 
== インストール ==
   
[https://git.suckless.org/dwm/ オフィシャル git リポ] をクローンして {{ic|make}} を実行し{{ic|make install}} で dwm をインストールします。 dwm は AUR パッケージ {{AUR|dwm}} {{AUR|dwm-git}} でインストールすることも可能です。ビルドとインストールの前に '''設定''' 変更てください[[makepkg]] をさい。
+
dwm 、パッケージ {{AUR|dwm}} または {{AUR|dwm-git}} でインストールできます。ビルドとインストールの '''前に'''、必要な [[Dwm#設定|設定]] の変更を行ってください[[makepkg]] を参照しください。
   
  +
{{Tip|[https://git.suckless.org/dwm/file/README.html アップストリームの手順] に従うこともできますが、[[pacman]] がファイルを追跡せずにファイルをインストールします。}}
== 設定 ==
 
   
  +
=== 設定 ===
dwm はコンパイル時にいくつかのソースファイル、特に {{ic|config.h}} を編集することで設定します。これらの設定に関する詳細な情報は、同梱され、コメントが付いています。 {{ic|config.def.h}} と、 dwm のウェブサイトの [https://dwm.suckless.org/customisation/ customisation section] を参照してください。
 
   
  +
dwm はコンパイル時にいくつかのソースファイル、特に {{ic|config.h}} を編集することで設定します。これらの設定に関する詳細な情報は、同梱され、コメントが付いています。{{ic|config.def.h}} と、dwm のウェブサイトの [https://dwm.suckless.org/customisation/ customisation section] を参照してください。
公式サイトには、dwm に機能を追加するための [https://dwm.suckless.org/patches/ パッチ]が多数あります。これらのパッチは主に {{ic|dwm.c}} ファイルを変更するものですが、必要に応じて {{ic|config.h}} ファイルも変更されます。パッチの適用に関する情報は、[[パッケージにパッチを適用]] の記事を参照してください。
 
   
  +
公式サイトには、dwm に機能を追加するための [https://dwm.suckless.org/patches/ パッチ] が多数あります。これらのパッチは主に {{ic|dwm.c}} ファイルを変更するものですが、必要に応じて {{ic|config.h}} ファイルも変更されます。パッチの適用に関する情報は、[[パッケージにパッチを適用]] の記事を参照してください。
== dwm の起動 ==
 
   
  +
== 起動 ==
任意の[[ディスプレイマネージャ]]のメニューから ''Dwm'' を選択します。あるいは、[[startx]] で dwm を起動するには、 {{ic|exec dwm}} を {{ic|~/.xinitrc}} に追加し、他のプログラムも同様に実行するように前置きします、例えば、以下のようにします。
 
  +
  +
任意の[[ディスプレイマネージャ]]のメニューから ''Dwm'' を選択します。あるいは、[[startx]] で dwm を起動するには、{{ic|exec dwm}} を {{ic|~/.xinitrc}} に追加し、他のプログラムも同様に実行するように前置きします、例えば、以下のようにします。
   
 
redshift -O3500; xset r rate 300 50; exec dwm
 
redshift -O3500; xset r rate 300 50; exec dwm
32行目: 32行目:
 
== 使い方 ==
 
== 使い方 ==
   
dwm の基本的な使い方については、[https://dwm.suckless.org/tutorial dwm チュートリアル]を参照してください。
+
dwm の基本的な使い方については、[https://dwm.suckless.org/tutorial dwm チュートリアル] を参照してください。
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
   
 
=== ステータスバーの設定 ===
 
=== ステータスバーの設定 ===
  +
  +
ステータスバーのその他の例については、[https://dwm.suckless.org/status_monitor/] を参照してください。
   
 
{{Note|以下の設定を使うには {{Pkg|xorg-xsetroot}} パッケージのインストールが必要です。}}
 
{{Note|以下の設定を使うには {{Pkg|xorg-xsetroot}} パッケージのインストールが必要です。}}
42行目: 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!"}}
   
58行目: 60行目:
 
exec dwm
 
exec dwm
 
}}
 
}}
上記の場合 [[wikipedia:ISO_8601|ISO 8601]] 形式で日付が表示され、起動時に [[PCManFM]] が実行されます。
+
上記の場合 [[RFC:3339]] 形式で日付が表示され、起動時に [[PCManFM]] が実行されます。
   
{{note|更新間隔をゼロに等しくしたり、"sleep" 行を完全に削除することは、CPU 使用率を大幅に上昇させるので推奨されません (その効果は ''top'' や [[powertop]] で観察して下さい) }}
+
{{note|更新間隔をゼロに等しくしたり、"sleep" 行を完全に削除することは、CPU 使用率を大幅に上昇させるので推奨されません (使用率は ''top'' や [[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|
 
  +
{{bc|1=
<nowiki>conky.config = {
 
  +
#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' を移動します ({{ic|/usr/local/bin}} など)
  +
  +
# mv dwm-setstatus /usr/local/bin
  +
  +
実行します:
  +
  +
$ conky | dwm-setstatus
  +
  +
これを行うには、conky にテキストをコンソールのみに出力するように指示する必要があります。以下は、デュアルコア CPU のサンプル conkyrc で、いくつかの使用統計を表示します:
  +
  +
{{bc|<nowiki>
  +
conky.config = {
 
out_to_console = true,
 
out_to_console = true,
 
out_to_x = false,
 
out_to_x = false,
82行目: 133行目:
 
conky.text = [[
 
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}
 
$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>
+
]];
  +
</nowiki>}}
}}
 
   
アイコン色のオプションについては、[[dzen]] をさい。
+
アイコン色のオプションについては、[[dzen]] を参照しください。
   
 
=== dwm の再起動 ===
 
=== dwm の再起動 ===
102行目: 153行目:
 
dwm は通常の Mod-Shift-Q の組み合わせで、他の X ウィンドウを破壊することなく再起動できるようになりました。
 
dwm は通常の Mod-Shift-Q の組み合わせで、他の X ウィンドウを破壊することなく再起動できるようになりました。
   
上記のスタートアップスクリプトを別のファイル、例えば {{ic|~/bin/startdwm}} に置き、 {{ic|~/.xinitrc}} から実行するのが良いでしょう。X サーバーが終了した後もログインしたままだとセキュリティに影響が出るので、{{ic|exec}} でスクリプトを実行することを検討して下さい。詳しくは [[Xinit#ログイン時に X を自動起動|ログイン時に X を自動起動]] を参照して下さい。これ以降、Xセッションを終了したいときは、単に {{Ic|killall xinit}} を実行するか、便利なキーバインドにそれをバインドしてください。また、バイナリが変更された場合のみ、dwm セッションスクリプトを再立ち上げするように設定することもできます。 これは、設定を変更したり、dwm のコードベースを更新したりする場合に便利です。
+
上記のスタートアップスクリプトを別のファイル、例えば {{ic|~/bin/startdwm}} に置き、{{ic|~/.xinitrc}} から実行するのが良いでしょう。X サーバーが終了した後もログインしたままだとセキュリティに影響が出るので、{{ic|exec}} でスクリプトを実行することを検討して下さい。詳しくは [[Xinit#ログイン時に X を自動起動|ログイン時に X を自動起動]] を参照して下さい。これ以降、Xセッションを終了したいときは、単に {{Ic|killall xinit}} を実行するか、便利なキーバインドにそれをバインドしてください。また、バイナリが変更された場合のみ、dwm セッションスクリプトを再立ち上げするように設定することもできます。これは、設定を変更したり、dwm のコードベースを更新したりする場合に便利です。
   
 
{{bc|1=
 
{{bc|1=
122行目: 173行目:
 
}}
 
}}
   
=== 右 Alt キーを Mod4 (Windows キー) として使う ===
+
=== 右側の Alt キーを Mod4 にバインドする ===
   
Mod4(スーパー/ウィンドウズキーを {{Ic|MODKEY}} として使用する場合、右 Alt キー ({{ic|Alt_R}}) を {{ic|Mod4}} として使用すると、同様に便利な場合があります。これにより、{{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}} コマンドで集めた結果に変更します。
 
次に、スタートアップスクリプト (例:{{ic|~/.xinitrc}}) に以下を追加します。必要ならキーコード ''113'' を前の {{Ic|xmodmap}} コマンドで集めた結果に変更します。
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}} に再割り当てします:
そうすると、{{ic|Super_L}} キーが押されたときに起動する関数も {{ic|Alt_R}} キーが押されたときに起動するようになります。
 
  +
  +
xmodmap -e "keycode 113 = Super_L"
  +
  +
X が "mod1" グループから除外されていることを確認します。
  +
  +
xmodmap -e "remove mod1 = Super_L"
  +
  +
これを実行すると、{{ic|Super_L}} キーの押下によってトリガーされる機能はすべて、{{ic|Alt_R}} キーの押下によってもトリガーされます。
   
{{note|[[dwm#設定|config.h]] #define オプション modkey を切り替えることできます。}}
+
{{Note|[[dwm#設定|config.h]] には {{ic|#define}} オプションがあり、これを使用して modkey を切り替えることできます。}}
   
 
=== DWM で Alt キーを両方 Meta として使用する ===
 
=== DWM で Alt キーを両方 Meta として使用する ===
   
xmodmap を使って Alt_L を DWM のセカンダリメタキーとして割り当てます (Mod1Mask (Alt_R) を使って既に提供されています)
+
xmodmap を使って Alt_L を DWM のセカンダリメタキーとして割り当てます (Mod1Mask (Alt_R) を使って既に提供されています)
   
 
{{hc|~/.xinitrc|<nowiki>
 
{{hc|~/.xinitrc|<nowiki>
145行目: 203行目:
 
/usr/bin/xmodmap -e "keycode 108 = Alt_L"
 
/usr/bin/xmodmap -e "keycode 108 = Alt_L"
 
</nowiki>}}
 
</nowiki>}}
[https://cirrusuk.wordpress.com/ link blog]
 
   
 
=== 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,}}
非アクティブなウィンドウを最初にクリックすると、そのウィンドウにのみフォーカスが移動します。ウィンドウの内容(ボタン、フィールドなど)を操作するには、もう一度クリックする必要があります。また、複数のモニターを使用している場合、クリックしてもキーボードのフォーカスが他のモニターに切り替わらないことがあります。
 
  +
  +
非アクティブなウィンドウを最初にクリックすると、そのウィンドウにのみフォーカスが移動します。ウィンドウの内容(ボタン、フィールドなど)を操作するには、もう一度クリックする必要があります。また、複数のモニターを使用している場合、クリックしてもキーボードのフォーカスが他のモニターに切り替わらないことがあります。
   
 
=== 特定のウィンドウをフロートさせる ===
 
=== 特定のウィンドウをフロートさせる ===
169行目: 229行目:
 
{ "Tilda", NULL, NULL, 0, True, -1 },
 
{ "Tilda", NULL, NULL, 0, True, -1 },
   
-Cオプション付きで tilda を起動します
+
{{ic|-C}} オプションを指定して tilda を起動します:
   
 
$ tilda -C
 
$ tilda -C
   
これで Tilda 設定できましたが、以下のオプション推奨として提供されています
+
これでTilda 設定できるようになりました。次のオプション推奨事項として提供されます:
   
{{bc|Font: Clean 9
+
{{bc|
  +
Font: Clean 9
 
Appearance: Height: 50%, Width: 70%, Centered Horizontally
 
Appearance: Height: 50%, Width: 70%, Centered Horizontally
 
Extras: Enable Transparency Level 15
 
Extras: Enable Transparency Level 15
184行目: 245行目:
 
}}
 
}}
   
  +
プルダウンアニメーションを有効にしないと、Tilda は非表示にするたびに下にジャンプしてしまいます。
これらの設定を {{ic|~/.config/tilda/config_0}} で行った後の設定は以下のようになります。
 
   
  +
=== スクリーンショットを撮る ===
{{bc|1=
 
  +
tilda_config_version = "0.9.6"
 
  +
{{Pkg|scrot}} パッケージをインストールします。次に 2 つのスクリプトを作成します
# image = ""
 
  +
# command = ""
 
  +
{{hc|/path/to/scripts/screenshot.sh|2=
font = "Clean 9"
 
  +
#!/bin/sh
key = "F9"
 
  +
mkdir -p /path/to/pics && scrot /path/to/pics/%m-%d-%Y-%H%M%S.png
title = "Tilda"
 
background_color = "white"
 
# working_dir = ""
 
web_browser = "firefox"
 
lines = 2000
 
max_width = 956
 
max_height = 384
 
min_width = 1
 
min_height = 1
 
transparency = 15
 
x_pos = 205
 
y_pos = 1
 
tab_pos = 0
 
backspace_key = 0
 
delete_key = 1
 
d_set_title = 3
 
command_exit = 2
 
scheme = 1
 
slide_sleep_usec = 1500
 
animation_orientation = 0
 
scrollbar_pos = 0
 
back_red = 0
 
back_green = 0
 
back_blue = 0
 
text_red = 0
 
text_green = 65535
 
text_blue = 0
 
scroll_background = true
 
scroll_on_output = false
 
notebook_border = false
 
antialias = true
 
scrollbar = false
 
use_image = false
 
grab_focus = true
 
above = true
 
notaskbar = true
 
bold = true
 
blinks = true
 
scroll_on_key = true
 
bell = false
 
run_command = false
 
pinned = true
 
animation = true
 
hidden = true
 
centered_horizontally = true
 
centered_vertically = false
 
enable_transparency = true
 
double_buffer = false
 
 
}}
 
}}
   
  +
スクリーンショットの作成と
プルダウンアニメーションを有効にしないと、Tilda は非表示にするたびに下にジャンプしてしまいます。
 
   
  +
{{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
  +
}}
   
  +
選択ボックスでスクリーンショットを作成するため。
=== Java アプリケーションの挙動がおかしい問題の修正 ===
 
  +
実行権限を付与します。{{ic|config.h}} に以下を追加します
   
  +
static const Key keys[] = {
JRE 6u20 現在、[[Java]] から dwm がウィンドウマネージャとして認識されないために、dwm で Java アプリケーションの挙動がおかしくなることがあります。マウスを離したときにメニューが閉じてしまうなどの問題が確認されています。まず、{{Pkg|wmname}} パッケージをインストールしてください。
 
  +
...
  +
  +
{ 0, XK_Print, spawn, SHCMD("/path/to/scripts/screenshot.sh") },
  +
{ ShiftMask, XK_Print, spawn, SHCMD("/path/to/scripts/screenshotsel.sh") },
  +
  +
...
  +
};
   
  +
これは、スクリーンショットの撮影をプリントキーにマップし、選択ボックスでスクリーンショット撮影を shift + プリントキーにマップします。
そして、''wmname'' を使って Java が認識する WM の名前を設定します:
 
$ wmname LG3D
 
   
  +
=== マルチメディアキーのマッピング ===
{{Note|この設定を使うと Chromium など特定のプログラムをタイルにしたときに問題が起こることがあります。}}
 
上記の設定は永続的ではないため、上のコマンドを {{ic|.xinitrc}} や {{ic|.xprofile}} に追加してください。
 
   
  +
{{ic|config.h}} の先頭に追加し、
もしくは、{{ic|/etc/profile.d/jre.sh}} で {{ic|1=export _JAVA_AWT_WM_NONREPARENTING=1}} を有効にする方法もあります。
 
   
  +
#include <X11/XF86keysym.h>
=== ターミナルウィンドウ周辺のギャップを修正する ===
 
   
  +
[[Xmodmap#キーマップテーブル|マルチメディアキーを使用する]] これで、一般的なタスクをこれらのキーにマップできます。
ターミナルウィンドウの外側にデスクトップスペースの空きがある場合は、ターミナルのフォントサイズが原因である可能性があります。ギャップを埋める理想的なスケールが見つかるまでサイズを調整するか、{{ic|config.h}} で {{Ic|resizehints}} を ''0'' に切り替えます。
 
   
  +
==== 音量を調整する ====
これにより、dwm は端末だけでなく、すべてのクライアントウィンドウからのサイズ変更要求を無視します。この回避策の欠点は、一部の端末で再描画の異常 (特にゴーストラインや早まったラインラップなど) が発生する可能性があることです。
 
   
  +
{{Pkg|pipewire}} パッケージをインストールします。{{ic|config.h}} に、ミュートと音量の増減のコマンドを追加します。
または、 [[st]] ターミナルエミュレータを使用する場合は、 [https://st.suckless.org/patches/anysize/ anysize] パッチを適用して st を再コンパイルします。
 
   
  +
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}} に、画面を暗くしたり明るくしたりするためのコマンドを追加します。
タイトルバーに絵文字を使用すると、以下のようなエラーで dwm がクラッシュすることがあります。
 
   
  +
static const char *brighter[] = { "brightnessctl", "set", "10%+", NULL };
dwm: fatal error: request code=140, error code=16
 
  +
static const char *dimmer[] = { "brightnessctl", "set", "10%-", NULL };
X Error of failed request: BadLength (poly request too large or internal Xlib length error)
 
  +
...
Major opcode of failed request: 140 (RENDER)
 
  +
Minor opcode of failed request: 20 (RenderAddGlyphs)
 
  +
static const Key keys[] = {
Serial number of failed request: 4319
 
  +
...
Current serial number in output stream: 4331
 
  +
  +
{ 0, XF86XK_MonBrightnessDown, spawn, {.v = dimmer } },
  +
{ 0, XF86XK_MonBrightnessUp, spawn, {.v = brighter } },
  +
  +
...
  +
};
   
  +
=== 自動起動 ===
これは {{pkg|noto-fonts-emoji}} や {{pkg|bdf-unifont}} など、一部のフォントでのみ発生します。https://lists.suckless.org/dev/1608/30245.html], [https://lists.suckless.org/dev/1610/30710.html], [https://bbs.archlinux.org/viewtopic.php?id=226928], [https://www.reddit.com/r/archlinux/comments/703ayu/anyone_with_dwm_and_notofontsemoji/], およびアップストリームのバグレポート [https://gitlab.freedesktop.org/xorg/lib/libxft/issues/6] を参照してください。回避策としては、別のフォントを使うか、[https://lists.suckless.org/dev/1610/30720.html] のパッチが考えられます。
 
  +
  +
[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"}} を設定することも役立つかもしれません。
  +
  +
こちらも参照 [[Java#灰色のウィンドウ、ウィンドウマネージャでアプリがリサイズされない、メニューがすぐに閉じる]]
  +
  +
=== ターミナルウィンドウ周辺のギャップを修正する ===
  +
  +
ターミナルウィンドウの外側にデスクトップスペースの空きがある場合は、ターミナルのフォントサイズが原因である可能性があります。ギャップを埋める理想的なスケールが見つかるまでサイズを調整するか、{{ic|config.h}} で {{Ic|resizehints}} を ''0'' に切り替えます。
  +
  +
これにより、dwm は端末だけでなく、すべてのクライアントウィンドウからのサイズ変更要求を無視します。この回避策の欠点は、一部の端末で再描画の異常 (特にゴーストラインや早まったラインラップなど) が発生する可能性があることです。
   
  +
または、[[st]] ターミナルエミュレータを使用する場合は、[https://st.suckless.org/patches/anysize/ anysize] パッチを適用して st を再コンパイルします。
上流での修正が提案されています [https://gitlab.freedesktop.org/xorg/lib/libxft/merge_requests/1]が、この文章を書いている時点ではまだマージされていません。libXft のパッチが適用され、クラッシュせずに絵文字を表示するようになったバージョンについては {{AUR|libxft-bgra}} と {{AUR|lib32-libxft-bgra}} を見て下さい。
 
   
 
== 参照 ==
 
== 参照 ==
   
 
* [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 を再コンパイルします。

参照