36

Как изменить поведение гашения экрана на виртуальных терминалах Linux?

Например, если я переключусь на VT с X, войду в систему и оставлю систему в покое на 5 минут или около того, экран станет пустым, как заставка. Он возвращается с любым нажатием клавиши, как заставка.

В основном я просто хочу изменить время ожидания, но меня также интересуют другие настройки.

Если это помогает, одна из моих систем работает под управлением Ubuntu 10.04 со стандартными графическими драйверами. fbset показывает консоль, использующую устройство кадрового буфера radeondrmfb .

7 ответов7

38

setterm из ответа @ whitequark - разумный инструмент для пользователей, но это еще не все.

Поведение по умолчанию при блокировке консоли включается в ядро во время компиляции. Это настраивается во время загрузки с параметром consoleblank = или в пользовательском пространстве с помощью setterm . Из документации ядра (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.

Вот варианты, их настройки по умолчанию в моей системе Ubuntu и сферы их влияния:

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

Таким образом, мои варианты для изменения по умолчанию один из следующих:

  1. Добавьте setterm -blank X (X в минутах, 0 для отключения) в файл инициализации оболочки, например .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 .)
9

Попробуйте setterm -blank $minutes (или передайте 0, чтобы отключить); -powersave также может быть связана. setterm есть множество других полезных опций.

Если вы хотите установить эти атрибуты при запуске системы, подумайте о написании начального сценария. Это всего лишь скрипт, размещенный в каталоге /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 должен быть первым аргументом).

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, которая использует upstart, вы можете использовать:

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 используют upstart для запуска системы. С помощью upstart консоли Linux настраиваются с файлами конфигурации, которые хранятся в /etc /init. Команда выше начинается с перебора каждого из этих файлов конфигурации:

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

Имя конфигурационного файла tty в $ file используется для создания имени устройства tty:

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

Создается команда upstart «post-start», которая запускает "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.

0

Добавление команды gnome-screensaver-command --exit в мой файл .profile устранило эту проблему для меня в Debian Linux (Wheezy).

Думаю, я бы добавил это, чтобы помочь другим, которые тянут свои волосы, пытаясь прекратить гашение экрана.

Флажок под названием "Тусклый экран для экономии энергии" работает неправильно. Даже если этот флажок не установлен, он все равно будет очищать экран в соответствии с выбранным временем бездействия.

ОБНОВЛЕНИЕ: мне действительно нужно было использовать sleep 30 && /usr/bin/gnome-screensaver-command --exit & чтобы все работало правильно. Заставка GNOME запускается спустя много времени после обработки .profile.

0

Частные CSI-консоли Linux Console

Чтобы установить время входа в sleep mode/screensaver (где X - время в минутах; 0 = никогда):

(с последовательной консоли)

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

или (с консоли кадрового буфера)

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

или чтобы установить его при каждой загрузке, используйте /etc/inittab:

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

рефов:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .