一个睡眠提醒小工具

之前有段时间太累,但一到晚上又很精神,思绪也比较活跃,很容易就把时间抛到脑后了。第二天是周末还好,可以睡晚点。但如果是工作日,很容易睡眠不足。经历了几次身体不适之后,决定写个脚本,提醒自己睡觉。 晚上通常都是使用电脑,且系统是 Linux,很容易想到使用定时器来做这件事。粗暴一点的做法是直接用定时器在特定时间进行提醒,但缺点也很明显,如果系统锁屏了但未休眠,那么定时任务依旧会在安排的时间点执行。最终决定写个脚本配合定时器一起运行。 首先要解决的是如何判断当前系统的锁屏状态。当前的系统桌面是 Gnome + Wayland,往这个方向搜索得到的结果不是很清晰,有些方法是过时的。最终测试下来,使用 dbus-send 的方式最靠谱。使用以下命令可判断系统是否锁屏: # If it is locked, boolean true will be print dbus-send --session --print-reply --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.GetActive | grep 'boolean true' 然后就是确定提醒的时间点了。不同时间点,提醒的内容的应该有区别。这个比较简单,获取当前系统时间,跟设置的时间点进行比较即可。通知工具使用 notify-send,很方便。 只是简单地通知的话,感觉可能没啥效果,于是想到加上强制休眠的时间点,最后做成了 systemd 的定时器,放在这里:bedtime-reminder。 实际使用了一段时间,效果挺好的,但基本上是卡点睡觉。等适应后,可以把时间调早一点。但通知的作用不大,最后靠的是强制休眠。果然还是 deadline 最有效。

2023-04-09 · 1 分钟 · 37 字

在终端中使用 OCR

最近比较常用到 OCR 的功能,主要用的是 tesseract,再搭配终端访问剪贴板内容和一些其他工具,整体体验很流畅。 首先需要安装 tesseract,Arch 下可一条命令解决:sudo pacman -S tesseract tesseract-data-chi_sim tesseract-data-eng,后两个是语言数据,chi_sim 和 eng 分别对应简体中文和英文。然后搭配 xclip 或 wl-paste 就可以食用了: # tesseract usage: `tesseract FILE OUTPUTBASE [...]` # If FILE is stdin or - then the standard input is used. # If OUTPUTBASE is stdout or - then the standard output is used. xclip -selection clipboard -t image/png -o|tesseract stdin stdout -l chi_sim+eng # on Wayland, you can yuse wl-paste: wl-paste -t image/png|tesseract -l chi_sim stdin stdout 为什么需要指定 MIME 类型?Linux 下剪贴板有多种类型(selection),主要包括 PRIMARY、CLIPBOARD 和 SECONDARY,常用的是 PRIMARY 和 CLIPBOARD。...

2023-03-12 · 2 分钟 · 229 字