Jak mogę skrócić czas logowania, odkładając / opóźniając niektóre aplikacje startowe?

11

Mam skonfigurowane niektóre aplikacje do automatycznego uruchamiania przy każdym logowaniu (np. Redshift-gtk, gtg) automatycznie, ale po dodaniu ich do aplikacji startowych ( System -> Preferences -> Startup Applications) oczywiście czas potrzebny na zalogowanie się wydłużył. Z tego powodu czas potrzebny na pojawienie się paneli, pulpitu itp. Jest zbyt długi - na co jestem zmuszony czekać.

Nie potrzebuję, aby te aplikacje były dostępne natychmiast, ale byłoby dobrze, gdyby ostatecznie się uruchomiły, tymczasem menu / panel ubuntu jest dostępny do uruchamiania innych aplikacji, które mogą być potrzebne.

Próbowałem użyć polecenia, z myślą o edycji wszystkich aplikacji startowych, aby umieścić polecenia w kolejce, ale to nie zadziałało, ponieważ aplikacje nie otrzymały niezbędnych zmiennych środowiskowych (takich jak DISPLAY).

Czy do tego nicesłuży polecenie? Wszelkie inne pomysły, jak to osiągnąć? Jeśli to możliwe, chciałbym uniknąć edytowania poleceń aplikacji startowych, ponieważ oznaczałoby to duży wysiłek przy replikacji na innych komputerach, których używam.

koushik
źródło
@Riccardo Murri - Masz rację. Zmieniłem teraz tytuł pytania, aby lepiej wyrazić moją intencję.
koushik
Na pewno usunę programy startowe i usługi, jeśli jeszcze tego nie zrobiłeś.
aperson

Odpowiedzi:

11

Liczba sekund potrzebnych do oczekiwania na załadowanie pulpitu jest dowolna i może się zmieniać w zależności od sytuacji. Zamiast tego sleepspróbuj użyć następujących poleceń, aby uruchomić aplikacje startowe, gdy tylko obciążenie systemu spadnie:

(Edycja: Dodano sugestię koushika).

#!/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

Zapisz go jako ~/bin/run-when-load-lowi dodaj run-when-load-low 'COMMAND'w Preferencjach aplikacji startowych.

Uwagi na temat tej metody:

  • Powyższy skrypt działał dla mnie. Przekazuje DISPLAYdo aplikacji tylko zmienną środowiskową. W przypadku większości aplikacji komputerowych będzie to wszystko, czego potrzebujesz. Mając to na uwadze, pamiętaj o rozważeniu specjalnych przypadków i pamiętaj o tym podczas rozwiązywania problemów z czymś, co nie działa poprawnie. Dobrym miejscem do rozpoczęcia, jeśli uważasz, że aplikacja może wymagać przekazania innych zmiennych środowiskowych, jest printenvdokumentacja aplikacji, chociaż osobiście nie napotkałem jeszcze tego problemu.
  • Rozumiem, że system „ładuje” wartość, ponieważ bierze pod uwagę oczekiwania IO, więc opóźnione aplikacje nie powinny przypadkowo uruchomić się zbyt szybko podczas przerw w zużyciu procesora spowodowanych procesami pulpitu oczekującymi na IO. To nie jest obszar, o którym dużo wiem, więc popraw mnie, jeśli się mylę.
  • batchdotyczy tylko gdy aplikacje są run; nie zmienia to ich priorytetu / ważności.
  • Powinno to być oczywiste, ale jeśli twój system zawsze ma duże obciążenie, aplikacje zaplanowane przy użyciu tej metody mogą nigdy nie działać.
  • Jeśli trzeba uruchomić aplikację z parametrem, który zawiera spacje, można uciec je za pomocą backslash: run-when-load-low 'gedit My\ Notes.txt'. Jeśli naprawdę potrzebujesz, aby przekazać parametry pojedyncze cytowany do aplikacji, będziesz musiał użyć cudzysłowów w poleceniu startowym: run-when-load-low "gedit 'My Notes.txt'". W przypadku bardziej skomplikowanych rzeczy najlepiej jest po prostu zmodyfikować kopię skryptu za pomocą polecenia zakodowanego na stałe.
ændrük
źródło
aendruk, dzięki. brzmi to jak optymalne podejście. Pozostają 2 wątpliwości, czy DISPLAY jest jedyną zmienną potrzebną aplikacjom z mojego obecnego środowiska, która nie jest przekazywana przez batch? Czy możliwe jest także zmniejszenie obciążenia procesora przed całkowitym zakończeniem ładowania pulpitu (powiedzmy, czekaniem na dysk do załadowania niektórych ikon) i uruchomieniem tych aplikacji, co skutkuje podobną sytuacją jak poprzednio? Innymi słowy, czy polecenia są uruchamiane partiami z natury niższym priorytetem, które dają, gdy inne aplikacje chcą uruchomić?
koushik
@koushik Dzięki za podniesienie tych punktów. Zaktualizowałem swoją odpowiedź, aby je rozwiązać.
ændrük
Wspaniale, od jakiegoś czasu szukałem rozwiązania tego problemu.
levesque,
1
To naprawdę pomaga mi skrócić czas logowania. Aby być na bieżąco z uruchamianiem tych aplikacji, zmodyfikowałem nieco twój skrypt, aby poinformować mnie, kiedy te aplikacje faktycznie działają. Również jeśli proces nie rozwinie się w tle, pozostanie w batchkolejce jako nadal działająca, więc proces uruchomiłem również w tle. Zmodyfikowana linia wygląda następująco:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik 17.09.10
1
@ ændrük Zawsze odnoszę się do wiki Greycat, gdy nie jestem pewien co do cytowania i innych „najlepszych praktyk”.
aperson
5

Odkryłem, że samo użycie sleep 10 && COMMANDjako nazwy polecenia nie działa. Miałem problemy z zbyt wczesnym ładowaniem conky i xchat i jakoś zepsucia. Musiałem napisać mały skrypt o nazwie ~/bin/startupi umieścić w nim:

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

Musisz zmienić jego uprawnienia, aby można było go wykonać, chmod +x ~/bin/startupa następnie po prostu zastąp wpis aplikacji startowej poleceniem, startupa wszystko uruchomi się w skrypcie.

Mógłbyś mieć jeden plik dla każdej aplikacji, gdybyś był tak skłonny.

Oli
źródło
Dodatkowo możesz poprzedzić plik lub folder kropką (np. ~ / .Bin / startup), aby był ukryty, innymi słowy, nie widzisz go, gdy przeglądasz swoje foldery w nautilus itp. (Ctrl + h to przełączanie pokazu)
8128
Miałem problem z takim rozwiązaniem, czasem zadziała, a czasem nie. Ponadto sen zdecydowanie opóźni uruchomienie komputera.
levesque,
1
sleepBędzie nie opóźniać uruchamianie. Aplikacje rozruchowe nie blokują, co oznacza, że ​​można załadować więcej niż jedną rzecz na raz. sleeping pozwala reszcie gnomu załadować, a następnie załadować mniej istotne rzeczy.
Oli
2

Użyj polecenia „uśpienia”.

W System -> Preferencje -> Aplikacje startowe, edytuj polecenie programów, które chcesz opóźnić:

sleep 10 && COMMAND

Zamień 10 na liczbę sekund, na które ma czekać, a POLECAM na to, co pierwotnie było w polu poleceń.

dv3500ea
źródło
Przeczytaj pełny tekst pytania: OP skarży się, że uruchamianie aplikacji trwa zbyt długo, i prosi o sposób na „odłączenie” ich od procesu logowania („Nie potrzebuję, aby te aplikacje były natychmiast dostępne, ale byłoby dobrze jeśli w końcu się uruchomią ”). Dodanie „uśpienia” przed nim faktycznie wydłuży czas uruchamiania.
Riccardo Murri,
Nie zdawałem sobie sprawy, że proces logowania czekał na zakończenie każdego polecenia. Może po prostu użycie COMMAND &(działające w tle) działałoby.
dv3500ea,
1
Przepraszam, mój błąd: proces logowania nie czeka na powrót każdego polecenia uruchamiania. Niestety, nie mogę usunąć mojej opinii, chyba że zredagujesz tekst pytania ...
Riccardo Murri,