Как я могу сократить время, необходимое для входа, отложив / отложив запуск некоторых приложений?

11

Я настроил некоторые приложения для запуска при каждом входе в систему (например, redshift-gtk, gtg) автоматически, но после добавления их в запускаемые приложения ( System -> Preferences -> Startup Applications) очевидно, что время, необходимое для входа в систему, увеличилось. Из-за всего этого время, необходимое для появления моих панелей, рабочего стола и т. Д., Слишком велико - до того момента, когда я вынужден ждать.

Мне не нужно, чтобы эти приложения были доступны сразу, но было бы хорошо, если бы они в конечном итоге запустились, в то время как меню / панель Ubuntu доступны для запуска других приложений, которые могут мне понадобиться.

Я попытался использовать команду at с намерением отредактировать все запускаемые приложения, чтобы поместить команды в очередь at, но это не сработало, поскольку приложения не получают необходимые переменные среды (например, DISPLAY).

Это то, что niceкоманда используется? Любые другие идеи, как я могу сделать это? Если возможно, я бы хотел избежать редактирования команд запуска приложений, поскольку это потребовало бы больших усилий для репликации на другие машины, которые я использую.

Koushik
источник
@ Риккардо Мурри - Вы правы. Теперь я изменил название своего вопроса, чтобы лучше изложить свое намерение.
Кошик
Я бы тоже наверняка урезал автозагрузку программ и сервисов, если вы еще этого не сделали.
2010 г.

Ответы:

11

Количество секунд, необходимое для ожидания загрузки вашего рабочего стола, произвольно и может меняться в зависимости от ситуации. Вместо этого sleepпопробуйте использовать следующее для запуска автозагрузки приложений, как только нагрузка на систему снизится:

(Редактировать: Добавлено предложение Коушика.)

#!/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и документация приложения, хотя я лично еще не сталкивался с этой проблемой.
  • Мое понимание значения «загрузки» системы заключается в том, что оно учитывает ожидания ввода-вывода, поэтому отложенные приложения не должны случайно запускаться слишком рано во время перерывов использования ЦП, вызванных процессами рабочего стола, ожидающими ввода-вывода. Хотя это не та область, о которой я знаю много, поэтому, пожалуйста, поправьте меня, если я здесь не прав.
  • batchвлияет только при запуске приложений; это не меняет их приоритет / милость.
  • Это само собой разумеется, но если ваша система всегда имеет высокую нагрузку, приложения, запланированные с использованием этого метода, могут никогда не запускаться.
  • Если вам необходимо запустить приложение с параметром , который содержит пробелы, вы можете избежать их , используя обратную косую черту: run-when-load-low 'gedit My\ Notes.txt'. Если вам действительно нужно пройти одиночные кавычки параметров вашего приложения, вы должны будете использовать двойные кавычки в команде запуска: run-when-load-low "gedit 'My Notes.txt'". Для чего-то более сложного, чем это, вам, вероятно, лучше всего изменить копию скрипта с помощью жестко запрограммированной команды.
ændrük
источник
aendruk, спасибо. это звучит как оптимальный подход. Осталось 2 сомнения, является ли DISPLAY единственной переменной, необходимой приложениям из моей текущей среды, которая не передается batch? Кроме того, возможно ли уменьшить загрузку процессора до того, как настольный компьютер полностью завершит загрузку (скажем, ожидает загрузки диска для некоторых значков), и эти приложения начнут приводить к аналогичной ситуации, как и раньше? Другими словами, команды запускаются с пакетным присущим более низким приоритетом, который дают, когда другие приложения хотят запускаться?
Кошик
@koushik Спасибо за обсуждение этих вопросов. Я обновил свой ответ, чтобы обратиться к ним.
Ондрюк,
Круто, я долго искал решение этой проблемы.
Levesque
1
Теперь это действительно помогает мне сократить время входа в систему. Чтобы быть в курсе запуска этих приложений, я немного изменил ваш сценарий, чтобы сообщить мне, когда эти приложения действительно запускаются. Кроме того, если процесс не переходит в фоновый режим, он остается в batchочереди как работающий, поэтому я также запустил процесс в фоновом режиме. Модифицированная строка выглядит следующим образом:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik
1
@ ændrük Я всегда обращаюсь к вики Greycat, когда не уверен насчет цитирования и других «лучших практик».
2010 г.
5

Я обнаружил, что просто использование в sleep 10 && COMMANDкачестве имени команды не работает. У меня были проблемы с загрузкой как conky, так и xchat слишком рано и как-то повредил. Я должен был написать небольшой скрипт ~/bin/startupи вызвать его в нем:

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

Вам нужно изменить его разрешения, чтобы разрешить его выполнение, chmod +x ~/bin/startupа затем просто заменить запись запускаемых приложений командой, startupи она запустит все в сценарии.

Вы можете иметь один файл для каждого приложения, если вы склонны к этому.

Оли
источник
Кроме того, вы можете поставить перед файлом или папкой точку (например, ~ / .bin / startup), чтобы она была скрыта, другими словами, вы не видите ее, когда просматриваете папки в nautilus и т. Д. показ переключения)
8128
У меня были проблемы с таким решением, иногда оно будет работать, иногда оно не будет работать. Кроме того, сон определенно задержит загрузку вашего рабочего стола.
Levesque
1
sleepБудет не задерживать загрузку. Запускаемые приложения не блокируют, что означает, что одновременно может быть загружено более одной вещи. sleeping позволяет остальной части гнома загружать, а затем загружать менее важные вещи.
Оли
2

Используйте команду «сна».

В Системе -> Настройки -> Запуск приложений отредактируйте команду для программ, для которых вы хотите отложить:

sleep 10 && COMMAND

Замените 10 на количество секунд, которое вы хотите, чтобы оно ожидало, и COMMAND на то, что изначально было в командной строке.

dv3500ea
источник
Пожалуйста, прочитайте полный текст вопроса: OP жалуется, что запуск приложений занимает слишком много времени, и просит указать способ «отсоединить» их от процесса входа в систему («Мне не нужно, чтобы эти приложения были доступны сразу, но было бы хорошо если они запускаются в конце концов "). Добавление «сна» перед ним фактически увеличит время запуска.
Риккардо Мурри
Я не осознавал, что процесс входа в систему ждал завершения каждой команды. Может быть, просто использовать COMMAND &(запустить в фоновом режиме) будет работать.
dv3500ea
1
Извините, я ошибаюсь: процесс входа не ожидает возврата каждой команды запуска. Увы, я не могу удалить свое понижение, если вы не отредактируете текст вопроса ...
Риккардо Мурри,