dwm
関連記事
dwm は Xorg の動的ウィンドウマネージャです。タイル・スタック・フルスクリーンレイアウトでウィンドウを管理し、さらにパッチを使うことで他のレイアウトも利用できます。レイアウトは動的に適用することができるため、アプリケーションを使用する環境と作業を最適化することが可能です。dwm はきわめて軽量かつ高速であり、C で書かれていてソースコードの行数を2000行以下から増やさないという設計目標を掲げています。xrandr や Xinerama によるマルチディスプレイもサポートしています。
インストール
dwm は、パッケージ dwmAUR または dwm-gitAUR でインストールできます。ビルドとインストールの 前に、必要な 設定 の変更を行ってください。makepkg を参照してください。
設定
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 チュートリアルを参照してください。
ヒントとテクニック
ステータスバーの設定
Dwm はルートウィンドウの名前を読み取ってステータスバーに送信します。ルートウィンドウは他の全てのウィンドウが描画されるウィンドウで、ウィンドウマネージャによって作成されます。他のウィンドウと同じように、ルートウィンドウにもタイトル/名前が存在しますが、ルートウィンドウはバックグラウンドで動作するため基本的に名前は定義されていません。
dwm のステータスバーに表示したい情報は ~/.xinitrc
や (ディスプレイマネージャを使っている場合) ~/.xprofile
で xsetroot -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 が実行されます。
ステータスバーのサンプルは 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 にバインドする
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
キーが押されたときに起動するようになります。
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
の以下の行を変更してください:
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 は非表示にするたびに下にジャンプしてしまいます。
スクリーンショットを撮る
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 アプリケーションの挙動がおかしい問題の修正
JRE 6u20 現在、Java から dwm がウィンドウマネージャとして認識されないために、dwm で Java アプリケーションの挙動がおかしくなることがあります。マウスを離したときにメニューが閉じてしまうなどの問題が確認されています。まず、wmname パッケージをインストールしてください。
そして、wmname を使って Java が認識する WM の名前を設定します:
$ wmname LG3D
上記の設定は永続的ではないため、上のコマンドを .xinitrc
や .xprofile
に追加してください。
もしくは、/etc/profile.d/jre.sh
で export _JAVA_AWT_WM_NONREPARENTING=1
を有効にする方法もあります。
ターミナルウィンドウ周辺のギャップを修正する
ターミナルウィンドウの外側にデスクトップスペースの空きがある場合は、ターミナルのフォントサイズが原因である可能性があります。ギャップを埋める理想的なスケールが見つかるまでサイズを調整するか、config.h
で resizehints
を 0 に切り替えます。
これにより、dwm は端末だけでなく、すべてのクライアントウィンドウからのサイズ変更要求を無視します。この回避策の欠点は、一部の端末で再描画の異常 (特にゴーストラインや早まったラインラップなど) が発生する可能性があることです。
または、 st ターミナルエミュレータを使用する場合は、 anysize パッチを適用して st を再コンパイルします。
参照
- dwm の公式ウェブサイト
- dwm ビデオの紹介
- dmenu - dwm の開発者が作ったシンプルなアプリケーションランチャー
- dwm スレッド フォーラム
- dwm ハッキング スレッド
- dwm の壁紙は、フォーラムの wallpaper スレッド をご覧ください。
- dwm 設定を公開するフォーラムスレッド
- dwm: Tags are not workspaces