dwm
dwm は Xorg の動的ウィンドウマネージャです。タイル・スタック・フルスクリーンレイアウトでウィンドウを管理し、さらにパッチを使うことで他のレイアウトも利用できます。レイアウトは動的に適用することができるため、アプリケーションを使用する環境と作業を最適化することが可能です。dwm はきわめて軽量かつ高速であり、C で書かれていてソースコードの行数を2000行以下から増やさないという設計目標を掲げています。xrandr や Xinerama によるマルチディスプレイもサポートしています。
インストール
dwmAUR パッケージをインストールしてください。もしくは ABS や dwm-gitAUR (開発版) パッケージを使って、必要に応じてソースを変更して dwm をソースからコンパイルしてください。Xorg 用の軽量・高速なダイナミックメニューである dmenu もインストールすると良いでしょう。
dwm の起動
ディスプレイマネージャのメニューから Dwm を選択してください。
もしくは、startx
や SLiM ログインマネージャで dwm を起動する場合、以下を ~/.xinitrc
に追加します:
exec dwm
設定
#インストール でも触れたように、dwm の設定はコンパイル時にソースコード (config.h
, config.mk
, dwm.c
) を編集することで行います。
変更を加えたら、PKGBUILD のチェックサムを更新してください。PKGBUILD#md5sums を参照。もしくは、--skipinteg
スイッチを付けて makepkg を実行することで整合性のチェックをスキップできます。
そして、dwm をコンパイル・インストールしてください:
$ makepkg -fi
設定の変更が正しく行われていれば、上記のコマンドで dwm がコンパイルされ、パッケージがビルド・インストールされます。問題が発生した場合は、出力を確認してください。
最後に、dwm を再起動することで変更が適用されます。
パッチ
公式ウェブサイトには dwm に機能を追加する多数の パッチ を記載しています。これらのパッチは主として dwm.c
ファイルに変更を加えますが config.h
ファイルを変更することもあります。パッチの適用については、ABS でパッチを適用を見て下さい。
ウィンドウタイリングパッチ
デフォルトのタイリングモードでは縦に画面が分割されますが、Bottom Stack パッチは横方向に画面を分割するタイリングモードを追加します。同じく、bstack horizontal はタイルを水平に分割します。gaplessgrid パッチはウィンドウをグリッドのようにタイル化させることができます。
dwm ではデフォルトで、全てのタグに選択したレイアウトが適用されます。タグにあわせて異なるレイアウトを使うようにするには pertag パッチを使って下さい。
config.h のカスタマイズ
config.h
ファイルには dwm の基本的な設定が保存されています。ほとんどの設定は特に説明しなくてもわかるはずです。設定に関する詳しい情報は dwm のウェブサイト を見て下さい。
カスタムキーバインド/ショートカットの追加
カスタムキーバインドを作成するには config.h
に2つエントリが必要です。1つは /* commands */
セクションの下に記述し、もう1つは static Key keys[] = {
セクションの下に記述します。
static const char *keybindname[] = { "command", "flags", "arguments", NULL };
keybindname
は何でもかまいません。command
, flags
, arguments
も何でもかまいませんが ""
で囲む必要があります。
例:
{ MODKEY, XK_key, spawn, {.v = keybindname } }
would bind Mod+key
to the command defined previously.
{ MODKEY|ShiftMask, XK_key, spawn, {.v = keybindname } }
would bind Mod+Shift+key
Use ControlMask for Ctrl
key.
Single keys such as Fn
or multimedia keys have to be bound with the hex codes obtainable from the program xev.
{ 0, 0xff00, spawn, {.v = keybindname } }
would bind foo key 0xff00
to keybindname
.
キーコードに関する情報は特別なキーボードキー#キーコードを見て下さい。
config.mk のカスタマイズ
config.mk
ファイルは Makefile によって include されます。GNU make で dwm をコンパイル・実行する方法を設定できます。
パッケージを作成せずに、ソースから直接 dwm をインストールするときは、config.mk
を変更して適当なプレフィックスを設定してください:
PREFIX
を修正:
PREFIX = /usr
X11 include フォルダ:
X11INC = /usr/include/X11
X11 lib ディレクトリ:
X11LIB = /usr/lib/X11
ステータスバーの設定
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 チュートリアル も見て下さい。
dmenu を起動するには、Mod1
+ P
を押します (Mod1
はデフォルトでは Alt
キーです)。必要であればキーは変えられます。そして、トップバーに表示されるまで、実行したいバイナリの最初の文字列を入力します。左と右の方向キーでバイナリを選択してエンターを押します。
ウィンドウのコントロール
ウィンドウにタグを変更
ウィンドウのタグの変更は簡単です。カーソルをウィンドウに乗せて、ウィンドウをフォーカスされた状態にしてください。そして、Shift
+ Mod1
+ x
を押します。x
はウィンドウを移動したいタグの番号に置き換えてください。デフォルトでは Mod1
は Alt
キーになっています。
ウィンドウを閉じる
dwm を使ってウィンドウを終了するには、Shift
+ Mod1
+ c
を押して下さい。
ウィンドウレイアウト
デフォルトでは、dwm はタイルモードで動作します。これは、同じタグの新しいウィンドウが開くと、どんどん小さくなっていきます。ウィンドウは合わせて、常に画面全体を占めることになります(メニューバーを除く)。ただし、これ以外にも、フローティングと monocole mode の2つのモードがあります。フローティングモードは、タイル型でないウィンドウマネージャのユーザーにはおなじみのもので、ユーザーが好きなようにウィンドウを並べ替えることができます。monocole mode は、常に1つのウィンドウを表示し続けます。
フローティングモードに切り替えるには、単に Mod1
+ F
です。Mod1
は、デフォルトでは Alt
キーです。フローティングモードになっているかどうかを確認するには、画面右上の番号付きタグの横に、次のようなものが表示されているはずです。><>.
monocole mode に切り替えるには、Mod1
+ M
monocole mode になっているかどうかは、カッコの中に M が表示されているか(そのタグでウィンドウが開かれていない場合)、カッコの中に数字が表示されているか(そのタグで開いているウィンドウの数に対応する)で確認できます。したがって、ウィンドウが1つも開かれていないタグは、[M] と表示され、'n' 個のウィンドウが開いているタグは、このように表示されます。[n].
タイルモードに戻るには、Mod1
+ T
です。次のようなマークが表示されます。[]= .
他のウィンドウレイアウトを使う方法は、#ウィンドウタイリングパッチを見て下さい。
dwm の終了
dwm を終了するには、Shift
+ Mod1
+ q
を押して下さい。
ヒントとテクニック
ログアウトやプログラムを終了しないで 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セッションを終了したいときは、単に killall xinit
を実行するか、便利なキーにそれをバインドします。あるいは、バイナリが変更された場合のみ dwm を再起動するように、 dwm セッションスクリプトを設定することもできます。 これは、設定を変更したり、dwm のコードベースを更新したりする場合に便利です。
# relaunch DWM if the binary changes, otherwise bail csum=$(sha1sum $(which dwm)) new_csum="" 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
キーが押されたときに起動するようになります。
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 },
トラブルシューティング
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 の公式ウェブサイト
- Introduction to dwm video
- dmenu - dwm の開発者が作ったシンプルなアプリケーションランチャー
- The dwm thread on the forums
- Hacking dwm thread
- Check out the forums' wallpaper thread for a selection of dwm wallpapers
- Show off your dwm configuration forum thread
- dwm: Tags are not workspaces