Изменить поведение гашения экрана консоли Linux

53450
quack quixote

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

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

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

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

35
Надеюсь, это поможет вам, я нашел это, когда встретил тот же вопрос http://askubuntu.com/questions/138918/how-do-i-disable-the-blank-console-screensaver-on-ubuntu-server 11 лет назад 2

7 ответов на вопрос

37
quack quixote

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.)
Я хотел бы отметить, что `setterm -blank X` не работал для меня из _tmux_, но отлично работал, когда я выходил из _tmux_ перед запуском команды. Cody Hess 9 лет назад 2
Если вы используете grub2 в качестве загрузчика, вы можете добавить этот параметр ядра в / etc / default / grub `GRUB_CMDLINE_LINUX_DEFAULT =" consoleblank = 0 "`, а затем обновить конфигурацию grub с помощью `grub [2] -mkconfig -o / boot / жратва / grub.cfg`. user3132194 9 лет назад 1
`3]` для `setterm -powerdown` - только половина истинного:` setterm -powerdown 3 | hexdump -c` возвращает `033 [1 4; 3] `. Не уверен, что следует интерпретировать эту escape-последовательность ... Daniel Alder 9 лет назад 0
В зависимости от вашего дистрибутива и того, где вы хотите, чтобы изменения вступили в силу, некоторые из этих параметров могут не работать. Я обнаружил, что setterm в rc.local отлично работает для RHEL 5 и 6, но не для 7. David C. 8 лет назад 1
9
whitequark

Попробуйте 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должен быть первый аргумент).

HRM. кажется полезным для «на лету», хотя в моей тестовой системе Ubuntu кажется, что на самом деле действует параметр -powerdown. как насчет настройки загрузки по умолчанию для всей системы? разумно ли запускать `setterm -blank X` или` setterm -powerdown Y` в * / etc / rc.local * (или * ~ / .bashrc *)? quack quixote 13 лет назад 0
Да, но только если `rc.local` действительно работает. (Недавняя миграция `upstart` испортила некоторые вещи, поскольку она, очевидно, существует и работает в моей системе.) В противном случае вам следует создать начальный скрипт. Это легко: в нашем случае он должен инициализировать все, когда передается `start` в качестве первого аргумента, и ничего не делать иначе. Я опишу это в своем ответе. whitequark 13 лет назад 1
команда `setterm -blank X> / dev / ttyN` не работает, поэтому я не думаю, что концепция initscript будет работать. наткнулся на параметр времени загрузки tho и провел еще несколько исследований. я, кажется, ошибаюсь по поводу `-powerdown` и` -powersave`; не полностью протестированы, но они не работают в моей системе. `setterm -blank X` работает, только от реального VT, и влияет на все VT, поэтому запускать один раз через * / etc / rc.local * целесообразно. (Upstart не убирает * rc.local *, только материал * / etc / rcX.d *.) quack quixote 13 лет назад 0
Гм. Кажется, что `setterm` испускает escape-последовательности на` stdout`, но проверяет тип TTY с помощью `stdin`: я только что проверил и` setterm ...> / dev / ttyN whitequark 13 лет назад 1
это имеет смысл, и это работает (из реального TTY), но какой смысл вообще использовать этот синтаксис? (1) по-прежнему не работает из * screen * (или, возможно, из других PTY), где было бы полезно указать / dev / ttyN; (2) установка одного VT влияет на все, поэтому нет необходимости в цикле initscript. quack quixote 13 лет назад 0
Очень странно: я тестировал эту команду из сеанса SSH (клавиатура не подключена к серверу в любом случае). upd: вероятно, это потому, что у меня есть система Debian. Обычно Ubuntu и Debian не сильно отличаются, но это, очевидно, так. whitequark 13 лет назад 0
2
Chris Pick

Если вы используете более новую версию 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
basic6

Если кто-то ищет другое возможное решение для 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.

1
David C.

On my systems (various releases of RedHat Enterprise Linux), I have found that different approaches are needed.

For my RHEL 5 and 6 systems, I am able to add the line

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

to /etc/rc.local. This disables the console screen blanking at system startup.

I found that this does not work on RHEL 7 systems. On RHEL7, running setterm from rc.local causes an error to be generated:

setterm: $TERM is not defined.

The command works from an interactive shell, where $TERM is defined (as linux). If I force setterm to use it:

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

Then I get a different error:

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

Even though the same command works fine from an interactive session. Setting the consoleblank kernel parameter worked.

On RHEL7, edit /etc/default/grub and append consoleblank=0 to the GRUB_CMDLINE_LINUX parameter. Then run grub2-mkconfig -o /boot/grub2/grub.cfg and reboot.

I haven't tried setting consoleblank on RHEL5 or 6.

RHEL7 использует systemd; По умолчанию rc.local не подключен к терминалу. Я думаю, что вы можете добавить `/ dev / tty1` или что-то еще, чтобы это работало sourcejedi 5 лет назад 0
0
mcchinsy

Adding gnome-screensaver-command --exit to my .profile file fixed this problem for me on Debian Linux (Wheezy).

Thought I would add this to help others who are pulling their hair out trying to stop screen-blanking.

A checkbox titled "Dim screen to save power" is malfunctioning. Even unchecked, it will STILL blank the screen according to the selected inactivity time.

UPDATE: I actually needed sleep 30 && /usr/bin/gnome-screensaver-command --exit & to make it work properly. The GNOME screensaver seems to start long after .profile has been processed.

Речь идет о гашении экрана консоли, а не заставках Gnome. basic6 8 лет назад 1
0
yurenchen

Частные 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]' 

рефов:

Похожие вопросы