Bagaimana saya bisa mengurangi waktu yang dibutuhkan untuk login dengan menunda / menunda beberapa aplikasi startup?

11

Saya telah mengatur beberapa aplikasi untuk memulai pada setiap login (misalnya, redshift-gtk, gtg) secara otomatis tetapi setelah menambahkannya ke aplikasi startup ( System -> Preferences -> Startup Applications) jelas waktu yang dibutuhkan untuk login telah meningkat. Karena semua ini waktu yang dibutuhkan untuk panel saya, desktop dll untuk muncul terlalu lama - sampai saya dipaksa untuk menunggu.

Saya tidak memerlukan aplikasi ini untuk segera tersedia, tetapi akan lebih baik jika mereka mulai pada akhirnya, sementara itu menu / panel ubuntu tersedia untuk menjalankan aplikasi lain yang mungkin saya perlukan.

Saya mencoba menggunakan perintah, dengan maksud mengedit semua aplikasi startup untuk menempatkan perintah di antrian, tetapi ini tidak berhasil karena aplikasi tidak mendapatkan variabel lingkungan yang diperlukan (seperti DISPLAY).

Apakah ini niceperintah yang digunakan? Ada ide lain bagaimana saya bisa mencapai ini? Jika memungkinkan, saya ingin menghindari pengeditan perintah aplikasi startup, karena ini berarti banyak upaya untuk mereplikasi pada mesin lain yang saya gunakan.

koushik
sumber
@Riccardo Murri - Anda benar. Saya sekarang telah mengedit judul pertanyaan saya untuk menyatakan niat saya dengan lebih baik.
koushik
Saya pasti akan memangkas program dan layanan startup juga, jika Anda belum melakukannya.
aperson

Jawaban:

11

Jumlah detik yang diperlukan untuk menunggu desktop Anda memuat adalah arbitrer dan dapat berubah tergantung situasinya. Alih-alih sleep, coba gunakan yang berikut ini untuk menjalankan aplikasi startup segera setelah beban sistem menurun:

(Edit: Menambahkan saran 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

Simpan sebagai ~/bin/run-when-load-lowdan tambahkan run-when-load-low 'COMMAND'di Preferensi Aplikasi Startup.

Catatan tentang metode ini:

  • Script di atas adalah apa yang berhasil bagi saya. Itu hanya melewati DISPLAYvariabel lingkungan ke aplikasi. Untuk sebagian besar aplikasi desktop, ini adalah semua yang Anda butuhkan. Dengan itu, pastikan untuk mempertimbangkan setiap kasus khusus dan ingat fakta ini saat memecahkan masalah apa pun yang tidak berperilaku benar. Tempat yang baik untuk memulai jika Anda berpikir aplikasi mungkin memerlukan variabel lingkungan lain yang lulus printenvdan dokumentasi aplikasi, meskipun saya pribadi belum mengalami masalah ini.
  • Pemahaman saya tentang nilai sistem "memuat" adalah bahwa ia memperhitungkan menunggu IO, jadi aplikasi yang tertunda seharusnya tidak sengaja memulai terlalu cepat selama jeda penggunaan CPU yang disebabkan oleh proses desktop yang menunggu di IO. Ini bukan bidang yang saya tahu banyak tentang, jadi tolong perbaiki saya jika saya salah di sini.
  • batchhanya mempengaruhi ketika aplikasi dijalankan; itu tidak mengubah prioritas / kebaikan mereka.
  • Ini tidak perlu diragukan lagi, tetapi jika sistem Anda selalu memiliki beban tinggi, aplikasi yang dijadwalkan menggunakan metode ini mungkin tidak akan pernah berjalan.
  • Jika Anda perlu untuk menjalankan aplikasi dengan parameter yang berisi spasi, Anda dapat melarikan diri dengan menggunakan garis miring terbalik: run-when-load-low 'gedit My\ Notes.txt'. Jika Anda benar-benar harus lulus parameter tunggal dikutip untuk aplikasi Anda, Anda harus menggunakan tanda kutip ganda dalam perintah startup: run-when-load-low "gedit 'My Notes.txt'". Untuk hal yang lebih rumit dari ini, Anda mungkin lebih baik hanya memodifikasi salinan skrip dengan perintah Anda yang dikodekan.
ændrük
sumber
aendruk, terima kasih. ini terdengar seperti pendekatan optimal. Masih ada 2 keraguan, apakah DISPLAY satu-satunya variabel yang diperlukan oleh aplikasi dari lingkungan saya saat ini yang tidak diteruskan batch? Selain itu, mungkinkah cpu load berkurang sebelum desktop selesai memuat (katakanlah, menunggu disk untuk memuat beberapa ikon) dan aplikasi ini mulai menghasilkan situasi yang sama seperti sebelumnya? Dengan kata lain, apakah perintah dijalankan dengan batch yang secara inheren lebih rendah prioritasnya yang dihasilkan ketika aplikasi lain ingin dijalankan?
koushik
@koushik Terima kasih telah menyampaikan poin-poin ini. Saya telah memperbarui jawaban saya untuk mengatasinya.
ændrük
Luar biasa, saya telah mencari solusi untuk masalah ini untuk sementara waktu.
levesque
1
Ini sekarang sangat membantu saya mengurangi waktu untuk masuk. Untuk terus mengikuti aplikasi ini pada akhirnya memulai, saya telah sedikit memodifikasi skrip Anda untuk memberi tahu saya ketika aplikasi ini benar-benar berjalan. Juga, kecuali proses bercabang ke latar belakang, itu tetap pada batchantrian masih berjalan, jadi saya membuat proses startup di latar juga. Baris yang dimodifikasi adalah sebagai berikut:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik
1
@ ændrük Saya selalu merujuk ke wiki Greycat ketika saya tidak yakin tentang penawaran dan 'praktik terbaik' lainnya.
aperson
5

Saya menemukan bahwa hanya menggunakan sleep 10 && COMMANDnama perintah tidak berhasil. Saya punya masalah dengan memuat conky dan xchat terlalu dini dan entah bagaimana rusak. Saya harus menulis sebuah skrip kecil yang disebut ~/bin/startupdan memasukkan ini ke dalamnya:

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

Anda perlu mengubah izinnya agar dapat dieksekusi chmod +x ~/bin/startupdan kemudian hanya mengganti entri aplikasi start-up dengan perintah startupdan itu akan memadamkan semua yang ada di skrip.

Anda dapat memiliki satu file untuk setiap aplikasi jika Anda cenderung seperti itu.

Oli
sumber
Selain itu Anda dapat mengawali file atau folder dengan titik (misalnya ~ / .bin / startup) sehingga tersembunyi, dengan kata lain Anda tidak melihatnya ketika Anda melihat di folder Anda di nautilus, dll (well ctrl + h to beralih menampilkan)
8128
Saya memiliki masalah dengan solusi seperti itu, kadang-kadang akan berhasil, kadang tidak akan berhasil. Selain itu, tidur pasti akan menunda boot desktop Anda.
levesque
1
The sleepakan tidak menunda booting. Aplikasi start-up adalah non-pemblokiran yang artinya lebih dari satu hal dapat dimuat sekaligus. sleeping memungkinkan sisa gnome memuat dan kemudian memuat hal-hal yang kurang penting.
Oli
2

Gunakan perintah 'tidur'.

Dalam Sistem -> Preferensi -> Aplikasi Startup, edit perintah untuk program yang ingin Anda tunda:

sleep 10 && COMMAND

Ganti 10 dengan jumlah detik yang Anda inginkan untuk menunggu dan PERINTAH dengan apa yang ada di kotak perintah pada awalnya.

dv3500ea
sumber
Silakan baca teks pertanyaan lengkap: OP mengeluh bahwa memulai aplikasi terlalu lama, dan meminta cara untuk "melepaskan" mereka dari proses login ("Saya tidak perlu aplikasi ini tersedia segera, tetapi itu akan baik jika mereka memulai pada akhirnya "). Menambahkan "sleep" di depannya sebenarnya akan membuat waktu startup lebih besar.
Riccardo Murri
Saya tidak menyadari proses login menunggu setiap perintah selesai. Mungkin hanya menggunakan COMMAND &(berjalan di latar belakang) akan berhasil.
dv3500ea
1
Maaf, salah saya: proses login tidak menunggu masing-masing dan setiap perintah startup untuk kembali. Sayangnya, saya tidak dapat menghapus downvote saya kecuali jika Anda mengedit teks pertanyaan ...
Riccardo Murri