Як я можу скоротити час, необхідний для входу, відкладаючи / затримуючи деякі програми запуску?


11

У мене є налаштування деяких програм для запуску на кожному вході (наприклад, redshift-gtk, gtg) автоматично, але після додавання їх до програм запуску ( System -> Preferences -> Startup Applications), очевидно, час, необхідний для входу, збільшився. Завдяки всьому цьому час, на який з'являються мої панелі, робочий стіл тощо, занадто довгий - до цього я змушений чекати.

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

Я намагався використовувати в команді, маючи намір редагувати всі програми запуску, щоб розмістити команди в черзі, але це не спрацювало, оскільки програми не отримують необхідних змінних умов середовища (наприклад, DISPLAY).

Це для чого niceвикористовується команда? Будь-які інші ідеї, як я можу це досягти? Якщо можливо, я хотів би уникати редагування команд програм запуску, оскільки це означатиме багато зусиль для копіювання на інших машинах, які я використовую.


@Riccardo Murri - Ти маєш рацію. Зараз я відредагував свою назву питання, щоб краще викласти свій намір.
кушик

Буду впевнений, що також слід обрізати програми та служби запуску, якщо ви ще цього не зробили.
аперсон

Відповіді:


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і документація програми, хоча я особисто ще не стикався з цією проблемою.
  • Я розумію, що значення системи "завантаження" системи полягає в тому, що воно враховує очікування IO, тому відкладені програми не повинні випадково запускатися занадто рано під час затишшя процесора, спричинених процесами настільних комп'ютерів, які очікують на IO. Це не область, про яку я багато знаю, тому, будь ласка, виправте мене, якщо я тут помиляюся.
  • batchвпливає лише при запуску програм; це не змінює їх пріоритетності / приємності.
  • Це само собою зрозуміло, але якщо у вашій системі завжди велике навантаження, програми, заплановані за допомогою цього методу, ніколи не можуть працювати.
  • Якщо вам необхідно запустити додаток з параметром , який містить прогалини, ви можете уникнути їх , використовуючи зворотну косу риску: run-when-load-low 'gedit My\ Notes.txt'. Якщо вам дійсно потрібно пройти одиничні лапки параметрів вашого застосування, ви повинні будете використовувати подвійні лапки в команді запуску: run-when-load-low "gedit 'My Notes.txt'". Якщо щось складніше, ніж це, вам, мабуть, найкраще просто змінити копію сценарію за допомогою жорсткого кодування вашої команди.

аендрук, спасибі. це звучить як оптимальний підхід. Залишаються 2 сумніви, чи DISPLAY є єдиною змінною, необхідною для додатків із мого поточного середовища, яка не передається batch? Крім того, чи можливо зменшення навантаження на процесор перед тим, як завантаження робочого столу повністю закінчиться (скажімо, очікування завантаження на диск деяких значків), і ці програми запустять, що призведе до подібної ситуації, як раніше? Іншими словами, чи команди виконуються з пакетною суттєво нижчим пріоритетом, який приносить результат, коли інші програми хочуть запускатися?
кушик

@koushik Дякуємо за те, що ви зрозуміли ці моменти. Я оновив свою відповідь, щоб вирішити їх.
ændrük

Дивовижно, я деякий час шукав рішення цієї проблеми.
levesque

1
Це зараз дуже допомагає мені скоротити час для входу. Для того, щоб бути в курсі цих додатків з часом, я трохи змінив ваш сценарій, щоб повідомити мене, коли ці програми справді запущені. Крім того, якщо процес не виходить на другий план, він залишається у batchчерзі як і раніше працює, тому я також запустив процес запуску у фоновому режимі. Змінена лінія така:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik

1
@ ændrük Я завжди посилаюся на вікі Greycat, коли я не впевнений у цитуванні та інших "кращих практиках".
аперсон

5

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

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

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

У вас може бути один файл для кожної програми, якби ви так хотіли.


Крім того, ви можете встановити префікс файлу або папки з періодом (наприклад, ~ / .bin / startup), щоб він був прихованим, іншими словами, ви не бачите його, коли дивитесь у своїх папках у nautilus тощо (добре ctrl + h до перемикання показу))
8128

У мене виникли проблеми з таким рішенням, іноді воно спрацює, іноді не вийде. Також сон обов'язково затримає завантаження робочого столу.
levesque

1
sleepБуде НЕ затримувати завантаження. Програми запуску не блокують, що означає, що відразу можна завантажити декілька речей. sleeping дозволяє решті гномів завантажуватись, а потім завантажувати менш важливі речі.
Олі

2

Скористайтеся командою "сон".

У системі -> Налаштування -> Програми запуску, відредагуйте команду для програм, на які потрібно відкласти:

sleep 10 && COMMAND

Замініть 10 на кількість секунд, які ви хочете почекати, і КОМАНДУЙТЕ тим, що було в командному полі спочатку.


Будь ласка, прочитайте повний текст запитання: ОП скаржиться на те, що запуск додатків займає занадто багато часу, і просить спосіб "від'єднати" їх від процесу входу ("Мені не потрібно, щоб ці програми були доступні негайно, але було б добре якщо вони з часом запустяться "). Додавання "сну" перед ним насправді збільшить час запуску.
Ріккардо Муррі

Я не розумів, що процес входу чекав завершення кожної команди. Можливо, просто використовувати COMMAND &(запустити у фоновому режимі) вдасться.
dv3500ea

1
Вибачте, моя помилка: процес входу не чекає повернення кожної команди запуску. На жаль, я не можу видалити свою позицію, якщо ви не редагуєте текст питання ...
Ріккардо Муррі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.