Zmień zachowanie wygaszania ekranu konsoli Linux

38

Jak zmienić zachowanie wygaszania ekranu w terminalach wirtualnych systemu Linux?

Na przykład, jeśli przełączę się na VT z X, zaloguj się i pozostaw system w spokoju przez około 5 minut, ekran zgaśnie jak wygaszacz ekranu. Wraca z każdym naciśnięciem klawisza, np. Wygaszaczem ekranu.

Przede wszystkim chcę tylko zmienić limit czasu, ale interesują mnie również inne ustawienia.

Jeśli to pomoże, w jednym z moich systemów jest Ubuntu 10.04 ze standardowymi sterownikami grafiki. fbsetpokazuje konsolę za pomocą radeondrmfburządzenia bufora ramki.

quack quixote
źródło
2
Mam nadzieję, że to ci pomoże, znalazłem to, gdy spotkałem to samo pytanie askubuntu.com/questions/138918/…

Odpowiedzi:

42

settermodpowiedź @ whitequark jest rozsądnym narzędziem przestrzeni użytkownika, ale to nie jest cała historia.

Domyślne zachowanie wygaszania konsoli jest wstawiane do jądra w czasie kompilacji. Można go skonfigurować w czasie rozruchu za pomocą parametru Consoleblank = lub w przestrzeni użytkownika za pomocą setterm. Z dokumentacji jądra ( kernel-parameters.txt ):

consoleblank=  [KNL] The console blank (screen saver) timeout in
               seconds. Defaults to 10*60 = 10mins. A value of 0
               disables the blank timer.

Oto opcje, ich ustawienia domyślne w moim systemie Ubuntu i ich strefy wpływów:

  • setterm -blank [0-60]; zawsze zgłasza 0 w przypadku zapytania; skuteczny, gdy działa na prawdziwym VT; wpływa na wszystkie prawdziwe TTY; nie działa, gdy działa w sesjach ekranowych na VT.
  • setterm -powerdown [0-60]; zawsze zgłasza „3]” (??); nie wydaje się mieć żadnego efektu. Jądra Ubuntu nie włączają APM_DISPLAY_BLANK i może to być powiązane.
  • consoleblank=N; domyślnie 600 (10 minut); wpływa na wszystkie prawdziwe VT; wpływa na sesje ekranowe w VT; nie ma możliwości ustawienia podczas działania.

Tak więc moje opcje zmiany wartości domyślnej są następujące:

  1. Dodaj setterm -blank X(X w minutach, 0, aby wyłączyć) do pliku inicjującego powłokę, takiego jak .bashrc .
  2. Dodaj setterm -blank Xdo /etc/rc.local .
  3. Dodaj consoleblank=Y(Y w sekundach, 0, aby wyłączyć) do wiersza poleceń jądra, dodając go do list parametrów w / etc / default / grub , GRUB_CMDLINE_LINUX lub GRUB_CMDLINE_LINUX_DEFAULT . (Nie zapomnij update-grub.)
quack quixote
źródło
4
Chciałbym zauważyć, że setterm -blank Xnie działało to dla mnie z poziomu tmux , ale działało idealnie, kiedy opuściłem tmux przed uruchomieniem polecenia.
Cody Hess,
1
Jeśli używasz grub2 jako bootloadera, możesz dodać ten parametr jądra w / etc / default / grub, GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"a następnie zaktualizować konfigurację grub za pomocą grub[2]-mkconfig -o /boot/grub/grub.cfg.
user3132194
3]bo setterm -powerdownto tylko połowa prawdy: setterm -powerdown 3 | hexdump -czwraca 033 [ 1 4 ; 3 ]. Nie wiem, co powinno interpretować tę sekwencję ucieczki ...
Daniel Alder
1
W zależności od dystrybucji i miejsca, w którym zmiana ma obowiązywać, niektóre z tych opcji mogą nie działać. Odkryłem, że setterm w rc.local działa świetnie dla RHEL 5 i 6, ale nie 7.
David C.
9

Spróbuj setterm -blank $minutes(lub podaj 0, aby wyłączyć); -powersaveopcja może być również powiązana. settermma również wiele innych przydatnych opcji.

Jeśli chcesz ustawić te atrybuty podczas uruchamiania systemu, rozważ napisanie initscript. To tylko skrypt umieszczony w /etc/init.dkatalogu. Niech to się nazywa setterm:

#!/bin/sh
[ "$1" == "start" ] || exit 0 # only initialize everything when called as /etc/init.d/setterm start
for term in /dev/tty[0-9]*; do # select all ttyNN, but skip ttyS*
    setterm -blank 0 >$term <$term
    setterm -powersave off >$term <$term
done

Następnie uczyń go wykonywalnym:

# chmod +x /etc/init.d/setterm

Na koniec utwórz dowiązania symboliczne /etc/rcX.d (sposób Debiana):

# update-rc.d setterm defaults

(Jeśli znudzi ci się takie zachowanie, rób # update-rc.d -f setterm remove. Zauważ, że to -fmusi być pierwszy argument).

Whitequark
źródło
hrm. wydaje się przydatny w locie, choć wydaje się, że na moim testowym systemie Ubuntu jest to właściwie -powerdownustawienie, które obowiązuje. co z ustawieniem domyślnego systemu podczas uruchamiania? jest uruchomiony setterm -blank Xlub setterm -powerdown Yw /etc/rc.local (lub ~ / .bashrc ) jest uzasadniony?
quack quixote
1
Tak, ale tylko jeśli rc.localfaktycznie działa. (Ostatnia upstartmigracja spieprzyła niektóre rzeczy, ponieważ najwyraźniej istnieje i działa w moim systemie.) W przeciwnym razie powinieneś utworzyć skrypt startowy. To proste: w naszym przypadku musi on zainicjować wszystko, gdy zostanie przekazany startjako pierwszy argument, i nie robić nic innego. Opiszę to w mojej odpowiedzi.
whitequark
polecenie setterm -blank X >/dev/ttyNwydaje się nie działać, więc nie sądzę, aby koncepcja initscript działała. natknąłem się na parametr boottime tho i przeprowadziłem dalsze badania. wydaje mi się, że mylę się co -powerdowndo -powersave; nie zostały w pełni przetestowane, ale te nie działają w moim systemie. setterm -blank Xdziała tylko z prawdziwego VT i wpływa na wszystkie VT, więc uruchomienie raz przez /etc/rc.local jest rozsądne. (Upstart nie zabiera rc.local , tylko rzeczy /etc/rcX.d .)
quack quixote
1
Ahem. Wydaje się, że settermemituje sekwencje specjalne stdout, ale sprawdza typ TTY za pomocą stdin: Właśnie sprawdziłem i setterm ... >/dev/ttyN </dev/ttyNdziała zgodnie z przeznaczeniem.
whitequark
to ma sens i działa (z prawdziwego TTY), ale po co w ogóle używać tej składni? (1) nadal nie działa z poziomu ekranu (lub potencjalnie innych PTY), w których przydatne byłoby podanie / dev / ttyN; (2) ustawienie jednego VT wpływa na wszystkie, więc nie ma potrzeby stosowania pętli initscript.
quack quixote
3

Jeśli ktoś szuka innego możliwego rozwiązania dla Debiana (prawdopodobnie nie Ubuntu):

W /etc/kbd/configposzukaj ustawienia o nazwie „BLANK_TIME”:

# screen blanking timeout.  monitor remains on, but the screen is cleared to
# range: 0-60 min (0==never)  kernels I've looked at default to 10 minutes.
# (see linux/drivers/char/console.c)
BLANK_TIME=30

Zmień na 0, spowoduje to wyłączenie:

BLANK_TIME=0

Testowane na Debianie 6 i 7.

podstawowy 6
źródło
2

Jeśli używasz nowszej wersji Ubuntu, która korzysta z wersji upstart, możesz użyć:

for file in /etc/init/tty*.conf; do tty="/dev/`basename $file .conf`"; echo "post-start exec setterm -blank 0 -powersave off >$tty <$tty" | sudo tee -a "$file"; done

Małe wyjaśnienie tego, co się tutaj dzieje:

Nowsze wersje Ubuntu używają upstart do uruchamiania systemu. Przy starcie konsole Linuksa są instalowane z plikami konfiguracyjnymi przechowywanymi w / etc / init. Powyższe polecenie rozpoczyna się od iteracji każdego z tych plików konfiguracyjnych:

for file in /etc/init/tty*.conf;

Upstart nazwa pliku konfiguracyjnego tty w pliku $ służy do zbudowania nazwy urządzenia tty:

tty="/dev/`basename $file .conf`";

Zbudowano polecenie „po uruchomieniu” upstart, które uruchamia „setterm”, aby wyłączyć wygaszanie ekranu i oszczędzanie energii po uruchomieniu tty:

echo "post-start exec setterm -blank 0 -powersave off >$tty <$tty"

I na koniec to polecenie jest dołączane do pliku konfiguracyjnego upstart:

| sudo tee -a "$file";
Chris Pick
źródło
2

W moich systemach (różne wersje RedHat Enterprise Linux) stwierdziłem, że potrzebne są różne podejścia.

W moich systemach RHEL 5 i 6 mogę dodać linię

/bin/setterm -blank 0 -powerdown 0 -powersave off

do /etc/rc.local. Wyłącza to wygaszanie ekranu konsoli podczas uruchamiania systemu.

Odkryłem, że to nie działa w systemach RHEL 7. Na RHEL7 uruchomienie setterm z rc.local powoduje wygenerowanie błędu:

setterm: $TERM is not defined.

Polecenie działa z interaktywnej powłoki, w której zdefiniowano $ TERM (as linux). Jeśli wymuszę użycie setterm:

/bin/setterm -term linux -blank 0 -powerdown 0 -powersave off

Potem pojawia się inny błąd:

setterm: cannot (un)set powersave mode: Inappropriate ioctl for device

Mimo że to samo polecenie działa poprawnie z sesji interaktywnej. Ustawienie consoleblankparametru jądra działało.

Na RHEL7 dokonaj edycji /etc/default/grubi dołącz consoleblank=0do GRUB_CMDLINE_LINUXparametru. Następnie uruchom grub2-mkconfig -o /boot/grub2/grub.cfgi uruchom ponownie.

Nie próbowałem ustawienia consoleblankna RHEL5 lub 6.

David C.
źródło
2
RHEL7 używa systemd; rc.local nie jest domyślnie podłączony do terminala. Myślę, że możesz dodać </dev/tty1 >/dev/tty1lub coś, co sprawi, że zadziała
sourcejedi
1

Prywatne sekwencje CSI konsoli Linux

Aby ustawić sleep mode/screensaverczas wejścia (gdzie X jest czasem w minutach; 0 = nigdy):

(z konsoli szeregowej)

echo -e '\033[9;X]' > /dev/tty1    

lub (z konsoli bufora ramki)

echo -e '\033[9;X]'    

lub, aby ustawić przy każdym uruchomieniu, użyj /etc/inittab:

tty1::sysinit:echo -e '\033[9;X]'

referencje:

Yurenchen
źródło
0

Dodanie gnome-screensaver-command --exitdo mojego .profilepliku naprawiło ten problem dla mnie na Debianie Linux (Wheezy).

Pomyślałem, że dodam to, aby pomóc innym, którzy wyciągają włosy, próbując zatrzymać wygaszanie ekranu.

Pole wyboru zatytułowane „Przyciemnij ekran w celu oszczędzania energii” działa nieprawidłowo. Nawet niezaznaczone, JESZCZE opróżnia ekran zgodnie z wybranym czasem braku aktywności.

AKTUALIZACJA: Właściwie potrzebowałem, sleep 30 && /usr/bin/gnome-screensaver-command --exit &aby działał poprawnie. Wygaszacz ekranu GNOME wydaje się uruchamiać długo po przetworzeniu pliku .profile.

McCinsy
źródło
2
Chodzi o wygaszanie ekranu konsoli, a nie wygaszacze ekranu Gnome.
podstawowe6