一部のスタートアップアプリケーションを延期/遅延することにより、ログインにかかる時間を短縮するにはどうすればよいですか?


11

ログインごとに自動的に起動するアプリケーション(redshift-gtk、gtgなど)をいくつかセットアップしましたが、これらをスタートアップアプリケーションに追加した後(System -> Preferences -> Startup Applications)、ログインにかかる時間が明らかに増加しました。このすべてのために、私のパネル、デスクトップなどが現れるのにかかる時間が長すぎます-それまで私は待たされます。

これらのアプリをすぐに利用できるようにする必要はありませんが、それらが最終的に起動し、その間必要な他のアプリを実行するためにubuntuのメニュー/パネルが利用可能であれば良いでしょう。

すべてのスタートアップアプリケーションを編集してコマンドをatキューに入れるつもりで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待機を考慮しているため、遅延したアプリケーションは、IOで待機しているデスクトッププロセスによって引き起こされるCPU使用率の一時停止中に誤って起動することはありません。これは私がよく知っている分野ではないので、ここで間違っている場合は修正してください。
  • batchアプリケーションの実行時にのみ影響ます。優先度/ナイスネスは変更されません。
  • これは言うまでもありませんが、システムの負荷が常に高い場合、この方法を使用してスケジュールされたアプリケーションは実行されない可能性があります。
  • スペースを含むパラメーターを使用してアプリケーションを実行する必要がある場合は、バックスラッシュを使用してエスケープできますrun-when-load-low 'gedit My\ Notes.txt'。アプリケーションに単一引用符で囲まれたパラメーターを渡す必要がある場合は、起動コマンドで二重引用符を使用する必要がありますrun-when-load-low "gedit 'My Notes.txt'"。これよりも複雑な場合は、コマンドをハードコーディングしてスクリプトのコピーを変更するのが最善です。

aendruk、ありがとう。これは最適なアプローチのように聞こえます。2つの疑問が残ります。DISPLAYは、現在の環境のアプリケーションに必要な唯一の変数であり、それは渡されませんbatchか?また、デスクトップの読み込みが完全に完了する前に(たとえば、アイコンが読み込まれるまでディスクを待機する)CPU負荷が減少し、これらのアプリが起動して以前と同様の状況になる可能性はありますか?言い換えれば、コマンドは、他のアプリを実行したい場合に生じるバッチで本質的に低い優先度で実行されますか?
koushik

@koushikこれらのポイントを教えてくれてありがとう。それらに対処するために回答を更新しました。
アーンドリューク

素晴らしい、私はしばらくの間、この問題の解決策を探していました。
レベスク

1
これにより、ログインにかかる時間が短縮されました。最終的にこれらのアプリに遅れずについていくために、これらのアプリが実際に実行されるタイミングを通知するためにスクリプトを少し変更しました。また、プロセスがバックグラウンドに分岐しない限り、それはbatchまだ実行中のキューにとどまるので、プロセスもバックグラウンドで起動しました。変更された行は次のとおりですecho "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
。– koushik

1
@ændrük 引用やその他の「ベストプラクティス」について確信が持てない場合は、常にGreycatのwikiを参照します
aperson

5

sleep 10 && COMMANDコマンド名として使用するだけでは機能しないことがわかりました。conkyとxchatの両方のロードが早すぎて、何らかの形で破損する問題がありました。という小さなスクリプトを作成して、~/bin/startupその中にこれを配置する必要がありました。

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

権限を変更して実行を許可しchmod +x ~/bin/startup、起動アプリケーションのエントリをコマンドに置き換えるだけstartupで、スクリプト内のすべてが起動されます。

そのような傾向がある場合は、アプリケーションごとに1つのファイルを作成できます。


さらに、ファイルまたはフォルダーの先頭にピリオド(たとえば〜/ .bin / startup)を付けることで非表示にすることができます。つまり、nautilusなどでフォルダーを見ると見えなくなります(ctrl + hトグル表示)
8128

私はそのような解決策に問題を抱えていました。時にはそれがうまくいくこともあれば、うまくいかないこともあります。また、スリープはデスクトップの起動を確実に遅らせます。
レベスク

1
sleepではないブートを遅らせます。スタートアップアプリケーションはノンブロッキングです。つまり、一度に複数のものをロードできます。sleepINGは、GNOMEの残りがロードし、することができ、その後あまり本質的で物事をロードします。
オリ

2

「sleep」コマンドを使用します。

[システム]-> [設定]-> [スタートアップアプリケーション]で、遅延するプログラムのコマンドを編集します。

sleep 10 && COMMAND

10を待機する秒数に置き換え、COMMANDをコマンドボックスに元々あった値に置き換えます。


質問文全文を読んでください:OPはアプリの起動に時間がかかりすぎると不満を言い、ログインプロセスからアプリを「切り離す」方法を求めます(「これらのアプリをすぐに利用可能にする必要はありませんが、良い最終的に起動する場合」)。その前に「スリープ」を追加すると、実際に起動時間が長くなります。
リッカルドムリ

各コマンドが終了するまでログインプロセスが待機することを知りませんでした。たぶん使用COMMAND &するだけで(バックグラウンドで実行)機能するでしょう。
dv3500ea

1
申し訳ありませんが、ログインプロセスは、すべてのスタートアップコマンドが返されるまで待機しません。あなたが質問テキストを編集しない限り、ああ、私は...私のdownvoteを削除することはできません
リッカルドMurri
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.