Зміна поведінки екрану консолі Linux


38

Як змінити поведінку блокування екрана на віртуальних терміналах Linux?

Наприклад, якщо я перейду на VT з X, увійдіть і залиште систему в спокої на 5 хвилин або близько того, екран буде порожнім, як заставка. Він повертається з будь-яким натисканням клавіші, як заставка.

В основному я просто хочу змінити час очікування, але мене також цікавлять інші налаштування.

Якщо це допомагає, одна з моїх систем працює з Ubuntu 10.04 з драйверами графіки. fbsetпоказує консоль за допомогою radeondrmfbпристрою framebuffer.


2
Сподіваюсь, це вам допоможе, я виявив це, коли я зустрівся з тим самим питанням, як askubuntu.com/questions/138918/…

Відповіді:


42

settermвідповідь @ whitequark - це розумний інструмент для простору користувачів, але це не вся історія.

Поведінка замовчування консолі за замовчуванням записується в ядро ​​під час компіляції. Вона може бути налаштована під час завантаження за допомогою консолі параматера = або в просторі користувача з setterm. З документації на ядро ​​( kernel-settings.txt ):

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

Ось варіанти, їхні параметри в моїй системі Ubuntu та сфери їх впливу:

  • setterm -blank [0-60]; завжди повідомляє 0 при запиті; ефективний при запуску на реальному VT; впливає на всі реальні TTY; не ефективний при запуску на екрані сеансів на VT.
  • setterm -powerdown [0-60]; завжди повідомляє "3]" (??); Схоже, це не має ніякого ефекту. Ядра Ubuntu не вмикають APM_DISPLAY_BLANK , і це може бути пов’язано.
  • consoleblank=N; за замовчуванням до 600 (10 хвилин); впливає на всі реальні ВТ; впливає на екранні сеанси у ВТ; ніякого способу встановити під час бігу.

Тож мої варіанти зміни за замовчуванням - це одне з наступних:

  1. Додайте setterm -blank X(X за хвилини, 0 для відключення) у файл init оболонки типу .bashrc .
  2. Додати setterm -blank Xв /etc/rc.local .
  3. Додайте consoleblank=Y(Y за секунди, 0 для відключення) до командного рядка ядра, додавши його до списку параметрів у / etc / default / grub , або GRUB_CMDLINE_LINUX або GRUB_CMDLINE_LINUX_DEFAULT . (Не забувайте update-grub.)

4
Я хотів би зазначити, що setterm -blank Xвін не працював для мене зсередини tmux , але працював чудово, коли я вийшов з tmux перед запуском команди.
Коді Гесс

1
Якщо ви використовуєте grub2 як завантажувач, ви можете додати цей параметр ядра в / etc / default / grub, GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"а потім оновити конфігурацію grub grub[2]-mkconfig -o /boot/grub/grub.cfg.
користувач3132194

3]бо setterm -powerdownсправді лише половина: setterm -powerdown 3 | hexdump -cповертається 033 [ 1 4 ; 3 ]. Не знайте, що слід інтерпретувати цю послідовність втечі ...
Даніель Алдер

1
Залежно від вашого розповсюдження та місця, коли ви хочете, щоб зміни набрали чинності, деякі з цих варіантів можуть не працювати. Я виявив, що setterm у rc.local працює чудово для RHEL 5 та 6, але не 7.
Девід К.

9

Спробуйте setterm -blank $minutes(або пропустіть 0, щоб відключити); -powersaveваріант також може бути пов'язаний.settermтакож є безліч інших корисних варіантів.

Якщо ви хочете встановити ці атрибути при запуску системи, розгляньте можливість написання initscript. Це просто сценарій, розміщений у /etc/init.dкаталозі. Нехай це буде називатися 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

Потім зробіть його виконуваним:

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

І нарешті, створіть /etc/rcX.d символьні посилання (спосіб Debian):

# update-rc.d setterm defaults

(Якщо ви втомитеся від такої поведінки, зробіть це # update-rc.d -f setterm remove. Зверніть увагу, це -fповинен бути перший аргумент).


грн. здається корисним для льоту, тому на моїй тестовій системі Ubuntu здається, що це фактично -powerdownналаштування, яке діє. як щодо встановлення за замовчуванням загальної системи за замовчуванням? працює setterm -blank Xабо setterm -powerdown Yв /etc/rc.local (або ~ / .bashrc ) розумним?
хит-кіхот

1
Так, але тільки якщо rc.localнасправді працює. (Нещодавня upstartміграція накрутила деякі речі, через це, мабуть, існує і працює в моїй системі.) Інакше вам слід створити Initscript. Це легко: у нашому випадку він повинен ініціалізувати все, коли він передається startяк перший аргумент, і не робити нічого іншого. Я опишу це у своїй відповіді.
whitequark

команда setterm -blank X >/dev/ttyN, здається, не працює, тому я не думаю, що концепція initscript буде працювати. наткнувся на параметр завантажувального тхо і провів ще кілька досліджень. я, здається, помиляюся з приводу -powerdownі -powersave; не пройшов повністю тестування, але вони не працюють у моїй системі. setterm -blank Xпрацює лише від реального VT і впливає на всі VT, тому запускати один раз через /etc/rc.local є розумним. (Upstart не забирати rc.local , тільки /etc/rcx.d матеріал.)
шарлатан Кіхота

1
Ахм. Здається, що settermвипускає послідовності втечі stdout, але перевіряє тип TTY за допомогою stdin: Я щойно перевірив, і setterm ... >/dev/ttyN </dev/ttyNпрацює за призначенням.
whitequark

це має сенс, і він працює (від справжнього TTY), але який сенс використовувати цей синтаксис взагалі? (1) все ще не працює зсередини екрана (або, можливо, інших PTY), саме там уточнення / dev / ttyN було б корисно; (2) встановлення однієї VT впливає на всіх, тому немає необхідності в циклі initscript.
квакш-кіхот

3

Якщо хтось шукає інше можливе рішення для Debian (можливо, не Ubuntu):

В /etc/kbd/config, зверніть увагу на налаштування під назвою «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

Змініть його на 0, це відключить:

BLANK_TIME=0

Тестували на Debian 6 і 7.


2

Якщо ви використовуєте новіший Ubuntu, який використовує новітню версію, ви можете використовувати:

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

Невелике пояснення того, що тут відбувається:

Новіші версії Ubuntu використовують запуску для запуску системи. Після запуску консолі Linux налаштовуються з конфігураційними файлами, що зберігаються в / etc / init. Команда вище починається з ітерації над кожним із цих конфігураційних файлів:

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

Ім'я файлу на початку конфігурації tty у $ file використовується для створення імені пристрою tty:

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

Побудована команда "після запуску", яка запускає "setterm" для відключення затухання екрану та енергозбереження після запуску програми tty:

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

І нарешті, ця команда додається до файлу конфігурації upstart:

| sudo tee -a "$file";

2

У моїх системах (різні випуски RedHat Enterprise Linux) я виявив, що потрібні різні підходи.

Для моєї системи RHEL 5 та 6 я можу додати рядок

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

до /etc/rc.local . Це вимикає заготівлю екрана консолі при запуску системи.

Я виявив, що це не працює в системах RHEL 7. У RHEL7 запуск setterm від rc.local викликає помилку:

setterm: $TERM is not defined.

Команда працює з інтерактивної оболонки, де $ TERM визначений (як linux). Якщо я змушую setterm використовувати його:

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

Тоді я отримую іншу помилку:

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

Навіть незважаючи на те, що ця ж команда чудово працює від інтерактивного сеансу. Налаштування consoleblankпараметру ядра працювало.

На RHEL7, редагувати /etc/default/grubі додавати consoleblank=0до GRUB_CMDLINE_LINUXпараметру. Потім запустіть grub2-mkconfig -o /boot/grub2/grub.cfgі перезавантажте.

Я не пробував налаштування consoleblankна RHEL5 або 6.


2
RHEL7 використовує systemd; rc.local за замовчуванням не підключений до терміналу. Я думаю, ви можете додати </dev/tty1 >/dev/tty1або щось, щоб змусити його працювати
sourcejedi

1

Приватні послідовності CSI консолі Linux

Щоб встановити sleep mode/screensaverчас введення (де X - час у хвилині; 0 = ніколи):

(із серійної консолі)

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

або (з консолі framebuffer)

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

або щоб встановити його при кожному завантаженні, використовуйте /etc/inittab:

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

списки:


0

Додавання gnome-screensaver-command --exitдо мого .profileфайлу вирішило цю проблему для мене на Debian Linux (Wheezy).

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

Не працює функція прапорця під назвою "Темний екран для економії енергії" . Навіть не поставлений прапорець, він НЕ БУДЕ порожнім екраном відповідно до вибраного часу бездіяльності.

ОНОВЛЕННЯ: Насправді мені потрібно sleep 30 && /usr/bin/gnome-screensaver-command --exit &було правильно працювати. Заставка GNOME, здається, запускається задовго після обробки .profile.


2
Мова йде про заготовку екрана консолі, а не заставки Gnome.
basic6
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.