ฉันจะลดเวลาที่ใช้ในการเข้าสู่ระบบโดยการเลื่อน / ล่าช้าแอปพลิเคชั่นเริ่มต้นบางอย่างได้อย่างไร


11

ฉันได้ติดตั้งแอปพลิเคชั่นบางตัวเพื่อเริ่มการทำงานในการลงชื่อเข้าใช้แต่ละครั้ง (เช่น redshift-gtk, gtg) โดยอัตโนมัติ แต่หลังจากเพิ่มแอปพลิเคชันเริ่มต้นนี้ ( System -> Preferences -> Startup Applications) เห็นได้ชัดว่าเวลาที่ใช้ในการเข้าสู่ระบบเพิ่มขึ้น เนื่องจากทั้งหมดนี้ใช้เวลาสำหรับพาเนลของฉันเดสก์ท็อปและอื่น ๆ ที่จะปรากฏยาวเกินไป - จนกว่าฉันจะถูกบังคับให้รอ

ฉันไม่ต้องการแอปเหล่านี้ให้ใช้งานได้ทันที แต่มันจะดีถ้าพวกเขาเริ่มต้นในที่สุดในขณะเดียวกันเมนู / แผงควบคุมอูบุนตูก็พร้อมใช้งานสำหรับการเรียกใช้แอพอื่น ๆ ที่ฉันอาจต้องใช้

ฉันพยายามใช้คำสั่ง at ด้วยความตั้งใจที่จะแก้ไขแอปพลิเคชันเริ่มต้นทั้งหมดเพื่อใส่คำสั่งในคิวเวลา แต่สิ่งนี้ไม่ทำงานเนื่องจากแอปไม่ได้รับตัวแปรสภาพแวดล้อมที่จำเป็น (เช่น DISPLAY)

นี่คือniceคำสั่งที่ใช้หรือไม่ ความคิดอื่นใดที่ฉันสามารถทำได้ หากเป็นไปได้ฉันต้องการหลีกเลี่ยงการแก้ไขคำสั่งเริ่มต้นแอปพลิเคชันเนื่องจากจะต้องใช้ความพยายามอย่างมากในการทำซ้ำบนเครื่องอื่นที่ฉันใช้


@Riccardo Murri - คุณพูดถูก ตอนนี้ฉันได้แก้ไขชื่อคำถามของฉันเพื่อระบุความตั้งใจของฉัน
koushik

ฉันแน่ใจว่าจะตัดแต่งโปรแกรมและบริการเริ่มต้นด้วยหากคุณยังไม่ได้ทำ
aperson

คำตอบ:


11

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

(แก้ไข: เพิ่มคำแนะนำของ koushik แล้ว)

#!/bin/bash
# 
# Delays running an application until the system load has declined.
# 
# Usage:
#   run-when-load-low 'your command here'

echo "export DISPLAY=$DISPLAY; $1 &" | batch

exit 0

บันทึกเป็น~/bin/run-when-load-lowและเพิ่มrun-when-load-low 'COMMAND'ในการตั้งค่าแอปพลิเคชันเริ่มต้น

หมายเหตุเกี่ยวกับวิธีนี้:

  • สคริปต์ข้างต้นคือสิ่งที่ได้ผลสำหรับฉัน มันส่งผ่านเฉพาะDISPLAYตัวแปรสภาพแวดล้อมไปยังแอปพลิเคชัน สำหรับแอปพลิเคชันเดสก์ทอปส่วนใหญ่สิ่งนี้จะเป็นสิ่งที่คุณต้องการ จากที่กล่าวมาให้แน่ใจว่าได้พิจารณากรณีพิเศษใด ๆ และคำนึงถึงข้อเท็จจริงนี้เมื่อแก้ไขปัญหาใด ๆ ที่ทำงานไม่ถูกต้อง จุดเริ่มต้นที่ดีถ้าคุณคิดว่าแอปพลิเคชันอาจต้องการตัวแปรสภาพแวดล้อมอื่น ๆ ที่ผ่านไปprintenvและเอกสารของแอปพลิเคชันแม้ว่าโดยส่วนตัวแล้วฉันยังไม่พบปัญหานี้
  • ความเข้าใจของฉันเกี่ยวกับค่า "โหลด" ของระบบคือการคำนึงถึงการรอคอยของ IO ดังนั้นแอปพลิเคชันที่ล่าช้าไม่ควรเริ่มโดยเร็วเกินไปในระหว่างการใช้ CPU ที่เกิดจากกระบวนการเดสก์ท็อปรอ IO นี่ไม่ใช่พื้นที่ที่ฉันรู้มากนักดังนั้นโปรดแก้ไขให้ถูกถ้าผิดที่นี่
  • batchส่งผลกระทบต่อเมื่อแอปพลิเคชันทำงานเท่านั้น มันไม่ได้เปลี่ยนลำดับความสำคัญ / ความดีของพวกเขา
  • สิ่งนี้ควรดำเนินการโดยไม่บอก แต่ถ้าระบบของคุณมีโหลดสูงเสมอแอปพลิเคชันที่กำหนดเวลาด้วยวิธีนี้อาจไม่เคยทำงาน
  • run-when-load-low 'gedit My\ Notes.txt'หากคุณจำเป็นต้องเรียกใช้โปรแกรมประยุกต์ที่มีพารามิเตอร์ที่มีช่องว่างคุณสามารถหลบหนีพวกเขาโดยใช้เครื่องหมาย: run-when-load-low "gedit 'My Notes.txt'"ถ้าคุณต้องการจริงๆที่จะผ่านพารามิเตอร์เดียวที่ยกมาไปยังโปรแกรมประยุกต์ของคุณคุณจะต้องใช้คำพูดสองในคำสั่งเริ่มต้น: สำหรับสิ่งที่ซับซ้อนกว่านี้คุณน่าจะดีที่สุดเพียงแค่ปรับเปลี่ยนสำเนาของสคริปต์ด้วยคำสั่งของคุณฮาร์ดโค้ด

aendruk ขอบคุณ ดูเหมือนว่าวิธีการที่ดีที่สุด เหลือ 2 ข้อสงสัยคือ DISPLAY เป็นเพียงตัวแปรเดียวที่จำเป็นสำหรับแอปพลิเคชันจากสภาพแวดล้อมปัจจุบันของฉันซึ่งไม่ได้ถูกส่งต่อด้วยbatch? นอกจากนี้เป็นไปได้หรือไม่ที่โหลดซีพียูจะลดลงก่อนที่เดสก์ท็อปจะโหลดเสร็จสมบูรณ์ (เช่นรอดิสก์เพื่อให้ไอคอนบางตัวโหลด) และแอปเหล่านี้เริ่มต้นใช้งานทำให้เกิดสถานการณ์คล้ายกันก่อนหรือไม่ กล่าวอีกนัยหนึ่งคำสั่งจะทำงานโดยมีลำดับความสำคัญต่ำกว่าโดยธรรมชาติซึ่งให้ผลเมื่อแอปอื่นต้องการเรียกใช้หรือไม่
koushik

@ koushik ขอบคุณที่พูดถึงประเด็นเหล่านี้ ฉันได้อัปเดตคำตอบของฉันแล้ว
ændrük

เยี่ยมมากฉันได้มองหาวิธีแก้ไขปัญหานี้มาระยะหนึ่งแล้ว
levesque

1
นี่คือตอนนี้จริงๆช่วยให้ฉันลดเวลาในการเข้าสู่ระบบ เพียงเพื่อให้ทันกับแอพเหล่านี้ในที่สุดก็เริ่มขึ้นฉันได้แก้ไขสคริปต์ของคุณเล็กน้อยเพื่อแจ้งให้ฉันทราบเมื่อแอพเหล่านี้ทำงานจริง นอกจากนี้กระบวนการจะเปลี่ยนเป็นแบ็คกราวน์มันยังคงอยู่ในbatchคิวขณะที่ยังทำงานอยู่ดังนั้นฉันจึงเริ่มต้นกระบวนการในแบ็คกราวน์ด้วย บรรทัดที่แก้ไขมีดังต่อไปนี้:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik

1
@ ændrükฉันมักจะอ้างถึงวิกิพีเดียของ Greycatเมื่อฉันไม่แน่ใจเกี่ยวกับข้อความและ 'แนวทางปฏิบัติที่ดีที่สุด'
aperson

5

ฉันพบว่าเพียงแค่ใช้sleep 10 && COMMANDเป็นชื่อคำสั่งไม่ทำงาน ฉันมีปัญหากับทั้ง conky และ xchat ที่โหลดเร็วเกินไปและได้รับความเสียหายอย่างใด ฉันต้องเขียนสคริปต์เล็กน้อยที่เรียกว่า~/bin/startupและใส่มันลงไป:

#!/bin/bash
sleep 10
xchat &
conky &

คุณต้องเปลี่ยนการอนุญาตที่จะได้รับอนุญาตให้ดำเนินการด้วยchmod +x ~/bin/startupจากนั้นเพียงแทนที่รายการแอปพลิเคชันเริ่มต้นด้วยคำสั่งstartupและมันจะทำการปิดทุกอย่างในสคริปต์

คุณสามารถมีหนึ่งไฟล์สำหรับแต่ละแอปพลิเคชันหากคุณมีแนวโน้มแบบนั้น


นอกจากนี้คุณสามารถใส่คำนำหน้าไฟล์หรือโฟลเดอร์ด้วยเครื่องหมายจุด (เช่น ~ / .bin / startup) ดังนั้นจึงถูกซ่อนไว้หรือพูดอีกอย่างที่คุณไม่เห็นเมื่อคุณดูในโฟลเดอร์ในหอยโข่ง ฯลฯ (เช่น ctrl + h เพื่อ สลับแสดง)
8128

ฉันมีปัญหากับวิธีแก้ปัญหาเช่นนี้บางครั้งก็ใช้งานได้บางครั้งใช้ไม่ได้ผล นอกจากนี้การสลีปจะทำให้การบูทเดสก์ท็อปของคุณล่าช้าแน่นอน
levesque

1
sleepจะไม่ชะลอการบูต แอปพลิเคชั่นที่เริ่มต้นนั้นไม่มีการปิดกั้นหมายความว่าสามารถโหลดได้มากกว่าหนึ่งรายการในคราวเดียว sleepไอเอ็นจีจะช่วยให้ส่วนที่เหลือของคำพังเพยในการโหลดและแล้วโหลดขึ้นสิ่งที่น้อยกว่าที่จำเป็น
Oli

2

ใช้คำสั่ง 'sleep'

ในระบบ -> การตั้งค่า -> แอปพลิเคชันเริ่มต้นให้แก้ไขคำสั่งสำหรับโปรแกรมที่คุณต้องการหน่วงเวลาไปที่:

sleep 10 && COMMAND

แทนที่ 10 ด้วยจำนวนวินาทีที่คุณต้องการให้รอและคำสั่งกับสิ่งที่อยู่ในกล่องคำสั่งเดิม


โปรดอ่านข้อความคำถามเต็ม: OP บ่นว่าการเริ่มต้นแอปใช้เวลานานเกินไปและขอวิธี "แยก" พวกเขาจากกระบวนการเข้าสู่ระบบ ("ฉันไม่ต้องการแอปเหล่านี้ให้ใช้งานได้ทันที แต่มันจะดี หากพวกเขาเริ่มต้นในที่สุด ") การเพิ่ม "สลีป" ที่ด้านหน้าจะทำให้เวลาเริ่มต้นใหญ่ขึ้น
Riccardo Murri

ฉันไม่ทราบว่ากระบวนการเข้าสู่ระบบรอให้แต่ละคำสั่งเสร็จสิ้น บางทีการใช้COMMAND &(เรียกใช้ในพื้นหลัง) อาจใช้งานได้
dv3500ea

1
ขออภัยฉันผิด: กระบวนการล็อกอินไม่รอให้คำสั่งเริ่มต้นแต่ละคำสั่งเริ่มต้น อนิจจาฉันไม่สามารถลบ downvote ของฉันได้จนกว่าคุณจะแก้ไขข้อความคำถาม ...
Riccardo Murri
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.