我在跑步
- arch linux 6.4.2-arch1-1 和
- openbox wm v3.6.1 带有
- Tint2 栏版本 17.0.2 和
- systemd v253.5-2-arch
一切都是最新的。
在我的tint2栏上,我显示与时间相关的信息,例如天气等。
我不希望tint2栏每隔几秒更新一次,因为这会使用太多的系统资源,并且我可能会因为过于频繁地轮询新数据而被禁止访问天气网站等。
所以我将tint2设置为每小时更新一次,这似乎很合理。
然而,当我使笔记本电脑进入睡眠状态并重新打开它时,tint2 在我获得互联网连接之前启动,因此它会在能够收集信息更新(例如天气)之前刷新。
谁能建议我在不睡觉后如何让tint2立即重新启动后检测互联网连接。
所以想要
- 执行以下任一操作:取消睡眠、重新启动、开机、取消休眠
- 检测到互联网连接后,重新启动tint2(这样它将有例如新鲜的天气报告,而不是无用的旧报告)
我认为这可能涉及一个利用systemd
.
这是我到目前为止所拥有的:
我创建了一个名为 的 systemd 服务文件restart_tint2.service
并将其放入/etc/systemd/system/
其中。
[Unit]
Description=This service runs once only after the arch linux laptop is 1 turned on after suspend 2 re-booted 3 turned on after being switched off 4 turned on after being hibernated
After=suspend.target
[Service]
Type=oneshot
ExecStart=/home/$USER/Dropbox/linux_config/script_tint2_restart_after_sleep/restart_tint2.sh
[Install]
WantedBy=suspend.target
哪个指向这个脚本......
#!/bin/bash
# function to check internet connectivity
check_internet() {
ping -c 1 8.8.8.8 >/dev/null 2>&1
}
# function to restart tint2
restart_tint2() {
if pgrep -x "tint2" >/dev/null; then
pkill -x "tint2"
fi
sleep 1
tint2 & disown
}
# check internet connectivity
check_internet
# if internet is not available, wait and check again
while [ $? -ne 0 ]; do
sleep 5
check_internet
done
# restart tint2 after internet connection is detected
restart_tint2
exit 0
当我暂停笔记本电脑并使用电源按钮重新唤醒它后,它会杀死tint2,但不会重新启动它。
不知道我哪里出错了。
对实现这一目标的任何方式都持开放态度。
答案1
创建一个名为 systemd 服务的文本文件restart_tint2.service
并将其放入/etc/systemd/system/
此内容中
[Unit]
Description=This service runs once only after the arch linux laptop is 1 turned on after suspend 2 re-booted 3 turned on after being switched off 4 turned on after being hibernated
After=suspend.target hibernate.target
[Service]
Type=oneshot
# point to the location of the script given below
ExecStart=/home/$USER/Dropbox/linux_config/script_tint2_restart_after_sleep/restart_tint2.sh
[Install]
WantedBy=suspend.target
restart_tint2.sh
当满足条件时,上面的服务文件将调用以下脚本(称为 this )
#!/bin/bash
# function to check internet connectivity
check_internet() {
ping -c 1 8.8.8.8 >/dev/null 2>&1
}
# function to restart tint2
restart_tint2() {
# the below is the only solution that works,
# both killing, then re-starting tint2
killall -SIGUSR1 tint2
}
# check for internet connectivity
check_internet
# if internet is not available, wait and check again
while [ $? -ne 0 ]; do
sleep 5
check_internet
done
# restart tint2 after internet connection is detected
restart_tint2
exit 0
就是这样,工作解决方案