【问题标题】:Bind keyboard shortcut to bash function to interrupt sleep?将键盘快捷键绑定到 bash 功能以中断睡眠?
【发布时间】:2021-10-09 19:16:08
【问题描述】:

我有一组 .jpg 背景图像,我想将它们用作 i3-gaps 桌面的背景。目前,我的 i3 配置文件中有这两行用于我的壁纸。

exec --no-startup-id randomwallpaper
bindsym $mod+i exec --no-startup-id feh --bg-scale --randomize /home/user/Pictures/bgart/*.jpg

这是我的随机壁纸脚本。它使用 feh 来设置图像并使用 wal 来创建基于它的颜色方案。

#!/bin/bash
cd /home/user/Pictures/bgart
for file in $(ls); do
        shopt -s nullglob
        for i in *.jpg; do
                feh --bg-scale --randomize /home/user/Pictures/bgart/$i
                wal -q -i $i
                sleep 300
        done
done

在启动时,随机壁纸会启动,并且每 5 分钟壁纸会随着配色方案而变化。不过,我也可以按 Win+I 手动切换到随机壁纸。是否可以添加某种触发器来中断循环?也许将脚本作为一个函数并添加一个键来调用它?这样,我可以运行上面的脚本,如果我厌倦了壁纸,我可以用 Win+I 切换到另一个,5 分钟后仍然可以改变它。

【问题讨论】:

    标签: bash triggers keyboard keyboard-shortcuts i3


    【解决方案1】:

    除非你用内置的 sleep 修改了你的 bash,否则你可以终止 sleep 命令。然后脚本将继续执行下一个命令,就好像sleep 正常终止一样。唯一棘手的部分是确定要杀死的正确进程。这里我假设你的系统上只有一个randomwallpaper 进程在运行:

    exec --no-startup-id randomwallpaper
    bindsym $mod+i exec --no-startup-id sh -c 'pkill -P $(pgrep -ox randomwallpaper) sleep'
    

    顺便说一句;您的脚本可能需要一些改进。例如,变量file 未使用,--randomize 没有任何效果,因为您只提供了一张图片。

    #!/bin/bash
    shopt -s nullglob
    cd /home/user/Pictures/bgart
    while true; do
      i=$(shuf -en1 ./*.jpg)
      if [ -n "$i" ]; then
        feh --bg-scale "$i"
        wal -q -i "$i"
      fi
      sleep 300
    done
    

    【讨论】:

    • 这似乎正是我所需要的,谢谢。是的,我的脚本大致改编自一个类似的脚本,感谢改进。
    • 实际上,keybind 似乎正在杀死睡眠过程,但 wal 并没有将颜色方案更改为新图像。打开一个新终端仍然具有第一张图像的配色方案。不知道为什么没关系,只是速度很慢。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多