Вопрос или проблема
У меня есть система Debian 12
, которая работает в консольном режиме
, без графического интерфейса / рабочего окружения.
Я выключил экран с помощью setterm --blank force
на самом устройстве, и теперь не могу включить его обратно, нажав клавишу, потому что force
игнорирует ввод с клавиатуры.
У меня есть доступ через SSH
к среде рабочего стола Debian 12, но когда я ввожу setterm -blank 0
через SSH
от имени root
, я получаю сообщение terminal xterm-256-color does not support --blank
.
Я также не могу переключаться между различными TTY
на самом устройстве.
Даже когда я переключаюсь на TTY на десктопе Debian и использую setterm --blank 0
, я не получаю никаких сообщений об ошибках, но ничего не происходит.
С помощью setterm --blank poke
я получаю cannot force unblank
.
Есть ли другая команда из core utilities
, которую я могу использовать, чтобы разбудить экран без установки дополнительных инструментов?
В противном случае я просто перезагружу.
Чтобы снова включить экран после его выключения с помощью setterm --blank force
, вы можете использовать следующую команду из отдельного TTY
.
Войдите с помощью ssh
на устройстве и выполните:
sudo sh -c 'TERM=linux setterm --blank poke </dev/tty1'
sudo
предоставляет права суперпользователя
Если пользователь владеет устройством TTY (например, /dev/tty1), есть определенные операции, для которых требуются повышенные привилегии. Это особенно касается команд, которые взаимодействуют напрямую с аппаратным обеспечением или системными ресурсами.
Разрешения на устройствах TTY, как правило, позволяют обычным пользователям читать и записывать данные на устройство, но некоторые команды могут требовать прав root для изменения параметров, которые могут повлиять на всю систему.
Хотя вы можете обладать правами на устройство TTY, выполнение команд, которые изменяют поведение терминала, обычно требует повышенных привилегий, чтобы обеспечить безопасность системы и предотвратить случайное нарушение системных настроек пользователем.
На самом устройстве я могу выполнить setterm --blank force
для отключения экрана, используя обычного пользователя.
Через ssh, когда я выполняю setterm --blank force
обычным пользователем,
я получаю setterm: cannot force blank: Inappropriate ioctl for device
, а с помощью
sh -c 'TERM=linux setterm --blank poke </dev/tty1'
я получаю setterm: cannot force blank: Operation not permitted
.
Так что мне нужны права sudo/root, чтобы выполнить команду через ssh.
SSH-сессии обычно рассматриваются с большей осторожностью в отношении безопасности. Это означает, что даже если пользователь владеет устройством TTY, демон SSH может вводить дополнительные ограничения, которые требуют sudo для выполнения команд, которые могут изменить поведение системы или настройки терминала.
Разрешения для устройств, таких как /dev/tty1, настроены так, чтобы разрешить доступ обычным пользователям, но при доступе через SSH могут быть различия в том, как управляются разрешения.
Требование использования sudo при выполнении команды через SSH связано с различными контекстами разрешений и мерами безопасности для удаленных сессий по сравнению с локальным доступом.
sh -c
Выполняет заключенную строку команд в новой оболочке
TERM=linux
Устанавливает тип терминала
setterm --blank poke
Использует его для выполнения setterm
, чтобы разбудить экран с помощью poke
</dev/tty1
Указывает, что ввод поступает из первого виртуального терминала
Краткое объяснение:
Перенаправление </dev/tty1
| Это указывает, что команда читает из /dev/tty1
, который является первым виртуальным терминалом. Это необходимо, потому что setterm
должен взаимодействовать с консолью напрямую
Установка TERM=
| TERM=linux
важно, потому что это устанавливает тип терминала на linux,
что обеспечивает правильное интерпретирование возможностей терминала setterm
и выполнение необходимых действий
Использование sudo
| Требует повышенных привилегий для взаимодействия с терминалом напрямую, поэтому sudo
необходимо
И теперь я могу выключить экран через ssh
с помощью:
sudo sh -c 'TERM=linux setterm --blank force </dev/tty1'
Редактирование:
Похоже, не имеет значения, использую ли я tty1
, tty4
или любой другой ttyX
в команде, она все еще работает с
</dev/tty4
и т.д.
Обработка виртуальных терминалов ядром Ядро Linux управляет несколькими виртуальными терминалами (TTY), и у них все есть схожие характеристики. Когда вы используете setterm с указанным TTY (например, /dev/tty1), он может контролировать настройки экрана этого терминала, но не ограничивает команду только этим конкретным терминалом.
Поскольку команда не зависит от текущего терминала, а от перенаправления ввода, вы можете эффективно нацеливаться на любой TTY без проблем.
Установка TERM=linux обеспечивает то, что setterm понимает, как взаимодействовать с терминалом, независимо от того, на какой TTY вы нацелены.
Ответ или решение
Для решения проблемы с включением экрана на консольно-ориентированной системе Debian 12, после того как он был выключен с помощью команды setterm --blank force
, необходимо точно следовать рекомендациям, описанным ниже. Предположим, что вы подключены к серверу через SSH, и у вас есть доступ с правами root.
Шаги для включения экрана
-
Подключитесь к устройству через SSH. Убедитесь, что у вас есть права суперпользователя (root), чтобы выполнять команды, взаимодействующие с устройствами терминала.
-
Используйте команду
setterm
для включения экрана. Выполните следующую команду:sudo sh -c 'TERM=linux setterm --blank poke < /dev/tty1'
sudo
: Дает вам права суперпользователя для выполнения команды, которая влияет на аппаратные ресурсы.sh -c
: Исполняет строку команды в новой оболочке.TERM=linux
: Указывает, что тип терминала —linux
, что помогает командеsetterm
правильно интерпретировать возможности терминала.setterm --blank poke
: Эта команда активирует экран, который находится в состоянии сна.< /dev/tty1
: Перенаправляет ввод из первого виртуального терминала, что позволяет взаимодействовать с консолью напрямую.
Дополнительные пояснения
-
Права на TTY: Важно понимать, что управление терминалами (TTY) требует определенных разрешений. Когда вы подключены через SSH, безопасность системы гарантирует, что команды, меняющие поведение терминала, потребуют sudo, даже если у вас имеются права на устройство.
-
Выбор TTY: На самом деле, вы можете использовать любой TTY (например,
/dev/tty2
,/dev/tty3
и т.д.), и команда будет работать. Это связано с тем, что все виртуальные терминалы имеют схожие характеристики и могут быть контролируемы одной и той же командой.
Включение экрана через SSH
Если вы хотите снова отключить экран, это можно сделать так же, как и в предыдущем шаге, заменив poke
на force
в команде:
sudo sh -c 'TERM=linux setterm --blank force < /dev/tty1'
Заключение
Используя вышеописанные шаги, вы можете легко управлять состоянием экрана на вашей консольной системе Debian 12. Это полезно, когда доступ к терминалу ограничен, и вы можете выполнять все команды удаленно через SSH, обеспечивая тем самым безопасность и эффективность работы с сервером. Если у вас возникнут проблемы или вы получите ошибки, не забывайте проверять права доступа и настройки терминала.