从暂停状态恢复后通过脚本运行程序

从暂停状态恢复后通过脚本运行程序

我尝试在系统从睡眠状态恢复时使用位于/lib/systemd/system-sleep/文件中的脚本运行程序 RealTimeSync RealTimeSync_kill_suspend.sh,其内容如下:

#!/bin/sh

case $1 in
        pre)
                echo "$(date) - $1: Killing RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                kill -9 `ps -aux | pgrep RealTimeSync`
                exit
                ;;
        post)
                echo "$(date) - $1: Invoking RealTimeSync resume script" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh
;;
esac

RealTimeSync_resume.sh我知道它执行以下内容的子脚本:

#!/bin/sh

echo "$(date) - Running RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

/home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real &

echo "$(date) - RealTimeSync should be running" >> /home/bart/Applications/FreeFileSync/suspend_resume.log

exit

因为它将脚本echo中两个语句后面的行RealTimeSync_kill_suspend.sh以及子脚本echo中两个语句后面的行删除RealTimeSync_resume.sh到日志文件中suspend_resume.log

czw, 5 sie 2021, 16:55:50 CEST - pre: Killing RealTimeSync
czw, 5 sie 2021, 16:55:58 CEST - post: Invoking RealTimeSync resume script
czw, 5 sie 2021, 16:55:58 CEST - Running RealTimeSync
czw, 5 sie 2021, 16:56:28 CEST - RealTimeSync should be running

但是当我查找该过程时,ps -aux | grep RealTimeSync它没有显示任何适当的匹配,只是:

bart       31262  0.0  0.0  12252  2612 pts/0    S+   17:38   0:00 grep --color=auto RealTimeSync

当我使用 运行子脚本时,sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh我得到了正确的运行过程ps -aux | grep RealTimeSync

bart       31066  0.0  0.0    212    68 pts/0    S    17:37   0:00 /home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real
bart       31071  0.3  0.1 442428 41260 pts/0    Sl   17:37   0:00 /home/bart/Applications/FreeFileSync/Bin/RealTimeSync_x86_64 /home/bart/Documents/Documents_backup.ffs_real
bart       31262  0.0  0.0  12252  2612 pts/0    S+   17:38   0:00 grep --color=auto RealTimeSync

所有提到的文件都有-rwxr-xr-x权限。

在论坛中搜索后,我发现 RealTimeSync 需要一些在登录时激活的服务,但该服务不可用,例如,在运行启动 synclients 的脚本时遇到问题的人需要连接到 X 服务器:

declare -x DISPLAY=":0.0"
declare -x XAUTHORITY="/home/<your user>/.Xauthority"
synclient VertEdgeScroll=1 VertTwoFingerScroll=1 HorizTwoFingerScroll=1 HorizEdgeScroll=1

来自该论坛主题:https://ubuntuforums.org/showthread.php?t=2380045

如能得到任何帮助我将非常感激。

编辑1

我发现“FreeFileSync 和 ReadTimeSync 需要访问图形 X11 显示,因此它们不能通过系统模式运行。在用户模式下,systemd 知道用户图形会话并使用它。”因此可能有两种解决方案:

上述任何一种,硬编码DISPLAYXAUTHORITY,都不鼓励,因为 DISPLAY 值可能在不同会话之间有所不同。

或者作为用户服务运行,而不是系统服务,因为显示是为用户初始化的。

我在这里找到了这个,对运行 FreeFileSync 作为系统服务进行故障排除:https://unix.stackexchange.com/questions/529115/system-service-error-unable-to-initialize-gtk-is-display-set-properly

不幸的是我在实施这些解决方案时遇到了问题,如能得到任何帮助我将不胜感激。

编辑2

好的,我成功了!我现在从主脚本运行 RealTimeSync,虽然我猜这没什么区别,但重要的是按如下方式初始化“DISPLAY”:

#!/bin/sh

case $1 in
        pre)
                echo "$(date) - $1: Killing RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                kill -9 `ps -aux | pgrep RealTimeSync`
                exit
                ;;
        post)
                echo "$(date) - Invoking RealTimeSync resume script" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
                env DISPLAY=:1 sudo -u bart /home/bart/Applications/FreeFileSync/RealTimeSync /home/bart/Documents/Documents_backup.ffs_real
;;
esac

并将该脚本的所有者设置为root:chown root:root <script_name>

解决方案来自这里:以登录用户(非 root)身份恢复后启动脚本

据我所知,这只是一种变通方法,而不是正确的解决方案,因为硬编码DISPLAY可能会带来问题,但暂时有效。如果有人知道如何以非 root 用户身份正确运行此程序,我将不胜感激。

相关内容