「Dwm」の版間の差分
(英語版に追従して情報を整理) |
(→ステータスバーの設定: 同期) |
||
(2人の利用者による、間の21版が非表示) | |||
4行目: | 4行目: | ||
[[de:Dwm]] |
[[de:Dwm]] |
||
[[en:Dwm]] |
[[en:Dwm]] |
||
− | [[ |
+ | [[pt:Dwm]] |
− | [[fr:DWM]] |
||
− | [[ru:Dwm]] |
||
[[zh-hans:Dwm]] |
[[zh-hans:Dwm]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|dmenu}} |
{{Related|dmenu}} |
||
− | {{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 による [[マルチディスプレイ]] もサポートしています。 |
== インストール == |
== インストール == |
||
− | + | 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 |
||
}} |
}} |
||
− | 上記の場合 [[ |
+ | 上記の場合 [[RFC:3339]] 形式で日付が表示され、起動時に [[PCManFM]] が実行されます。 |
− | {{note|更新間隔をゼロに等しくしたり、"sleep" 行を完全に削除することは、CPU 使用率を大幅に上昇させるので推奨されません ( |
+ | {{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>}} |
||
− | }} |
||
− | アイコン |
+ | アイコンと色のオプションについては、[[dzen]] を参照してください。 |
=== dwm の再起動 === |
=== dwm の再起動 === |
||
102行目: | 153行目: | ||
dwm は通常の Mod-Shift-Q の組み合わせで、他の X ウィンドウを破壊することなく再起動できるようになりました。 |
dwm は通常の Mod-Shift-Q の組み合わせで、他の X ウィンドウを破壊することなく再起動できるようになりました。 |
||
− | 上記のスタートアップスクリプトを別のファイル、例えば {{ic|~/bin/startdwm}} に置き、 |
+ | 上記のスタートアップスクリプトを別のファイル、例えば {{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 |
+ | === 右側の Alt キーを Mod4 にバインドする === |
− | + | 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]] には {{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;}} |
||
=== マウス追随フォーカスの無効化 === |
=== マウス追随フォーカスの無効化 === |
||
− | マウス |
+ | マウスの動作に従うフォーカスを無効にするには、構造体ハンドラーの定義内の次の行をコメントアウトします: |
+ | |||
− | {{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オプション |
+ | {{ic|-C}} オプションを指定して tilda を起動します: |
$ tilda -C |
$ tilda -C |
||
− | これで |
+ | これで、Tilda を設定できるようになりました。次のオプションが推奨事項として提供されます: |
− | {{bc| |
+ | {{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 |
+ | * [https://www.youtube.com/watch?v=GQ5s6T25jCc dwm ビデオの紹介] |
* [[dmenu]] - dwm の開発者が作ったシンプルなアプリケーションランチャー |
* [[dmenu]] - dwm の開発者が作ったシンプルなアプリケーションランチャー |
||
− | * |
+ | * [https://bbs.archlinux.org/viewtopic.php?id=57549/ dwm スレッド] フォーラム |
− | * [https://bbs.archlinux.org/viewtopic.php?id=92895/ |
+ | * [https://bbs.archlinux.org/viewtopic.php?id=92895/ dwm ハッキング スレッド] |
− | * |
+ | * dwm の壁紙は、フォーラムの [https://bbs.archlinux.org/viewtopic.php?id=57768/ wallpaper スレッド] をご覧ください。 |
− | *[https://bbs.archlinux.org/viewtopic.php?id=74599 |
+ | * [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時点における最新版
関連記事
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 チュートリアル を参照してください。
ヒントとテクニック
ステータスバーの設定
ステータスバーのその他の例については、[1] を参照してください。
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
上記の場合 RFC:3339 形式で日付が表示され、起動時に PCManFM が実行されます。
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_R
を Super_L
に再割り当てします:
xmodmap -e "keycode 113 = Super_L"
X が "mod1" グループから除外されていることを確認します。
xmodmap -e "remove mod1 = Super_L"
これを実行すると、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
の以下の行を変更してください:
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.h
で resizehints
を 0 に切り替えます。
これにより、dwm は端末だけでなく、すべてのクライアントウィンドウからのサイズ変更要求を無視します。この回避策の欠点は、一部の端末で再描画の異常 (特にゴーストラインや早まったラインラップなど) が発生する可能性があることです。
または、st ターミナルエミュレータを使用する場合は、anysize パッチを適用して st を再コンパイルします。
参照
- dwm の公式ウェブサイト
- dwm ビデオの紹介
- dmenu - dwm の開発者が作ったシンプルなアプリケーションランチャー
- dwm スレッド フォーラム
- dwm ハッキング スレッド
- dwm の壁紙は、フォーラムの wallpaper スレッド をご覧ください。
- dwm 設定を公開するフォーラムスレッド
- dwm: Tags are not workspaces