วิธีเริ่มบริการอัตโนมัติใน linux


4

ฉันเข้าใจแล้ว โปรแกรมที่เรียกว่า redshift ที่ฉันต้องการเริ่มต้นอัตโนมัติเมื่อฉันเข้าสู่ระบบหากฉันเรียกใช้ " redshift "ในเทอร์มินัล (หรือ redshift & ) หรือทาง Alt + f2 นี่จะเป็นการเริ่มต้น ฉันไม่คิดว่ามันมีสคริปต์เริ่มต้นดังนั้นจะเพิ่ม " redshift "กับฉัน .profile ไฟล์ทำให้โหลดเมื่อเริ่มต้นหรือไม่ ฉันคิดว่า cronjob ตั้งค่าเป็น @reboot สามารถใช้งานได้

ฉันคิดว่าบางโปรแกรมจำเป็นต้องถูกเรียกใช้จากสภาพแวดล้อมผู้ใช้บางอย่างโดยเฉพาะอย่างยิ่งสิ่งที่มีผลต่อองค์ประกอบกราฟิก? ตัวอย่างเช่นถ้าฉัน SSH ไปยังเครื่องระยะไกลและพยายามเปิดโปรแกรม GUI แน่นอนว่ามันจะเป็นไปไม่ได้ดังนั้นมันจะล้มเหลว นั่นคือสิ่งที่ฉันพยายามหลีกเลี่ยงในเรื่องที่เกี่ยวกับ ที่ไหน ฉันรันโปรแกรมนี้จาก


คุณหมายถึงการรันทุกครั้งที่คุณเข้าสู่ระบบ? หรือตอนบูต? โปรแกรมควรเริ่มต้นอย่างไรถ้าคุณลงชื่อเข้าใช้คอมพิวเตอร์ของคุณจากระยะไกล หากคุณลงชื่อเข้าใช้แล้วเปิดเทอร์มินัลใหม่ให้เปิดโปรแกรมอีกครั้งหรือไม่ คุณอยู่ที่ distro
MariusMatutiae

ไม่ว่าจะเกิดขึ้นตอนบูทหรือเกิดขึ้นเมื่อลงชื่อเข้าใช้ไม่สำคัญ ฉันต้องการให้มันทำงานทุกครั้งที่เริ่มใช้คอมพิวเตอร์ กำลังเรียกใช้ Debian และไม่เมื่อฉันเปิดเทอร์มินัลก็ไม่ควรทำงาน โปรแกรมนี้ควรเริ่มก่อนที่ฉันจะเปิดเทอร์มินัล (นั่นเป็นเพียงความคิด)
Peter

คำตอบ:


6

redshift ไม่ใช่บริการของระบบ มันทำงานได้ในเซสชั่นเข้าสู่ระบบของคุณเนื่องจากมันจำเป็นต้องเข้าถึงเซิร์ฟเวอร์ X11 ดังนั้นโดยพื้นฐานแล้วควรเริ่มต้นอัตโนมัติในลักษณะเดียวกับที่โปรแกรมกราฟิกส่วนใหญ่:

วิธีที่ 1

เพิ่มไฟล์ redshift.desktop ไปยังไดเรกทอรี XDG Autostart ~/.config/autostart/:

[Desktop Entry]
Type=Application
Name=Redshift
Exec=/usr/bin/redshift

ใช้งานได้กับสภาพแวดล้อมเดสก์ท็อปที่เป็นไปตามข้อกำหนด XDG Autostart สิ่งนี้รวมถึง GNOME, KDE, Xfce และอื่น ๆ อีกมากมาย ในบางส่วนสามารถแก้ไขได้ผ่านส่วนต่อประสานกราฟิก (เช่น gnome-session-properties ใน GNOME)

วิธีที่ 2

เพิ่มบรรทัดต่อไปนี้ ...

redshift &

... ถึงคุณ ~/.xprofile. วิธีนี้ใช้ได้กับเครื่องมือจัดการดิสเพลย์ส่วนใหญ่ (gdm, kdm, lightdm, lxdm, sddm - ไม่ผอมเลย)

หากคุณใช้ startx เครื่องมือ, ~/.xprofile ไม่ได้ใช้เป็นค่าเริ่มต้นดังนั้นคุณจะต้องอัปเดตของคุณ ~/.xinitrc สคริปต์แทน - เพิ่มบรรทัดเดียวกันก่อนที่จะเริ่มตัวจัดการเซสชัน

วิธีที่ 3

หากคุณใช้โปรแกรมจัดการหน้าจอเช่น GDM คุณอาจต้องการเรียกใช้โปรแกรมก่อนที่จะเข้าสู่ระบบเพื่อที่จะสามารถนำไปใช้กับหน้าจอเข้าสู่ระบบได้เช่นกัน วิธีการนี้จะแตกต่างกันระหว่างตัวจัดการการแสดงผล แต่ใน GDM สามารถทำได้โดยการแก้ไข /etc/gdm/Init/Default. (ข้อจำกัดความรับผิดชอบ: ฉันยังไม่ได้ลองและอาจเป็นไฟล์ผิด)

สิ่งที่จะไม่ทำงาน

  • สคริปต์ init ของระบบจะไม่ทำงานเนื่องจากจะทำงานแยกต่างหากจากเซสชันกราฟิก - ซึ่งจะไม่มีสิทธิ์ $DISPLAY ไม่ถูกต้อง $XAUTHORITY ตั้ง; หากคุณฮาร์ดโค้ดเหล่านั้นมันอาจสิ้นสุดการพยายามเชื่อมต่อกับจอแสดงผลที่ไม่ถูกต้อง (เช่นคุณฮาร์ดโค้ด DISPLAY=":0" แต่เซสชันของคุณเริ่มต้นที่ :1 ); และถ้าคุณทำให้มันลองแสดงทั้งหมดสคริปต์ยังคงมีแนวโน้มที่จะเริ่มก่อน ใด จอแสดงผล X11 เริ่มขึ้นแล้ว

  • @reboot cronjob จะทำงานในฐานะผู้ใช้ที่ถูกต้อง (ไม่ใช่ต้องการ su / sudo ) แต่อย่างอื่นมันมีปัญหาเช่นเดียวกับสคริปต์เริ่มต้นระบบ


เอาล่ะดูเหมือนว่าตัวเลือก 1 และ 2 ไม่ทำงานและฉันไม่รู้ว่าควรลอง 3 ฉันใช้ i3 ซึ่งเป็นตัวจัดการหน้าต่างแบบเรียงต่อกันไม่ใช่ตัวจัดการเดสก์ท็อปทั่วไป
Peter

ตัวเลือก 2 ควรทำงานอย่างแน่นอนแล้ว
grawity
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.