You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绑定快捷键中断bash脚本sleep周期实现i3-gaps壁纸即时切换

实现i3手动切换壁纸重置自动更换计时的方案

完全可以通过Linux原生信号机制实现,不需要复杂的函数封装,方案如下:

1. 优化randomwallpaper脚本,添加信号捕获逻辑

你原脚本的嵌套循环存在逻辑冗余,优化后脚本如下,新增了SIGUSR1信号捕获逻辑,收到信号即可中断当前等待,立即进入下一轮壁纸更换:

#!/bin/bash
shopt -s nullglob
WALLPAPER_DIR="/home/user/Pictures/bgart"
cd "$WALLPAPER_DIR" || exit 1

# 信号处理函数:收到手动切换信号时跳过当前等待
handle_manual_trigger() {
    :
}
trap handle_manual_trigger SIGUSR1

while true; do
    # 随机选择单张壁纸
    random_wall=$(ls *.jpg | sort -R | head -n 1)
    # 应用壁纸+生成配色
    feh --bg-scale "$random_wall"
    wal -q -i "$random_wall"
    # 后台休眠+等待,可被信号中断
    sleep 300 &
    wait $!
done

2. 修改i3配置的按键绑定

原按键绑定仅调用feh换壁纸,会遗漏wal配色更新,修改为向运行中的randomwallpaper进程发信号即可:

# 开机启动自动壁纸更换脚本
exec --no-startup-id randomwallpaper
# Win+I手动触发壁纸切换,同时重置自动更换计时
bindsym $mod+i exec --no-startup-id pkill -SIGUSR1 -f randomwallpaper

生效操作

  • 给修改后的randomwallpaper脚本添加执行权限:chmod +x /path/to/randomwallpaper
  • 重载i3配置:按下$mod+Shift+C即可生效

注:该方案所有壁纸更换逻辑统一在单个脚本中维护,自动切换和手动切换都会同步更新wal配色,不存在逻辑不一致的问题,额外资源消耗几乎为0。

内容的提问来源于stack exchange,提问作者ZackT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:54:03