Вопрос или проблема
Я запускаю Ubuntu Server на своем ноутбуке. На самом деле, нет причин, чтобы экран оставался включенным. Я пытался использовать эту команду, чтобы выключить экран:
sleep 1 && xset dpms force off
Проблема в том, что я получаю следующую ошибку
не удается открыть дисплей "".
Какие идеи, что происходит / что не так? Есть ли другие предложения, как это сделать?
Чтобы выключить монитор в консоли, команда следующая:
sudo vbetool dpms off
Чтобы вернуть контроль над консолью после нажатия клавиши Enter, я предлагаю
sudo sh -c 'vbetool dpms off; read ans; vbetool dpms on'
Попробуйте эти команды…
Чтобы выключить:
xset -display :0.0 dpms force off
Чтобы включить:
xset -display :0.0 dpms force on
Если ваш дисплей выключается, а затем сразу включается, попробуйте следующее, что добавляет задержку в 1 секунду перед выключением экрана. Это дает шанс для того, чтобы все события были обработаны сервером X перед выключением дисплея.
sleep 1 && xset -display :0.0 dpms force off
Команда xset
, упомянутая в других ответах, выключит все мониторы, если у вас несколько мониторов. Однако, если вы хотите выключить только один или несколько мониторов, вам следует использовать xrandr
.
Сначала выполните команду xrandr -q
, которая перечислит все мониторы и их текущие настройки отображения. В начале каждой детали монитора вы найдете название монитора, заданное системой. Вам нужно будет отслеживать это.
У меня два монитора (один подключен к DVI-порту, а другой к VGA-порту), и когда я выполняю команду, я вижу это:
Экран 0: минимум 320 x 200, текущий 1360 x 768, максимум 2726 x 2726
DFP1 подключен 1360x768+0+0 (нормальный слева, инвертированный вправо, ось x, ось y) 304мм x 228мм
1360x768 59.7*+
... (здесь показано больше деталей, но я их скрыл)
CRT1 подключен 1360x768+0+0 (нормальный слева, инвертированный вправо, ось x, ось y) 410мм x 230мм
1360x768 59.8*+ 60.0
... (здесь показано больше деталей, но я их скрыл)
В этом выводе, монитор, подключенный к DVI-порту, обозначен как DFP1
, а другой как CRT1
. Итак, если я хочу выключить вспомогательный монитор (т.е. CRT1
), я должен выполнить следующую команду:
xrandr --output CRT1 --off
Если вы хотите снова включить этот монитор, выполните следующую команду:
xrandr --output CRT1 --auto
Я только что установил Ubuntu Server 18.04.1 (без GUI, X или чего-либо графического), и после того, как я сломал себе спину прошлой ночью, пытаясь выключить экран, я наконец нашел волшебную команду:
setterm --blank 1
После выполнения команды экран будет выключаться автоматически каждую минуту (если не активен).
И даже лучше, если вы хотите, чтобы команда выполнялась автоматически при загрузке, вы можете добавить ее в командную строку GRUB. Для этого нам нужно отредактировать следующий файл:
sudo nano /etc/default/grub
После того, как вы туда попали, просто добавьте consoleblank=60
к GRUB_CMDLINE_DEFAULT
, он должен выглядеть так:
GRUB_CMDLINE_LINUX_DEFAULT="quiet consoleblank=60"
Затем закройте файл и сохраните его, после чего просто выполните sudo update-grub
и вау, каждый раз, когда вы загружаете систему, экран будет выключаться автоматически каждые 60 секунд. (опять же, если не активен).
И таким образом (добавляя consoleblank в GRUB), это работает даже с удаленных терминалов (ssh).
Наслаждайтесь! (снова)
Экран гаснет через 1 минуту и выключается через 2 минуты. Любое нажатие клавиши снова включит его. Сделайте его автозапуском после перезагрузки.
Волшебная команда, которая сделает всю работу:
setterm --blank 1 --powerdown 2
Если вы получите ошибку: setterm: терминал xterm-256color не поддерживает –blank
- Вы, вероятно, пытаетесь выполнить эту команду по SSH. Вы должны запустить ее локально на своем компьютере или выполнить следующий этап этого руководства.
Сделайте ее автозапуском
Вставьте команду в исполняемый файл. Сохраните его, например, в скрытой папке вашего домашнего каталога /home/USER/.boot-scripts/screen-off.sh
#!/bin/bash
setterm --blank 1 --powerdown 2
И сделайте скрипт исполняемым с помощью systemctl. Создайте файл /etc/systemd/system/screen-off.service
[Unit]
Описание=Экран гаснет через 1 минуту и выключается через 2 минуты. Любое нажатие клавиши снова включит его.
После=ssh.service
[Service]
Type=oneshot
Environment=TERM=linux
StandardOutput=tty
TTYPath=/dev/console
ExecStart=/home/USER/.boot-scripts/screen-off.sh
[Install]
WantedBy=local.target
Сделайте его исполняемым:
sudo chmod +x /home/USER/.boot-scripts/screen-off.sh
sudo chmod +x /etc/systemd/system/screen-off.service
И наконец, получите его работающим и включенным при загрузке:
sudo systemctl start screen-off.service
sudo systemctl enable screen-off.service
Чтобы отключить его:
sudo systemctl disable screen-off.service
Если у вас несколько мониторов, используйте это:
Выключение вашего второго монитора:
(Предполагая, что CRT-0 — это ваш левый монитор, а CRT-1 — это ваш правый монитор)
xrandr --output CRT-1 --off
Включение вашего второго монитора:
xrandr --output CRT-1 --right-of CRT-0 --auto
Таким образом, xrandr знает, что не нужно дублировать первый экран.
Ответ @stiemannkj1 (вдохновленный ответом @enzotib), зарытый в комментариях к ответу @harshith-j-v (работает на моем ноутбуке, подключенном к монитору):
xset -display $DISPLAY dpms force off; read temp; xset -display $DISPLAY dpms force on
Может быть, модератор или разработчик сайта могут создать способ извлекать хорошие комментарии в отдельный ответ, чтобы атрибуция и оценка репутации могли быть правильно установлены
- Предлагаемый способ:
xset -display $DISPLAY dpms force off
Двигайте мышью, и ваш экран вернется
- Не рекомендуемый способ:
xrandr --output $(xrandr | grep ' connected' | cut -d' ' -f1) --off
Тогда вы потеряете экран, пока не перезагрузите машину или не переподключите кабель монитора 🙂
Вы можете установить это с помощью setterm
удаленно, просто перенаправьте вашу команду в правильный TTY на экране вашего ноутбука, обычно это /dev/tty1
.
Попробуйте это:
TERM=linux setterm --blank 1 >/dev/tty1 </dev/tty1
У меня была такая же проблема. Что я обнаружил, так это то, что на моем ноутбуке (старом acer aspire) кнопка переключения экрана по умолчанию поддерживается. Это может быть что-то вроде fn+F6
.
Это решение, вероятно, не работало раньше. Надеюсь, это поможет кому-то, кто столкнется с этой проблемой.
Не по теме, но важно!
Замечание <>/dev/tty1
Я вижу что-то вроде setterm ... <>/dev/tty1
на этой странице более 2 раз.
Нужно отметить, что CMD <>/dev/tty1
не то же самое, что CMD >/dev/tty1 </dev/tty1
Второй вариант выполняет ожидаемую работу в этой ситуации.
// измените значение setterm -blank
и проверьте с помощью cat /sys/module/kernel/parameters/consoleblank
ЗАМЕТКА: <>FILE
не является сокращением для >FILE <FILE
// по крайней мере, я уверен в bash.
Докажите это
chen:/run/test$ cat ./test.sh
#!/bin/bash
ls -lh /proc/$$/fd/
chen:/run/test$ ./test.sh <>./out1
total 0
lrwx------ 1 chen chen 64 6月 9 13:37 0 -> /run/test/out1
lrwx------ 1 chen chen 64 6月 9 13:37 1 -> /dev/pts/2
lrwx------ 1 chen chen 64 6月 9 13:37 2 -> /dev/pts/2
lr-x------ 1 chen chen 64 6月 9 13:37 255 -> /run/test/test.sh
chen:/run/test$ ./test.sh >./out2 <./out2
chen:/run/test$ cat ./out2
total 0
lr-x------ 1 chen chen 64 6月 9 13:38 0 -> /run/test/out2
l-wx------ 1 chen chen 64 6月 9 13:38 1 -> /run/test/out2
lrwx------ 1 chen chen 64 6月 9 13:38 2 -> /dev/pts/2
lr-x------ 1 chen chen 64 6月 9 13:38 255 -> /run/test/test.sh
man bash
[n]<>word
вызывает файл, имя которого является расширением слова
чтобы открыться для чтения и записи на файловом дескрипторе n,
или на файловом дескрипторе 0, если n не указан.
Если файл не существует, он создается.
Что касается всех, если предложенное решение @marek-vach не работает полностью (экран гаснет, но не выключается, например, на Mac, работающем под управлением Linux), вот возможное решение.
Проверено на MacBook Pro 15″ 2013 года, работающем под управлением Fedora 41 Minimal headless.
-
Удалите его решение, если вы его установили.
-
Добавьте параметр ядра consoleblank=60.
Это приведет к гашению экрана (но не выключению) через 60 секунд после загрузки и через 60 секунд после нажатия любой клавиши.
Вы можете протестировать это, просто нажав ‘e’ на экране grub во время загрузки и добавив это в командную строку после чего-то вроде “rhgb quiet”.
Чтобы сохранить, обновите /etc/default/grub и добавьте это в конец GRUB_CMDLINE_LINUX перед завершающей кавычкой. Что-то вроде
GRUB_CMDLINE_LINUX="rd.luks.uuid=luks-... rhgb quiet consoleblank=60"
Затем выполните что-то вроде для регенерации вашей конфигурации grub.
grub2-mkconfig -o /boot/grub2/grub.cfg
- Создайте следующий скрипт и установите для него права на выполнение.
> cat /usr/bin/screen-powersaving
#!/bin/sh -ex
DELAY="$1"
POWERSAVE_MODE="$2"
/usr/bin/setterm --powersave="${POWERSAVE_MODE:-powerdown}" --term=linux </dev/tty1 >/dev/tty1
{
/bin/sleep "$DELAY"
/usr/bin/setterm --blank=poke --term=linux </dev/tty1 >/dev/tty1
} &
> chown root:root /usr/bin/screen-powersaving
> chmod +x /usr/bin/screen-powersaving
> ls -Al /usr/bin/screen-powersaving
-rwxr-xr-x. 1 root root 231 Nov 10 10:54 /usr/bin/screen-powersaving
Этот скрипт устанавливает режим энергосбережения на выключение, если вы не передали второй параметр, который его переопределяет, а затем пробуждает (разморжает) экран после N задержки, которую вы ДОЛЖНЫ передать в качестве первого параметра.
- Создайте следующий сервис systemd.
> cat /etc/systemd/system/screen-powersaving.service
[Unit]
Описание=Установить режим энергосбережения экрана и разблокировать его один раз после задержки.
После=ssh.service
[Service]
Type=oneshot
ExecStart=/usr/bin/screen-powersaving 2m
KillMode=process
[Install]
WantedBy=multi-user.target
> ls -Al /etc/systemd/system/screen-powersaving.service
-rw-r--r--. 1 root root 215 Nov 10 11:03 /etc/systemd/system/screen-powersaving.service
- Включите этот сервис.
> systemctl daemon-reload
> systemctl enable --now screen-powersaving.service
Создана символическая ссылка '/etc/systemd/system/multi-user.target.wants/screen-powersaving.service' → '/etc/systemd/system/screen-powersaving.service'.
После перезагрузки поведение будет следующим:
- экран будет гаснуть примерно через 60 секунд (consoleblank=60) после загрузки
- затем он снова проснется примерно через 60 секунд (screen-powersaving 2m)
- затем он будет гаснуть И выключаться примерно через 60 секунд (consoleblank=60)
- и каждый раз, когда вы нажимаете клавишу и пробуждаете его, он будет гаснуть И выключаться примерно через 60 секунд (consoleblank=60)
Не стесняйтесь регулировать consoleblank=60 и screen-powersaving 2m задержки по вашему вкусу.
Имейте в виду, что consoleblank=60, похоже, начинает отсчет после того, как grub передаст управление процессу загрузки ядра, и, похоже, он запоминает режим энергосбережения, установленный в это время. screen-powersaving 2m начинает отсчет за мгновение до того, как вы увидите приглашение для входа на экране.
Вы должны установить задержки так, чтобы screen-powersaving 2m заканчивался ПОСЛЕ того, как закончится первый consoleblank=60. В противном случае экран останется погашенным, пока вы не разбудите его вручную один раз. После этого он будет гаснуть И выключаться каждые consoleblank=60 секунд. И оба должны завершиться после того, как вы увидите приглашение для входа.
Как правило, установите consoleblank=X на 1.5 вашего времени загрузки, и screen-powersaving Xs на то же значение.
Ответ или решение
Для управления экраном в Ubuntu Server, особенно когда у вас нет графического интерфейса, можно использовать несколько команд непосредственно из консоли. Это полезно для случаев, когда система используется на сервере или в обход графических средств.
Проблема
Вы столкнулись с ошибкой при выполнении команды xset dpms force off
, и вывод сообщения указывает на то, что не удается открыть дисплей. Это происходит потому, что команда xset
требует активной сессии X server, а в вашей серверной среде X server, как правило, не установлен.
Решения
1. Использование vbetool
Если вы хотите отключить экран на сервере без графического интерфейса, вы можете воспользоваться командой vbetool
. Однако необходимо, чтобы у вас были установлены права суперпользователя (sudo):
sudo vbetool dpms off
Чтобы вернуть экран в рабочее состояние, используйте:
sudo vbetool dpms on
2. Использование setterm
Для устройств с терминалом (tty) вы можете использовать команду setterm
, которая позволяет управлять режимом экрана, даже если вы работаете из SSH. Эта команда может быть выполнена следующим образом:
Чтобы установить автоматическое отключение экрана через 1 минуту:
setterm --blank 1
Если вы хотите настроить параметры так, чтобы экран выключался после 2 минут бездействия, используйте:
setterm --blank 1 --powerdown 2
Для того чтобы эти параметры применялись автоматически при каждом запуске, вы можете добавить строку consoleblank=60
в конфигурационный файл GRUB:
-
Откройте файл конфигурации GRUB:
sudo nano /etc/default/grub
-
Найдите строку
GRUB_CMDLINE_LINUX_DEFAULT
и добавьтеconsoleblank=60
, чтобы она выглядела следующим образом:GRUB_CMDLINE_LINUX_DEFAULT="quiet consoleblank=60"
-
Обновите конфигурацию GRUB:
sudo update-grub
3. Использование xrandr для управления несколькими мониторами
Если у вас есть несколько мониторов, и вы хотите отключить только один из них, используйте xrandr
. Сначала проверьте доступные мониторы:
xrandr -q
Допустим, вывод покажет, что ваши мониторы называются CRT1
и DFP1
. Чтобы выключить, например, CRT1
, выполните:
xrandr --output CRT1 --off
Чтобы включить его обратно:
xrandr --output CRT1 --auto
Заключение
В зависимости от ваших потребностей и конфигурации системы, у вас есть несколько опций для управления экраном вашей системы на Ubuntu Server. Для простых случаев без графического интерфейса наиболее подходят команды vbetool
и setterm
. Если есть графическая среда, вы можете использовать xset
или xrandr
для более сложного управления, включая работу с несколькими мониторами.
Эти решения обеспечат удобное управление экраном и помогут экономить ресурсы вашей системы.