ฉันพยายามเรียกใช้โปรแกรม RealTimeSync เมื่อระบบกลับมาทำงานต่อจากโหมดสลีปโดยใช้สคริปต์ที่อยู่ใน /lib/systemd/system-sleep/
ในไฟล์ RealTimeSync_kill_suspend.sh
โดยมีเนื้อหาดังนี้
#!/bin/sh
กรณี $1 ใน
ก่อน)
echo "$(วันที่) - $1: ฆ่า RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
ฆ่า -9 `ps -aux | pgrep RealTimeSync`
ทางออก
;;
โพสต์)
echo "$(วันที่) - $1: เรียกใช้สคริปต์ดำเนินการต่อ RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
sh /home/bart/Applications/FreeFileSync/RealTimeSync_resume.sh
;;
เอสแซค
ฉันรู้ว่ามันรันสคริปต์ย่อย 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 ควรทำงานอยู่" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
ทางออก
ขณะที่มันลากเส้นหลังจากทั้งคู่ เสียงสะท้อน
ข้อความใน RealTimeSync_kill_suspend.sh
สคริปต์และบรรทัดหลังทั้งคู่ เสียงสะท้อน
งบใน RealTimeSync_resume.sh
สคริปต์ย่อยลงในล็อกไฟล์ suspend_resume.log
:
czw 5 กันยายน 2021 16:55:50 CEST - ก่อน: Killing RealTimeSync
czw, 5 กันยายน 2021, 16:55:58 CEST - โพสต์: การเรียกใช้สคริปต์ดำเนินการต่อ RealTimeSync
czw 5 กันยายน 2021 16:55:58 CEST - กำลังรัน RealTimeSync
czw, 5 กันยายน 2021, 16:56:28 CEST - RealTimeSync ควรทำงานอยู่
แต่เมื่อฉันมองหากระบวนการด้วย 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 วินาที 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 ต้องการบริการบางอย่างที่เปิดใช้งานเมื่อเข้าสู่ระบบซึ่งไม่สามารถใช้งานได้ ตัวอย่างเช่น ผู้ที่มีปัญหากับการรันสคริปต์ที่เริ่มซิงค์ไคลเอนต์จำเป็นต้องใช้เซิร์ฟเวอร์ X เพื่อเชื่อมต่อกับ:
ประกาศ -x DISPLAY=":0.0"
ประกาศ -x XAUTHORITY="/home/<ผู้ใช้ของคุณ>/.Xauthority"
Synclient VertEdgeScroll=1 VertTwoFingerScroll=1 HorizTwoFingerScroll=1 HorizEdgeScroll=1
จากกระทู้ฟอรัมนี้: https://ubuntuforums.org/showthread.php?t=2380045
ฉันจะขอบคุณสำหรับความช่วยเหลือใด ๆ
แก้ไข 1
ฉันพบว่า "FreeFileSync และ ReadTimeSync ต้องการเข้าถึงจอแสดงผลกราฟิก X11 ดังนั้นจึงไม่สามารถทำงานผ่านโหมดระบบได้ ในโหมดผู้ใช้ systemd รู้เกี่ยวกับเซสชันกราฟิกของผู้ใช้และใช้งาน" ดังนั้นจึงมีวิธีแก้ปัญหาที่เป็นไปได้ 2 วิธี:
อย่างใดอย่างหนึ่งที่กล่าวถึงข้างต้น ฮาร์ดโค้ด แสดง
และ 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
กรณี $1 ใน
ก่อน)
echo "$(วันที่) - $1: ฆ่า RealTimeSync" >> /home/bart/Applications/FreeFileSync/suspend_resume.log
ฆ่า -9 `ps -aux | pgrep RealTimeSync`
ทางออก
;;
โพสต์)
echo "$(date) - เรียกใช้สคริปต์ดำเนินการต่อ RealTimeSync" >> /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
;;
เอสแซค
และตั้งค่าเจ้าของสคริปต์นี้เป็นรูท: chown รูท: รูท <script_name>
วิธีแก้ไขมาจากที่นี่: เริ่มสคริปต์หลังจากดำเนินการต่อในฐานะผู้ใช้ที่เข้าสู่ระบบ (ไม่ใช่รูท)
ตามที่ฉันเข้าใจแล้วนี่เป็นวิธีที่ดีกว่าวิธีแก้ปัญหาที่เหมาะสมเช่นฮาร์ดโค้ด แสดง
อาจก่อให้เกิดปัญหา แต่ใช้งานได้ชั่วคราว ในกรณีที่ใครรู้วิธีเรียกใช้สิ่งนี้อย่างถูกต้องในฐานะผู้ใช้ที่ไม่ได้รูท ฉันจะขอบคุณสำหรับคำแนะนำ