Какой systemd сервис запускает текстовую консоль на устройстве кадрового буфера?

Когда Вы используете $() оболочка выполнит содержание в фигурных скобках как команда.
Нельзя использовать пробелы прежде/после того, как = символ.

Таким образом, Ваша команда будет как

SNAPSHOT=SnapshotIR$TODAY*.csv

или

SNAPSHOT=SnapshotIR${TODAY}*.csv

PS. Если необходимо сделать некоторые операции с этим, регистрирует на следующем шаге, лучше использовать for цикл как

for file in SnapshotIR${TODAY}*.csv ; do smth ; done

вызовите в случае, если у Вас есть несколько файлов, соответствующих Вашему шаблону, [ -f ${SNAPSHOT} ] конструкция возвратит ошибку как:

[ -f f* ] && echo ok
-bash: [: filename: binary operator expected
6
03.04.2015, 14:52
1 ответ

lsof ничего не показывает при открытом /dev/fb0.

Не показывает. В ядро Linux встроена программа эмулятора терминала. Она не проявляется как запущенный процесс с открытыми файловыми дескрипторами. Она располагается поверх буфера кадров и подсистемы событий ввода, для доступа к которым она использует внутренние интерфейсы ядра. Системам прикладного режима она представляется как серия виртуальных терминалов ядра, /dev/tty1 и так далее.

Одной из таких систем прикладного режима является, конечно, система getty+login, которая может быть настроена на работу с этими виртуальными терминалами ядра и (как вы обнаружили) работает по умолчанию. Вы можете легко избавиться от процессов getty, используя документированные механизмы systemd.

В старой системе System 5 init каждый getty был записью в /etc/inittab. В системе BSD init каждый getty - это запись в /etc/ttys. В системе systemd все немного косвеннее.

  • Деймон "login", logind, знает о вещах, которые на сленге systemd называются "местами". Нулевое "место" - это место с первичным фреймбуфером и всеми этими виртуальными терминалами ядра.
  • Для этого места logind пытается запустить N служб systemd, названных autovt@tty1.service до autovt@ttyN.service. Значение N задается в параметре NAutoVTs в /etc/systemd/logind.conf.
  • Эти службы systemd создаются из блока шаблона службы, названного autovt@.service. Параметром шаблона, как и выше, является имя устройства в файле устройств виртуального терминала ядра в /dev/.
  • autovt@.service в конфигурации по умолчанию является символической ссылкой на getty@.service.
  • Именно getty@.service описывает запуск программы getty, настроенной на выполнение ввода/вывода через файл устройства виртуального терминала ядра.

Чтобы остановить все это, зайдите в /etc/systemd/logind.conf и настройте logind не автозапускать никакие autovt сервисы (и не резервировать никакие виртуальные терминалы, если вы хотите тщательно разобраться).

Однако это еще не все. Программа эмулятора терминала все еще активна в ядре, и все - от сообщений журнала, направляемых на VT ядра, до регулярного мигания курсора - будет заставлять эмулятор терминала вмешиваться в работу с фреймбуфером. Но это вопрос для кодирования программы, которая у вас есть, которая использует фреймбуфер для переговоров с программой эмулятора терминала ядра, на который уже был дан ответ здесь.

Вход в систему через последовательную консоль происходит совсем другим путем, кстати. Генератор generator создает экземпляр блока шаблонов serial-getty@.service во время загрузки, инстанцируя его один раз для каждого устройства консоли ядра, которое он находит или о котором ему сообщают.

Дальнейшее чтение

12
27.01.2020, 20:23

Теги

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