「Dwm」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の10版が非表示)
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}}
12行目: 10行目:
 
{{Related|ウィンドウマネージャ}}
 
{{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 による [[マルチディスプレイ]] もサポートしています。
   
 
== インストール ==
 
== インストール ==
18行目: 16行目:
 
dwm は、パッケージ {{AUR|dwm}} または {{AUR|dwm-git}} でインストールできます。ビルドとインストールの '''前に'''、必要な [[Dwm#設定|設定]] の変更を行ってください。[[makepkg]] を参照してください。
 
dwm は、パッケージ {{AUR|dwm}} または {{AUR|dwm-git}} でインストールできます。ビルドとインストールの '''前に'''、必要な [[Dwm#設定|設定]] の変更を行ってください。[[makepkg]] を参照してください。
   
{{Note|[https://git.suckless.org/dwm/file/README.html アップストリームの手順] に従うこともできますが、[[pacman]] がファイルを追跡せずにファイルをインストールします。}}
+
{{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'' を選択します。あるいは、[[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
34行目: 32行目:
 
== 使い方 ==
 
== 使い方 ==
   
dwm の基本的な使い方については、[https://dwm.suckless.org/tutorial dwm チュートリアル]を参照してください。
+
dwm の基本的な使い方については、[https://dwm.suckless.org/tutorial dwm チュートリアル] を参照してください。
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
46行目: 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!"}}
   
62行目: 60行目:
 
exec dwm
 
exec dwm
 
}}
 
}}
上記の場合 [[wikipedia:ISO_8601|ISO 8601]] 形式で日付が表示され、起動時に [[PCManFM]] が実行されます。
+
上記の場合 [[RFC:3339]] 形式で日付が表示され、起動時に [[PCManFM]] が実行されます。
   
 
{{note|更新間隔をゼロに等しくしたり、"sleep" 行を完全に削除することは、CPU 使用率を大幅に上昇させるので推奨されません (使用率は ''top'' や [[powertop]] で観察して下さい)}}
 
{{note|更新間隔をゼロに等しくしたり、"sleep" 行を完全に削除することは、CPU 使用率を大幅に上昇させるので推奨されません (使用率は ''top'' や [[powertop]] で観察して下さい)}}
69行目: 67行目:
   
 
{{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,
84行目: 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 の再起動 ===
104行目: 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=
126行目: 175行目:
 
=== 右側の Alt キーを Mod4 にバインドする ===
 
=== 右側の 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>
147行目: 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,}}
  +
 
非アクティブなウィンドウを最初にクリックすると、そのウィンドウにのみフォーカスが移動します。ウィンドウの内容(ボタン、フィールドなど)を操作するには、もう一度クリックする必要があります。また、複数のモニターを使用している場合、クリックしてもキーボードのフォーカスが他のモニターに切り替わらないことがあります。
 
非アクティブなウィンドウを最初にクリックすると、そのウィンドウにのみフォーカスが移動します。ウィンドウの内容(ボタン、フィールドなど)を操作するには、もう一度クリックする必要があります。また、複数のモニターを使用している場合、クリックしてもキーボードのフォーカスが他のモニターに切り替わらないことがあります。
   
171行目: 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行目: 243行目:
 
Scrolling: Scrollbar is on the left, 2000 lines scrollback
 
Scrolling: Scrollbar is on the left, 2000 lines scrollback
 
Key Binding: F9
 
Key Binding: F9
}}
 
 
これらの設定を {{ic|~/.config/tilda/config_0}} で行った後の設定は以下のようになります。
 
 
{{bc|1=
 
tilda_config_version = "0.9.6"
 
# image = ""
 
# command = ""
 
font = "Clean 9"
 
key = "F9"
 
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
 
 
}}
 
}}
   
328行目: 329行目:
 
=== Java アプリケーションの挙動がおかしい問題の修正 ===
 
=== Java アプリケーションの挙動がおかしい問題の修正 ===
   
  +
{{ic|1=export _JAVA_AWT_WM_NONREPARENTING=1}} を設定してみてください。{{Pkg|wmname}} を使用して {{ic|1=wmname "LG3D"}} を設定することも役立つかもしれません。
JRE 6u20 現在、[[Java]] から dwm がウィンドウマネージャとして認識されないために、dwm で Java アプリケーションの挙動がおかしくなることがあります。マウスを離したときにメニューが閉じてしまうなどの問題が確認されています。まず、{{Pkg|wmname}} パッケージをインストールしてください。
 
 
そして、''wmname'' を使って Java が認識する WM の名前を設定します:
 
$ wmname LG3D
 
 
{{Note|この設定を使うと Chromium など特定のプログラムをタイルにしたときに問題が起こることがあります。}}
 
上記の設定は永続的ではないため、上のコマンドを {{ic|.xinitrc}} や {{ic|.xprofile}} に追加してください。
 
   
  +
こちらも参照 [[Java#灰色のウィンドウ、ウィンドウマネージャでアプリがリサイズされない、メニューがすぐに閉じる]]
もしくは、{{ic|/etc/profile.d/jre.sh}} で {{ic|1=export _JAVA_AWT_WM_NONREPARENTING=1}} を有効にする方法もあります。
 
   
 
=== ターミナルウィンドウ周辺のギャップを修正する ===
 
=== ターミナルウィンドウ周辺のギャップを修正する ===
344行目: 339行目:
 
これにより、dwm は端末だけでなく、すべてのクライアントウィンドウからのサイズ変更要求を無視します。この回避策の欠点は、一部の端末で再描画の異常 (特にゴーストラインや早まったラインラップなど) が発生する可能性があることです。
 
これにより、dwm は端末だけでなく、すべてのクライアントウィンドウからのサイズ変更要求を無視します。この回避策の欠点は、一部の端末で再描画の異常 (特にゴーストラインや早まったラインラップなど) が発生する可能性があることです。
   
または、 [[st]] ターミナルエミュレータを使用する場合は、 [https://st.suckless.org/patches/anysize/ anysize] パッチを適用して st を再コンパイルします。
+
または、[[st]] ターミナルエミュレータを使用する場合は、[https://st.suckless.org/patches/anysize/ anysize] パッチを適用して st を再コンパイルします。
   
 
== 参照 ==
 
== 参照 ==

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 を再コンパイルします。

参照