在笔记本电脑取消睡眠并检测到互联网连接后,如何重新启动tint2?

在笔记本电脑取消睡眠并检测到互联网连接后,如何重新启动tint2?

我在跑步

  • 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

就是这样,工作解决方案

相关内容