「Dwm」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(英語版に追従して情報を整理)
16行目: 16行目:
 
== インストール ==
 
== インストール ==
   
  +
[https://git.suckless.org/dwm/ オフィシャル git リポ] をクローンして {{ic|make}} を実行し、{{ic|make install}} で dwm をインストールします。 dwm は AUR パッケージ {{AUR|dwm}} や {{AUR|dwm-git}} でインストールすることも可能です。ビルドとインストールの前に '''設定''' を変更してください、[[makepkg]] を見て下さい。
{{note|ソースから dwm をコンパイルしない場合、dwm のカスタマイズはできません。ソースコードを編集して設定を変更することになっているためです。詳しくは [[#設定]] を見て下さい。}}
 
 
{{AUR|dwm}} パッケージを[[インストール]]してください。もしくは [[ABS]] や {{AUR|dwm-git}} (開発版) パッケージを使って、必要に応じてソースを変更して dwm をソースからコンパイルしてください。[[Xorg]] 用の軽量・高速なダイナミックメニューである [[dmenu]] もインストールすると良いでしょう。
 
 
== dwm の起動 ==
 
 
[[ディスプレイマネージャ]]のメニューから ''Dwm'' を選択してください。
 
 
もしくは、{{Ic|startx}} や [[SLiM]] ログインマネージャで dwm を起動する場合、以下を {{ic|~/.xinitrc}} に追加します:
 
exec dwm
 
   
 
== 設定 ==
 
== 設定 ==
   
  +
dwm はコンパイル時にいくつかのソースファイル、特に {{ic|config.h}} を編集することで設定します。これらの設定に関する詳細な情報は、同梱され、コメントが付いています。 {{ic|config.def.h}} と、 dwm のウェブサイトの [https://dwm.suckless.org/customisation/ customisation section] を参照してください。
[[#インストール]] でも触れたように、dwm の設定はコンパイル時にソースコード ({{ic|config.h}}, {{ic|config.mk}}, {{ic|dwm.c}}) を編集することで行います。
 
   
  +
公式サイトには、dwm に機能を追加するための [https://dwm.suckless.org/patches/ パッチ]が多数あります。これらのパッチは主に {{ic|dwm.c}} ファイルを変更するものですが、必要に応じて {{ic|config.h}} ファイルも変更されます。パッチの適用に関する情報は、[[パッケージにパッチを適用]] の記事を参照してください。
変更を加えたら、PKGBUILD のチェックサムを更新してください。[[PKGBUILD#md5sums]] を参照。もしくは、{{ic|--skipinteg}} スイッチを付けて ''makepkg'' を実行することで整合性のチェックをスキップできます。
 
   
  +
== dwm の起動 ==
そして、dwm をコンパイル・インストールしてください:
 
$ makepkg -fi
 
   
  +
任意の[[ディスプレイマネージャ]]のメニューから ''Dwm'' を選択します。あるいは、[[startx]] で dwm を起動するには、 {{ic|exec dwm}} を {{ic|~/.xinitrc}} に追加し、他のプログラムも同様に実行するように前置きします、例えば、以下のようにします。
設定の変更が正しく行われていれば、上記のコマンドで dwm がコンパイルされ、パッケージがビルド・インストールされます。問題が発生した場合は、出力を確認してください。
 
   
  +
redshift -O3500; xset r rate 300 50; exec dwm
最後に、dwm を再起動することで変更が適用されます。
 
   
  +
== 使い方 ==
{{Tip|簡単に再コンパイルできるように {{ic|.bashrc}} ファイルに {{ic|alias redwm<nowiki>=</nowiki>'cd ~/dwm; updpkgsums; makepkg -fi --noconfirm; killall dwm'}} と記述してエイリアスを作成しても良いでしょう。}}
 
   
  +
dwm の基本的な使い方については、[https://dwm.suckless.org/tutorial 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|""}} で囲む必要があります。
 
 
例:
 
 
{{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|システム全体の dwm に影響を与えずに設定変更をテストしたいだけなら、 {{ic|${HOME}/.local}} のようなローカルディレクトリに {{ic|PREFIX}} を変更します。もし、{{AUR|dwm}} を使ってコンパイルしているのであれば、注意してください。[[PKGBUILD]] は {{ic|config.mk}} よりも優先されるので、代わりに PKGBUILD の {{ic|PREFIX}} を変更する必要があります。- ''package()'' 関数を参照してください - そして、{{ic|pkgname}} も変更する必要があります。}}
 
   
 
=== ステータスバーの設定 ===
 
=== ステータスバーの設定 ===
144行目: 87行目:
 
アイコンや色のオプションについては、[[dzen]] を見て下さい。
 
アイコンや色のオプションについては、[[dzen]] を見て下さい。
   
  +
=== dwm の再起動 ===
== 基本的な使い方 ==
 
   
  +
ログアウトやアプリケーションの終了をせずに dwm を再起動するには、起動スクリプトを変更または追加して、例えば ''while'' ループの中で dwm をロードするようにします。
以下のセクションだけでなく、dwm の基本的な使用方法については [http://dwm.suckless.org/tutorial dwm チュートリアル] も見て下さい。
 
   
=== dmenu を使う ===
 
 
[[dmenu]] を起動するには、{{ic|Mod1}} + {{ic|P}} を押します ({{ic|Mod1}} はデフォルトでは {{ic|Alt}} キーです)。必要であればキーは変えられます。そして、トップバーに表示されるまで、実行したいバイナリの最初の文字列を入力します。左と右の方向キーでバイナリを選択してエンターを押します。
 
 
=== ウィンドウのコントロール ===
 
 
==== ウィンドウにタグを変更 ====
 
 
ウィンドウのタグの変更は簡単です。カーソルをウィンドウに乗せて、ウィンドウをフォーカスされた状態にしてください。そして、{{ic|Shift}} + {{ic|Mod1}} + {{ic|x}} を押します。{{ic|x}} はウィンドウを移動したいタグの番号に置き換えてください。デフォルトでは {{ic|Mod1}} は {{ic|Alt}} キーになっています。
 
 
==== ウィンドウを閉じる ====
 
 
dwm を使ってウィンドウを終了するには、{{ic|Shift}} + {{ic|Mod1}} + {{ic|c}} を押して下さい。
 
 
==== ウィンドウレイアウト ====
 
 
デフォルトでは、dwm はタイルモードで動作します。これは、同じタグの新しいウィンドウが開くと、どんどん小さくなっていきます。ウィンドウは合わせて、常に画面全体を占めることになります(メニューバーを除く)。ただし、これ以外にも、フローティングと monocole mode の2つのモードがあります。フローティングモードは、タイル型でないウィンドウマネージャのユーザーにはおなじみのもので、ユーザーが好きなようにウィンドウを並べ替えることができます。monocole mode は、常に1つのウィンドウを表示し続けます。
 
 
フローティングモードに切り替えるには、単に {{ic|Mod1}} + {{ic|F}} です。{{ic|Mod1}} は、デフォルトでは {{ic|Alt}} キーです。フローティングモードになっているかどうかを確認するには、画面右上の番号付きタグの横に、次のようなものが表示されているはずです。><>.
 
 
monocole mode に切り替えるには、{{ic|Mod1}} + {{ic|M}} monocole mode になっているかどうかは、カッコの中に M が表示されているか(そのタグでウィンドウが開かれていない場合)、カッコの中に数字が表示されているか(そのタグで開いているウィンドウの数に対応する)で確認できます。したがって、ウィンドウが1つも開かれていないタグは、[M] と表示され、'n' 個のウィンドウが開いているタグは、このように表示されます。[n].
 
 
タイルモードに戻るには、{{ic|Mod1}} + {{ic|T}} です。次のようなマークが表示されます。[]= .
 
 
他のウィンドウレイアウトを使う方法は、[[#ウィンドウタイリングパッチ]]を見て下さい。
 
 
=== dwm の終了 ===
 
 
dwm を終了するには、{{ic|Shift}} + {{ic|Mod1}} + {{ic|q}} を押して下さい。
 
 
== ヒントとテクニック ==
 
 
=== ログアウトやプログラムを終了しないで dwm を再起動 ===
 
 
ログアウトやアプリケーションの終了をせずに dwm を再起動するには、起動スクリプトを ''while'' ループで dwm をロードするように変更または追加してください(下記参照)
 
 
{{bc|
 
{{bc|
 
while true; do
 
while true; do
192行目: 100行目:
 
}}
 
}}
   
dwm は通常の Mod-Shift-Q の組み合わせで、 他の X ウィンドウを破壊することなく再起動することができるようになりました。
+
dwm は通常の Mod-Shift-Q の組み合わせで、他の X ウィンドウを破壊することなく再起動できるようになりました。
   
上記のスタートアップスクリプトを別のファイル、例えば {{ic|~/bin/startdwm}} に置き、 {{ic|~/.xinitrc}} から実行するとよいでしょう。の時点から、Xセッションを終了したいときは、単に {{Ic|killall xinit}} を実行するか、便利なキーにそれをバインドします。あるいは、バイナリが変更された場合のみ dwm を再起動するように dwm セッションスクリプトを設定することもできます。 これは、設定を変更したり、dwm のコードベースを更新したりする場合に便利です。
+
上記のスタートアップスクリプトを別のファイル、例えば {{ic|~/bin/startdwm}} に置き、 {{ic|~/.xinitrc}} から実行するのが良いでしょう。X サーバーが終了した後もログインしたままだとセキュリティに影響が出るで、{{ic|exec}} でスクリプトを実行することを検討して下さい。詳しくは [[Xinit#ログインに X を自動起動|ログイン時に X を自動起動]] を参照して下さい。これ以降、Xセッションを終了したいときは、単に {{Ic|killall xinit}} を実行するか、便利なキーバインドにそれをバインドしてください。、バイナリが変更された場合のみ、dwm セッションスクリプトを再立ち上げするように設定することもできます。 これは、設定を変更したり、dwm のコードベースを更新したりする場合に便利です。
   
 
{{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
227行目: 135行目:
 
そうすると、{{ic|Super_L}} キーが押されたときに起動する関数も {{ic|Alt_R}} キーが押されたときに起動するようになります。
 
そうすると、{{ic|Super_L}} キーが押されたときに起動する関数も {{ic|Alt_R}} キーが押されたときに起動するようになります。
   
{{note|[[#config.h のカスタマイズ|config.h]] の #define オプションで modkey を切り替えることができます。}}
+
{{note|[[dwm#設定|config.h]] の #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>}}
  +
[https://cirrusuk.wordpress.com/ link blog]
   
 
=== dwm のバーのフォントの周りの空白 ===
 
=== dwm のバーのフォントの周りの空白 ===
244行目: 162行目:
 
環境設定ダイアログのような一部のウィンドウでは、ウィンドウをタイル状にすることは意味がなく、代わりにフリーフローティングにすべきです。たとえば、Firefox の環境設定ダイアログをフロートさせるには、{{ic|config.h}} のルール配列に次のように追加します。:
 
環境設定ダイアログのような一部のウィンドウでは、ウィンドウをタイル状にすることは意味がなく、代わりにフリーフローティングにすべきです。たとえば、Firefox の環境設定ダイアログをフロートさせるには、{{ic|config.h}} のルール配列に次のように追加します。:
 
{ "Firefox", NULL, "Firefox Preferences", 1 << 8, True, -1 },
 
{ "Firefox", NULL, "Firefox Preferences", 1 << 8, True, -1 },
  +
  +
=== dwm での Tilda の使用 ===
  +
  +
[[Tilda]] はすべてのタグに追加され、フローティングに設定された場合に最もよく機能します。そのためには、{{ic|config.h}} の中のルール配列に以下を追加してください。
  +
  +
{ "Tilda", NULL, NULL, 0, True, -1 },
  +
  +
-Cオプション付きで tilda を起動します。
  +
  +
$ 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
  +
}}
  +
  +
これらの設定を {{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
  +
}}
  +
  +
プルダウンアニメーションを有効にしないと、Tilda は非表示にするたびに下にジャンプしてしまいます。
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
266行目: 265行目:
   
 
または、 [[st]] ターミナルエミュレータを使用する場合は、 [https://st.suckless.org/patches/anysize/ anysize] パッチを適用して st を再コンパイルします。
 
または、 [[st]] ターミナルエミュレータを使用する場合は、 [https://st.suckless.org/patches/anysize/ anysize] パッチを適用して st を再コンパイルします。
  +
  +
== 既知の問題点 ==
  +
  +
=== 一部のフォントで絵文字を使用するとクラッシュします ===
  +
  +
タイトルバーに絵文字を使用すると、以下のようなエラーで dwm がクラッシュすることがあります。
  +
  +
dwm: fatal error: request code=140, error code=16
  +
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)
  +
Serial number of failed request: 4319
  +
Current serial number in output stream: 4331
  +
  +
これは {{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://gitlab.freedesktop.org/xorg/lib/libxft/merge_requests/1]が、この文章を書いている時点ではまだマージされていません。libXft のパッチが適用され、クラッシュせずに絵文字を表示するようになったバージョンについては {{AUR|libxft-bgra}} と {{AUR|lib32-libxft-bgra}} を見て下さい。
   
 
== 参照 ==
 
== 参照 ==

2022年1月21日 (金) 18:47時点における版

関連記事

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

インストール

オフィシャル git リポ をクローンして make を実行し、make install で dwm をインストールします。 dwm は AUR パッケージ dwmAURdwm-gitAUR でインストールすることも可能です。ビルドとインストールの前に 設定 を変更してください、makepkg を見て下さい。

設定

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

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

dwm の起動

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

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

使い方

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

ヒントとテクニック

ステータスバーの設定

ノート: 以下の設定を使うには 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

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

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

ステータスバーのサンプルは suckless wiki にあります。

Conky ステータスバー

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

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

この場合、コンソールにテキストを出力するように 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 (Windows キー) として使う

Mod4(スーパー/ウィンドウズキー)を MODKEY として使用する場合、右 Alt キー (Alt_R) を Mod4 として使用すると、同様に便利な場合があります。これにより、Alt_R+Enter でズームするような、片手で操作しにくいキー操作を行うことができるようになります。

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

xmodmap -pke | grep Alt_R

次に、スタートアップスクリプト (例:~/.xinitrc) に以下を追加します。必要ならキーコード 113 を前の 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

そうすると、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"

link blog

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

デフォルトでは、dwm のバーではフォントのサイズが 2px 追加されます。これを変更するには、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

これらの設定を ~/.config/tilda/config_0 で行った後の設定は以下のようになります。

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

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

トラブルシューティング

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

JRE 6u20 現在、Java から dwm がウィンドウマネージャとして認識されないために、dwm で Java アプリケーションの挙動がおかしくなることがあります。マウスを離したときにメニューが閉じてしまうなどの問題が確認されています。まず、wmname パッケージをインストールしてください。

そして、wmname を使って Java が認識する WM の名前を設定します:

$ wmname LG3D
ノート: この設定を使うと Chromium など特定のプログラムをタイルにしたときに問題が起こることがあります。

上記の設定は永続的ではないため、上のコマンドを .xinitrc.xprofile に追加してください。

もしくは、/etc/profile.d/jre.shexport _JAVA_AWT_WM_NONREPARENTING=1 を有効にする方法もあります。

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

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

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

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

既知の問題点

一部のフォントで絵文字を使用するとクラッシュします

タイトルバーに絵文字を使用すると、以下のようなエラーで dwm がクラッシュすることがあります。

dwm: fatal error: request code=140, error code=16
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)
  Serial number of failed request: 4319
  Current serial number in output stream: 4331

これは noto-fonts-emojibdf-unifont など、一部のフォントでのみ発生します。https://lists.suckless.org/dev/1608/30245.html], [1], [2], [3], およびアップストリームのバグレポート [4] を参照してください。回避策としては、別のフォントを使うか、[5] のパッチが考えられます。

上流での修正が提案されています [6]が、この文章を書いている時点ではまだマージされていません。libXft のパッチが適用され、クラッシュせずに絵文字を表示するようになったバージョンについては libxft-bgraAURlib32-libxft-bgraAUR を見て下さい。

参照