Score:0

วิธีเริ่มสคริปต์ในฐานะรูทด้วย DISPLAY=:0

ธง jp

ฉันมีสคริปต์ควรรันด้วยสิทธิ์รูทและควรใช้ display (opencv imshow ในนั้นด้วย) ฉันจะเรียกใช้สคริปต์นั้นเมื่อรีบูตได้อย่างไร

ฉันลองด้วยไฟล์ my.sh:

ส่งออก DISPLAY=:0
/usr/bin/python3 /path/to/myscript.py

โครงาน:

@รีบูต /bin/bash /path/to/my.sh

ยังไงก็ไม่เริ่ม

คุณช่วยฉันได้ไหม?

user10489 avatar
in flag
ตรวจสอบกล่องจดหมายของรูทเพื่อหาข้อผิดพลาดจาก cron และอาจเพิ่มข้อผิดพลาดเหล่านั้นในคำถามของคุณหรือไม่ สมมติว่าคุณลงชื่อเข้าใช้คอนโซลในฐานะผู้ใช้ที่ไม่ใช่รูท คุณอาจต้องใช้ xauth เพื่อคัดลอกคุกกี้แสดงผลของคุณไปยังบัญชีรูท หรือเรียกใช้สคริปต์ใน cron เป็นผู้ใช้เดียวกันกับที่เข้าสู่ระบบ
Hakan Ulusoy avatar
jp flag
ฉันกำลังเข้าสู่ระบบในฐานะรูท crontab ยังเป็นราก สงสัยหลักของฉันคือ ส่งออก DISPLAY ฉันเรียกใช้ sh นั้นในฐานะรูทจาก ssh ไม่ทำงานเช่นกัน กลับไม่สามารถเชื่อมต่อจอแสดงผลได้ อย่างไรก็ตาม ถ้าฉันรัน sh ในฐานะผู้ใช้ มันก็ใช้ได้ (ไม่มีสิทธิ์รูท เพิ่มข้อผิดพลาดอีกครั้ง)
user10489 avatar
in flag
คุณลงชื่อเข้าใช้คอนโซลกราฟิกในเวลาเดียวกันกับที่คุณใช้ ssh หรือไม่ ถ้าเป็นเช่นนั้น เป็นผู้ใช้รายใด?
user10489 avatar
in flag
เมื่อคุณเข้าสู่ระบบด้วย ssh คุณคาดหวังให้สคริปต์ทำงานบนจอแสดงผลในเครื่องของคุณ หรือจอแสดงผลบนเครื่องที่คุณใช้ ssh เพื่อเข้าถึง
Hakan Ulusoy avatar
jp flag
จริงๆแล้วมันเปลี่ยนไป บางครั้งเข้าสู่ระบบบางครั้งไม่ได้ แต่ผู้ใช้เหมือนกันมีผู้ใช้เพียงคนเดียวเท่านั้น คุณหมายถึง คุณไม่สามารถใช้ display จาก ssh หรือ cronjob ได้จนกว่าผู้ใช้จะล็อกอินและเริ่ม xsession?
user10489 avatar
in flag
คุณไม่สามารถเปิดหน้าต่างในเซสชั่นที่ไม่มีอยู่ได้ หากคุณต้องการแสดงหน้าต่างในเซสชันภายในเครื่องของคุณแทนที่จะเป็นเซสชัน (อาจไม่มีอยู่จริง) บนเครื่องระยะไกล คุณไม่ควรไปยุ่งกับ DISPLAY
Score:1
ธง cn
raj

คุณไม่สามารถรันงานที่รันอยู่ @รีบูต ด้วยการแสดงผลกราฟิกเนื่องจากในขณะที่ระบบบู๊ตยังไม่มีการแสดงกราฟิกและทำงาน

คุณควรเพิ่มสคริปต์นั้นใน "โปรแกรมเริ่มต้น" ของเซสชันเดสก์ท็อปของคุณ สำหรับการรันในฐานะรูท วิธีการที่เข้าใจผิดได้มากที่สุดในการรันสคริปต์ในฐานะรูทสำหรับฉันคือการใช้ a กระดาษห่อไบนารี นั่นคือราก setuid

เขียนโปรแกรมภาษาซีสั้นๆ ต่อไปนี้ (เรียกว่า กระดาษห่อ.ค ตัวอย่างเช่น):

#รวม <stdio.h>
#รวม <stdlib.h>
#รวม <sys/types.h>
#รวม <unistd.h>
#รวม <sys/wait.h>

int หลัก ()
{
   int rc;
   เซทูอิด( 0 );
   rc=WEXITSTATUS(ระบบ( "/เส้นทาง/ถึง/ของคุณ/สคริปต์" ));
   ทางออก (rc);
}

รวบรวมโปรแกรมโดยใช้: gcc -o กระดาษห่อ wrapper.c (คุณจำเป็นต้องมี สิ่งจำเป็นในการสร้าง ติดตั้งแพ็คเกจสำหรับสิ่งนั้น)

ทำให้ กระดาษห่อ ไฟล์ setuid root: sudo chown root: รูท wrapper ติดตามโดย sudo chmod o+s แรปเปอร์

จากนั้นกำหนดค่าเส้นทางของคุณ กระดาษห่อ ไฟล์ลงในโปรแกรมเริ่มต้นของเซสชันเดสก์ท็อปของคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา