Đặt hình nền một cách đơn giản

20250204 #tech #linux #coding

wal là một shell script mà mình viết ra trong một lần muốn thay hình nền X11. Mọi người thường dùng nitrogen, feh hoặc tùy chọn trong menu cài đặt của desktop environment mà họ đang dùng.

Những phương pháp trên đối với mình là hơi phức tạp và không cần thiết, vì quy cho cùng chúng ta chỉ cần một vài lệnh đơn giản mà thôi. Ngược lại dùng lệnh feh thôi thì hơi ít chức năng.

Bạn có thể tải wal về tại repo dotfiles của mình. Hoặc bằng lệnh dưới đây:

curl "https://gitlab.com/khiemtu27/dotfiles/-/raw/master/bin/wal" -o wal
chmod +x ./wal

Yêu cầu

Đầu tiên bạn cần một thư mục chứa hình nền, lưu ý là thư mục này chỉ được chứa hình ảnh thôi nhé. Vì không muốn wal bị phức tạp, mình đã không viết chức năng lọc các file không phải hình ảnh.

Thứ hai là bạn cần xwallpaper, một tool cực kì đơn giản để đặt hình nền môi trường X11. wal cũng có thể dùng với Wayland, với điều kiện phải dùng lệnh wbg thay cho xwallpaper.

Với Void Linux, lệnh xwallpaper có thể được cài đặt như sau.

sudo xbps-install -S xwallpaper

Cuối cùng hãy mở wal bằng một trình sửa văn bản, thay thế các biến WALL_DIR, CURRENT_WALL, WALL_LIST theo ý bạn.

Cơ chế hoạt động

Lệnh hay dùng nhất là wal change. Khi chạy lệnh này lần đầu, wal sẽ tạo một file danh sách hình nền (mặc định lưu tại $HOME/.local/share/wall_list). File này là danh sách xáo trộn (shuffle) các file có trong $WALL_DIR.

Sao lại phải tạo file danh sách?

Lúc đầu mình chỉ dùng lệnh xwallpaper phối hợp với kết quả trả ra từ shuf trông như sau:

xwallpaper --zoom "$(shuf -n1 -e $HOME/pictures/wallpapers/*)"

Lệnh shuf nhận các tùy chọn:

Ban đầu thì thấy cũng vừa ý, nhưng sau một thời gian mình nhận ra khi thư mục chứa ít hình, lệnh shuf thường xuyên lặp lại kết quả. Khiến lệnh này nhiều khi không có tác dụng như ý (đổi hình nền).

Do đó để đảm bảo mọi file chỉ được đặt làm hình nền một lần, mình đã dùng lệnh shuf để tạo ra một bản xáo trộn tên các file và sẽ xóa khỏi danh sách sau khi đặt làm hình nền, đảm bảo chúng chỉ nhắc đến một lần.

Tại sao phải dùng ln -sf?

Tương tự như trên, chúng ta có thể dùng lệnh xwallpapershuf để thực hiện việc thay đổi hình nền ngẫu nhiên. Thế nhưng một vài trường hợp, mình chỉ muốn đặt lại hình nền cũ thay vì thay đổi.

Việc tạo một link thay vì đặt hình nền trực tiếp giúp mình khôi phục hình nền cũ dễ dàng, thay vì mất công lục lại tấm hình mình ưng ý.

Ví dụ sau khi dạo qua các hình nền bằng lệnh wal change, mình tìm được tấm ưng ý và muốn lần tới khởi động, tấm này vẫn sẽ được đặt làm hình nền. Chả lẽ phải lục xem file tên gì, rồi dùng xwallpaper đặt hình nền một cách thủ công?

Tạo link như thế này giúp file hình nền lúc nào cũng chỉ có một ($HOME/.local/share/wallpaper), khi đã tìm được hình nền ưng ý thì chỉ cần dùng lệnh wal restore để đặt lại hình nền cũ.

Dùng ở đâu?

Trong sxrc, trình khởi động X11, mình có một dòng lệnh wal restore để đặt hình nền ngay khi khởi chạy X11.

Ngoài ra mình còn gán wal change vào phím Super+Crtl+w.


Bài viết liên quan