Làm cách nào tôi có thể giảm thời gian đăng nhập bằng cách hoãn / trì hoãn một số ứng dụng khởi động?


11

Tôi đã tự động thiết lập một số ứng dụng để khởi động trên mỗi lần đăng nhập (ví dụ: redshift-gtk, gtg) nhưng sau khi thêm chúng vào ứng dụng khởi động ( System -> Preferences -> Startup Applications) rõ ràng thời gian đăng nhập đã tăng lên. Do tất cả thời gian này để các bảng của tôi, máy tính để bàn, v.v. xuất hiện quá lâu - cho đến khi tôi buộc phải chờ đợi.

Tôi không cần các ứng dụng này khả dụng ngay lập tức, nhưng sẽ tốt nếu cuối cùng chúng khởi động, trong khi đó menu / bảng điều khiển Ubuntu có sẵn để chạy các ứng dụng khác mà tôi có thể cần.

Tôi đã thử sử dụng lệnh, với mục đích chỉnh sửa tất cả các ứng dụng khởi động để đưa các lệnh vào hàng đợi, nhưng điều này không hoạt động vì các ứng dụng không nhận được các biến môi trường cần thiết (như HIỂN THỊ).

Đây có phải là những gì nicelệnh được sử dụng cho? Bất kỳ ý tưởng khác làm thế nào tôi có thể thực hiện điều này? Nếu có thể, tôi muốn tránh chỉnh sửa các lệnh của ứng dụng khởi động, vì điều này có nghĩa là rất nhiều nỗ lực để sao chép trên các máy khác mà tôi sử dụng.


@Riccardo Murri - Bạn nói đúng. Bây giờ tôi đã chỉnh sửa tiêu đề câu hỏi của mình để nói rõ hơn ý định của tôi.
koushik

Tôi chắc chắn cũng sẽ cắt bớt các chương trình và dịch vụ khởi động, nếu bạn chưa có.
aperson

Câu trả lời:


11

Số giây cần thiết để chờ máy tính để bàn của bạn tải tùy ý và có thể thay đổi tùy theo tình huống. Thay vì sleep, hãy thử sử dụng các cách sau để chạy các ứng dụng khởi động ngay khi tải hệ thống bị giảm:

(Chỉnh sửa: Đã thêm đề xuất của 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

Lưu nó dưới dạng ~/bin/run-when-load-lowvà thêm run-when-load-low 'COMMAND'vào Tùy chọn ứng dụng khởi động.

Lưu ý về phương pháp này:

  • Kịch bản ở trên là những gì đã làm việc cho tôi. Nó chỉ truyền DISPLAYbiến môi trường cho ứng dụng. Đối với hầu hết các ứng dụng máy tính để bàn, đây sẽ là tất cả những gì bạn cần. Như đã nói, hãy chắc chắn xem xét bất kỳ trường hợp đặc biệt nào và ghi nhớ thực tế này khi khắc phục sự cố bất cứ điều gì không đúng. Một nơi tốt để bắt đầu nếu bạn nghĩ rằng một ứng dụng có thể cần các biến môi trường khác được thông qua là printenvvà tài liệu của ứng dụng, mặc dù cá nhân tôi chưa gặp phải vấn đề này.
  • Sự hiểu biết của tôi về giá trị "tải" của hệ thống là nó có tính đến sự chờ đợi của IO, vì vậy các ứng dụng bị trì hoãn không nên vô tình khởi động quá sớm trong quá trình sử dụng CPU do quá trình máy tính để bàn chờ đợi trên IO. Đây không phải là một lĩnh vực tôi biết nhiều về mặc dù vậy, xin vui lòng sửa cho tôi nếu tôi sai ở đây.
  • batchchỉ ảnh hưởng khi các ứng dụng được chạy; nó không làm thay đổi mức độ ưu tiên / tính độc đáo của chúng.
  • Việc này không cần phải nói, nhưng nếu hệ thống của bạn luôn có tải cao, các ứng dụng được lên lịch sử dụng phương pháp này có thể không bao giờ chạy.
  • Nếu bạn cần chạy một ứng dụng có tham số chứa khoảng trắng, bạn có thể thoát chúng bằng dấu gạch chéo : run-when-load-low 'gedit My\ Notes.txt'. Nếu bạn thực sự cần truyền các tham số trích dẫn đơn vào ứng dụng của mình, bạn sẽ phải sử dụng dấu ngoặc kép trong lệnh khởi động : run-when-load-low "gedit 'My Notes.txt'". Đối với bất cứ điều gì phức tạp hơn thế này, có lẽ tốt nhất bạn chỉ nên sửa đổi một bản sao của tập lệnh bằng lệnh được mã hóa cứng.

aendruk, cảm ơn. Điều này nghe có vẻ như là cách tiếp cận tối ưu. Vẫn còn 2 nghi ngờ, liệu HIỂN THỊ có phải là biến duy nhất cần thiết cho các ứng dụng từ môi trường hiện tại của tôi không được truyền qua batchkhông? Ngoài ra, có thể giảm tải cpu trước khi máy tính để bàn tải xong (giả sử, chờ đĩa cho một số biểu tượng tải) và các ứng dụng này bắt đầu dẫn đến tình trạng tương tự như trước? Nói cách khác, các lệnh có chạy với mức ưu tiên thấp hơn vốn có mang lại khi các ứng dụng khác muốn chạy không?
koushik

@koushik Cảm ơn bạn đã đưa ra những điểm này. Tôi đã cập nhật câu trả lời của mình để giải quyết chúng.
ændrük

Tuyệt vời, tôi đã tìm kiếm một giải pháp cho vấn đề này trong một thời gian.
levesque

1
Điều này bây giờ thực sự giúp tôi giảm thời gian đăng nhập. Để theo kịp các ứng dụng này cuối cùng đã khởi động, tôi đã sửa đổi tập lệnh của bạn một chút để thông báo cho tôi khi các ứng dụng này thực sự chạy. Ngoài ra, trừ khi quá trình chuyển sang nền, nó vẫn ở trên batchhàng đợi như vẫn đang chạy, vì vậy tôi cũng thực hiện quá trình khởi động ở chế độ nền. Dòng sửa đổi như sau:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik

1
@ ndrük Tôi luôn đề cập đến wiki của Greycat khi tôi không chắc chắn về việc trích dẫn và các 'thực tiễn tốt nhất' khác.
aperson

5

Tôi thấy rằng chỉ sử dụng sleep 10 && COMMANDnhư tên lệnh không hoạt động. Tôi gặp vấn đề với cả tải conky và xchat quá sớm và bị hỏng bằng cách nào đó. Tôi đã phải viết một kịch bản nhỏ được gọi ~/bin/startupvà đặt nó trong đó:

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

Bạn cần thay đổi các quyền của nó để được phép thực thi chmod +x ~/bin/startupvà sau đó chỉ cần thay thế mục nhập ứng dụng khởi động bằng lệnh startupvà nó sẽ tắt mọi thứ trong tập lệnh.

Bạn có thể có một tệp cho mỗi ứng dụng nếu bạn nghiêng theo cách đó.


Ngoài ra, bạn có thể thêm tiền tố vào tệp hoặc thư mục có dấu chấm (ví dụ ~ / .bin / khởi động) để nó bị ẩn, nói cách khác bạn không thấy tệp đó khi bạn tìm trong các thư mục của mình trong nautilus, v.v (cũng ctrl + h để chuyển đổi hiển thị)
8128

Tôi đã gặp rắc rối với một giải pháp như vậy, đôi khi nó sẽ hoạt động, đôi khi nó không hoạt động. Ngoài ra, giấc ngủ chắc chắn sẽ trì hoãn khởi động máy tính để bàn của bạn.
levesque

1
Các sleepsẽ không trì hoãn khởi động. Các ứng dụng khởi động không có nghĩa là chặn nhiều thứ có thể được tải lên cùng một lúc. sleeping cho phép phần còn lại của gnome tải và sau đó tải lên những thứ ít thiết yếu hơn.
Oli

2

Sử dụng lệnh 'ngủ'.

Trong Hệ thống -> Tùy chọn -> Ứng dụng khởi động, hãy chỉnh sửa lệnh cho các chương trình bạn muốn trì hoãn:

sleep 10 && COMMAND

Thay thế 10 bằng số giây bạn muốn nó chờ và LỰA CHỌN bằng những gì trong hộp lệnh ban đầu.


Vui lòng đọc toàn bộ câu hỏi: OP phàn nàn rằng việc khởi động ứng dụng mất quá nhiều thời gian và yêu cầu cách "tách" chúng khỏi quá trình đăng nhập ("Tôi không cần các ứng dụng này có sẵn ngay lập tức, nhưng sẽ tốt thôi nếu cuối cùng họ khởi động "). Thêm một "giấc ngủ" phía trước nó sẽ thực sự làm cho thời gian khởi động lớn hơn.
Riccardo Murri

Tôi đã không nhận ra quá trình đăng nhập chờ đợi cho mỗi lệnh kết thúc. Có lẽ chỉ cần sử dụng COMMAND &(chạy trong nền) sẽ làm việc.
dv3500ea

1
Xin lỗi, tôi sai: quá trình đăng nhập không chờ đợi mỗi lệnh khởi động trở lại. Than ôi, tôi không thể xóa downvote của mình trừ khi bạn chỉnh sửa văn bản câu hỏi ...
Riccardo Murri
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.