
次の内容の/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 はユーザーのグラフィカル セッションを認識して使用します。」ということがわかりました。そのため、2 つの解決策が考えられます。
上記のいずれか、ハードコーディングDISPLAY
、はXAUTHORITY
、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 ではなくユーザーとして適切に実行する方法を知っている方がいらっしゃいましたら、ヒントをいただければ幸いです。