dwm là trình quản lý cửa sổ của Suckless. Tính đến nay mình dùng dwm được tầm một năm rưỡi, cũng có bỏ túi được tí kinh nghiệm. Bài viết này sẽ ghi lại quá trình mình setup dwm của mình.
Cài đặt gói cần thiết
Trước hết ta cần một môi trường linux đủ các "gói cần thiết" (dependencies) để dwm hoạt động. Trên Void Linux mình dùng lệnh sau:
sudo xbps-install -S git curl base-devel libX11-devel libXft-devel libXinerama-devel
Nếu máy không có nhiều màn hình, bạn có thể comment hoặc xóa hai dòng sau trong config.mk
và không cần cài đặt libXinerama-devel
.
Thư viện này giúp dwm hỗ trợ đa màn hình, nếu không cần, xóa đi cho gọn!
# XINERAMALIBS = -lXinerama
# XINERAMAFLAGS = -DXINERAMA
Tải mã nguồn
Để tải mã nguồn dwm về máy, bạn có thể dùng lệnh sau:
git clone https://git.suckless.org/dwm
mkdir dwm/patches
cd dwm
Cài đặt patch
Mình đã giải thích về khái niệm bản vá trong Suckless - Vá phần mềm.
Pertag
Bạn có thể hiểu tag trong dwm gần giống như workspace hay màn hình ảo (virtual desktop). Patch này giúp những tùy chỉnh về số lượng master, layout... sẽ được lưu ở mỗi tag thay vì đồng bộ chúng như mặc định dwm làm. Nghĩa là sau khi cài patch này, ta có thể để tag 1 ở layout tile và tag 2 ở layout monocle.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/pertag.diff -o patches/pertag.diff
patch -i ./patches/pertag.diff
Sticky
Patch này cho phép ta gán phím tắt để chuyển cửa sổ bình thường thành cửa sổ "dính". Cửa sổ dính sẽ theo ta cho dù ta ở tag nào đi nữa. Thích hợp dùng chung với chức năng "Picture-in-picture" của trình duyệt web.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/sticky.diff -o patches/sticky.diff
patch -i patches/sticky.diff
Save floats
Patch này lưu vị trí float của cửa sổ khi bạn chuyển đổi qua lại float-tiling.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/save-floats.diff -o patches/save-floats.diff
patch -i patches/save-floats.diff
Hide vacant tags
Patch này sẽ ẩn các tags trống (không chứa cửa sổ nào), làm gọn gàng thanh trạng thái!
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/hide-vacant-tags.diff -o patches/hide-vacant-tags.diff
patch -i patches/hide-vacant-tags.diff
Remove border
Ẩn viền cửa sổ (border) khi chỉ có một cửa sổ trên màn hình.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/remove-border.diff -o patches/remove-border.diff
patch -i patches/remove-border.diff
Always center
Cửa sổ floating khi bật sẽ luôn nằm ngay giữa màn hình thay vì góc trên cùng bên trái.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/always-center.diff -o patches/always-center.diff
patch -i patches/always-center.diff
Shift tools
Patch này thêm chức năng để di chuyển cửa sổ qua lại giữa các tags. Giống như Alt+Tab trên Windows, nhưng thay vì chuyển cửa sổ, ta chuyển tag.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/shift-tools.diff -o patches/shift-tools.diff
patch -i patches/shift-tools.diff
Monocle symbol
Mặc định biểu tượng layout (bên phải dãy tags) hiển thị số cửa sổ đang mở trong tag hiện tại. Patch này khiến vùng này chỉ hiện biểu tượng của monocle layout thôi.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/monocle-symbol.diff -o patches/monocle-symbol.diff
patch -i patches/monocle-symbol.diff
Gỡ bỏ thanh tiêu đề
Gỡ bỏ hoàn toàn hiển thị tên cửa sổ trên thanh trạng thái.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/notitle.diff -o patches/notitle.diff
patch -i patches/notitle.diff
Gỡ ràng buộc với dmenu
Mặc định trong file cài đặt của dwm (config.def.h) có các biến và cài đặt như dmenufont
, dmenumon
, dmenucmd
.
Ngoài ra trong dwm.c
cũng có nhắc đến dmenu
.
Patch này gỡ bỏ hoàn toàn dmenu
khỏi mã nguồn của dwm.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/nodmenu.diff -o patches/nodmenu.diff
patch -i patches/nodmenu.diff
Chiều cao thanh trạng thái
Trước đây mình dùng patch statuspadding để thay đổi chiều cao cũng như căn lề của thanh trạng thái.
Nhưng suy nghĩ lại, việc vào config.h để tùy chỉnh cũng không khác gì vào dwm.c
.
Cài thêm một patch chỉ làm tăng khả năng mâu thuẫn với các patches khác.
Do đó mình quyết định nếu có muốn tùy chỉnh chiều cao thanh trạng thái, mình sẽ vào dwm.c
và thay đổi dòng này:
bh = drw->fonts->h + 2;
Mình thay đổi phần + 2
để thay đổi chiều cao thanh trạng thái.
Mình thấy + 6
là ổn nhất. Do đó, biến bh
của mình sẽ trông như sau.
bh = drw->fonts->h + 6;
Màu sắc
Để thuận tiện cho việc thay đổi giao diện của dwm, cụ thể là màu sắc thanh trạng thái và viền cửa sổ. Mình thường không thay đổi từng màu trong config.h mà sẽ tạo riêng lẻ từng file màu sắc riêng và chỉ cần thay đổi một dòng trong config.h là đã có thể thay đổi tất cả các màu của dwm.
curl https://gitlab.com/khiemtu27/dwm/-/raw/master/patches/colors.diff -o patches/colors.diff
patch -i patches/colors.diff
Mẫu các bảng màu bạn có thể xem tại đây.
Thành quả!
Thế là sau khi cài đặt các patches, chúng ta đã có một dwm "đầy đủ" chức năng rồi. Phần còn lại chỉ là tùy chỉnh file config.h, thêm các phím tắt, thay đổi màu sắc, font... sau đó xóa file config.h và cài đặt dwm lên máy của mình là xong.
Các bước cài đặt bạn có thể tìm hiểu tại đây.