跳至內容

dwl

出自 Arch Linux 中文维基

dwl 是一個基於 wlroots 的 Wayland 合成器,在設計理念上與 dwm 相似。它精簡、快速,並且可以通過社區製作的 補丁 進行擴展。默認配置下僅提供最基本的窗口管理功能,足以日常使用;若需更多特性,可按需選用社區補丁。

安裝

dwl 可以通過 dwlAURdwl-gitAUR 軟體包安裝。請在構建和安裝之前完成所需的配置修改,參見 makepkg

提示:上游構建說明 也可參考,但這種方式安裝的文件不會被 pacman 跟蹤。

配置

dwl 通過編輯部分原始碼文件(主要是 config.h)在編譯時進行配置。有關這些設置的詳細信息,請參閱附帶詳細注釋的 config.def.h

官方網站提供了許多 補丁,可以為 dwl 添加額外功能。這些補丁主要修改 dwl.c 文件,並在適當的地方修改 config.h 文件。有關應用補丁的信息,參見文章 給軟體包打補丁

啟用 XWayland

要啟用 Xwayland 支持構建 dwl,請安裝 xorg-xwayland 並將構建文件中的以下行取消注釋:

/path/to/config.mk
# 取消注釋以構建 XWayland 支持
XWAYLAND = -DXWAYLAND
XLIBS = xcb xcb-icccm

用法

dwl 可以從選擇的顯示管理器中啟動,在其提供的菜單中選擇對應的桌面項

要從 getty 啟動 dwl,執行如下命令:

$ dwl

使用 -s 啟動的命令,其標準輸入(stdin)會被 dwl 持續寫入當前的布局、窗口標題、app-id 和標籤等信息。如果您的命令不需要讀取這些標準輸入數據,為避免管道阻塞或產生意外錯誤,請在該命令後追加 <&- 以關閉其標準輸入,例如:

$ dwl -s 'sh /path/to/autostart.sh <&-'

如果使用顯示管理器,可以將此附加到桌面項Exec 行中。

注意:有關 dwl 使用的更詳細信息,請參閱上游 指南

技巧和竅門

讓某些窗口使用浮動布局

對於某些窗口,例如首選項對話框,平鋪並不合適——它們應該自由浮動。例如,要讓 Firefox 的首選項對話框浮動,請將以下內容添加到你的 rules 數組中:

/path/to/config.def.h
static const Rule rules[] = {
...
{ NULL, "Firefox Preferences", 1 << 8, 1, -1 },
...
};

屏幕捕獲

下面的腳本會首先創建一個目錄 /path/to/pics,如果成功,它會使用屏幕捕獲工具截屏並保存為以當前日期為文件名、擴展名為 .png 的文件,存放在該新建的目錄中:

/path/to/scripts/screenshot.sh
#!/bin/sh
mkdir -p /path/to/pics && grim "/path/to/pics/$(date +'%m-%d-%Y-%H%M%S').png"

此外,如果你還想使用選擇框截屏而不是截取所有顯示器,請創建以下腳本:

/path/to/scripts/screenshotsel.sh
#!/bin/sh
mkdir -p /path/to/pics && grim -g "$(slurp)" "/path/to/pics/$(date +'%m-%d-%Y-%H%M%S').png"

如果要截屏並保存到剪貼板而不是文件系統,請創建以下腳本:

/path/to/scripts/screenshotselcopy.sh
#!/bin/sh
grim -g "$(slurp)" - | wl-copy

最後添加以下內容:

/path/to/config.def.h
static const Key keys[] = {
...
{ 0, XKB_KEY_Print, spawn, SHCMD("path/to/scripts/screenshot.sh") },
{ WLR_MODIFIER_SHIFT, XKB_KEY_Print, spawn, SHCMD("path/to/scripts/screenshotsel.sh") },
{ WLR_MODIFIER_CTRL, XKB_KEY_Print, spawn, SHCMD("path/to/scripts/screenshotselcopy.sh") },
...
};

這將屏幕捕獲映射到 Print 鍵,選擇框截屏映射到 Shift+Print,而截屏並複製到剪貼板映射到 Ctrl+Print

注意:
  • 如果在 dwl 構建中打了層動畫補丁,可能需要為 slurp 禁用這些動畫,因為 grim 最終會同時捕獲選擇器邊框。
  • 以上所有腳本都需要可執行權限,請確保已設置。此外,它們有一些依賴,請安裝 grimslurpwl-clipboard 才能正常工作。

調整音量

安裝 pipewire-pulsepulseaudio,然後添加以下音量管理選項:

/path/to/config.def.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, XKB_KEY_XF86AudioRaiseVolume, spawn, {.v = up_vol } },
{ 0, XKB_KEY_XF86AudioLowerVolume, spawn, {.v = down_vol } },
{ 0, XKB_KEY_XF86AudioMute, spawn, {.v = mute_vol } },
...
};

自啟動

有一個 補丁 可用,它允許你自啟動指定的應用程式。示例如下:

/path/to/config.def.h
/* 自啟動 */
static const char *const autostart[] = {
    "wbg", "/path/to/your/image", NULL,
    NULL /* 終止 */
};

你可以通過向列表中添加更多條目來指定更多應用程式,每個條目用逗號(,)分隔,後跟 NULL。例如,你可以啟動狀態欄、通知守護進程或任何後台服務。只需確保每個命令及其參數正確引用即可。

更好的滑鼠大小調整

默認情況下,調整大小時 dwl 會將光標移到右下角,通過一個 補丁 可以改變這一行為。

該補丁允許你配置窗口調整大小行為,使其更靈活,替代默認的跳轉到右下角,它提供了多種模式:

  • 將光標移動到選定的角落。
  • 在調整大小時鎖定光標位置。
  • 完全禁用光標跳轉。
  • 相對角落調整大小,此時光標距離哪個角最近,就使用哪個角進行調整。

該補丁的一個工作配置示例如下:

path/to/config.def.h
/* resize_corner:
 * 0: 左上
 * 1: 右上
 * 2: 左下
 * 3: 右下
 * 4: 距離光標最近的角
 */
static const int resize_corner = 4;
static const int warp_cursor = 0;	/* 1: 跳轉到角落, 0: 不跳轉 */
static const int lock_cursor = 0;	/* 1: 鎖定光標, 0: 不鎖定 */

這樣,調整大小時將選擇距離光標最近的角落,光標不會跳轉,並且光標不會鎖定自身位置。

故障排除

修復 Java 應用程式行為異常

參見 Java#灰色窗口/應用不隨窗口管理器調整大小/菜單自動關閉

修復終端窗口周圍的間隙

如果終端窗口外存在桌面空白間隙,很可能是因為終端的字體大小所致。可以調整字體大小直到找到能消除間隙的理想尺寸,或者將 config.h 中的 resizehints 切換為 0

這會導致 dwl 忽略所有客戶端窗口的調整大小請求,而不僅僅是終端。此變通方法的缺點是某些終端可能會出現重繪異常,例如顯示殘影(殘留線條)和提前換行等問題。

另外,如果你使用 st 終端模擬器,可以應用 anysize 補丁並重新編譯 st。

參見