Выполнить программу ncurses после загрузки

Вы всегда найдете информацию о новых подключенных устройствах в dmesg и /var/log/messages.

Для bluetooth вы можете проверить с помощью: hcitool dev

Для usb устройств попробуйте lsusb (-v).

Другие полезные команды: lshw (-short), hwinfo (--short) (если установлена), lspci (-v), lsblk, df -h, fdisk -l, multipath -ll, mount, dmidecode, cat /proc/scsi/scsi, hdparm -i /dev/sda. Существует множество вариаций этих команд в зависимости от ваших потребностей.

2
23.10.2016, 00:51
2 ответа

Итак, после некоторого гугления я нашел два решения:

https://serverfault.com/questions/323289/replacing-tty-with-a-script-in-centos-6

и

https://www.centos.org/forums/viewtopic.php?t=2414

В итоге я пришел к следующему:

1) Создайте '/etc/init/launch. conf" с таким содержанием:

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [S016]
respawn
console owner
exec /usr/bin/openvt -c 1 -w -f -- /usr/sbin/setup

В этом примере он запускает программу настройки в текстовом режиме

2) Отредактируйте '/etc/init/start-ttys.conf', чтобы заменить tty на launch:

start on stopped rc RUNLEVEL=[2345]

env ACTIVE_CONSOLES=/dev/tty[1-6]
env X_TTY=/dev/tty1
task
script
    . /etc/sysconfig/init
    for tty in $(echo $ACTIVE_CONSOLES) ; do
        [ "$RUNLEVEL" = "5" -a "$tty" = "$X_TTY" ] && continue
        #initctl start tty TTY=$tty
        initctl start launch TTY=$tty
    done
end script

Я не знаю, лучшее ли это решение, но оно работает, и программа настройки отображается после загрузки.

0
27.01.2020, 21:54

Ответ M. Dickey systemd немного расплывчатый. Вот подробности для операционной системы systemd.

Служба, которая представляет запрос на вход в систему, является экземпляром шаблона getty@.service, getty@tty6.serviceдля службы входа, например, на tty6. Чтобы заменить это своей собственной службой на таком терминальном устройстве, вам нужно сделать две вещи.

Создайте определение службы.

Это довольно просто:

# /etc/systemd/system/my-terminal-ui@.service

[Unit]
Description=Custom user interface on %I
Documentation=https://unix.stackexchange.com/a/318336/5132
Conflicts=getty@%I.service
Before=getty.target

[Service]
ExecStart=/usr/local/sbin/my-custom-user-interface
StandardInput=tty
StandardOutput=tty
Restart=always
RestartSec=1
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
SendSIGHUP=yes

[Install]
WantedBy=multi-user.target

Это сервисная единица шаблона , которая будет создана с именем виртуального терминального устройства ядра в качестве параметра шаблона.

Убедитесь, что ваша служба автоматически запускается при начальной загрузке.

Это более сложная часть.

Для начала вам нужно решить , на каком виртуальном терминальном устройстве ядра это будет работать. Здесь в игру вступает несколько фрагментов информации:

  • В мире Fedora с 2008 года графический пользовательский интерфейс использует первое виртуальное терминальное устройство ядра, tty1. Вы должны выбрать между отказом от использования этого виртуального терминального устройства и отказом от использования (или ручной настройки )графического пользовательского интерфейса.
  • systemd пытается запросить -запуск служб входа в систему на виртуальных терминалах ядра до максимального значения, установленного в NAutoVTsв файле конфигурации logind.conf. По умолчанию это от tty1до tty6.
  • Это оставляет tty7свободным в мире Fedora. Но в мире Debian, несмотря на то, что Debian теперь является операционной системой systemd, графический интерфейс пользователя использует tty7. Возможно, вы захотите принять во внимание перенос на Debian.
  • Мир systemd пытается сделать виртуальный терминал ядра #6 приглашение для входа в систему, которое «всегда там», то, которое вы нажимаете на мышечную память Control + Alt + F6 для.

Допустим, вы выбираете tty5.

Вам нужно остановить вход в систему по требованию -, запуская autovt@tty5.service, что является другим названием getty@tty5.service, всякий раз, когда пользователь переключается на виртуальный терминал ядра #5. Вы можете сделать это, понизив NAutoVTsустановка в logind.confот 6 до (произнесите )4.

Вам необходимо убедиться, что ваш сервис автоматически запускается при начальной загрузке системы, т. е. что он «включен»:

systemctl enable my-terminal-ui@tty5.service

Альтернативы

Есть и другие способы сделать это.

служба без -шаблона

Вместо my-terminal-ui@.serviceвведите my-terminal-ui.serviceи закрепите имя оконечного устройства в устройстве, заменив %Iна (, скажем)tty5.

Я дал это как определение шаблона, потому что это упрощает выбор, отличный от tty5.

используя одно изautovt@ttyN вместо своего имени

Вы можете использовать /etc/systemd/system/autovt@tty5.serviceв качестве имени определения службы. Это заменит создание экземпляра шаблона autovt@.service.

Преимущество этого подхода заключается в том, что вам не нужно возиться с NAutoVTsи включением службы вообще, и вы можете просто оставить logind для запроса -запуска вашей службы всякий раз, когда пользователь переключается на виртуальный терминал ядра. #5.

Недостатком является то, что механизм запуска по запросу -был разработан для того, чтобы не запускать процессы входа на неиспользуемых виртуальных терминалах ядра. Таким образом, ваша служба не будет запускаться при начальной загрузке системы, а будет запускаться только при первой активации виртуального терминала ядра #5. Этот запуск по запросу -может быть не тем, что вам нужно. Другие части вашей пользовательской системы могут ожидать, что ваша служба уже запущена , например, начиная с начальной загрузки.

редактированиеgetty@ttyN

Люди, привыкшие к /etc/ttysи /etc/inittab, рассматривают изменение getty@tty5.serviceкак способ что-то делать. Они запускают такие команды, как

systemctl edit getty@tty5.service

и добавьте переопределение, в котором указано

[Service]
# This blank assignment is not a mis-print.
ExecStart=
ExecStart=/usr/local/sbin/my-custom-user-interface

Это имеет несколько проблем.

Сделать так, чтобы служба с именем getty не запускала программу {a, min, f} getty— не очень удобная идея. Спустя годы, когда вы забудете, что вы здесь сделали, или когда кто-то другой возьмет на себя администрирование такой системы, не будет очевидно, что службы «getty» не всегда работают gettyполезность.

Не думайте о getty@.serviceкак о пространстве для всего, что запускается на этом терминале , которое можно модифицировать по мере необходимости. Это не совсем системный способ думать об этом. getty@.serviceзапускает программу "getty". Служба, которая запускает совершенно другую программу, которая не запускает ничего похожего на службу «getty», должна быть отдельным определением службы сама по себе.

Более того :Отдельное определение службы позволяет не определять службу как что-то вроде службы "getty". Вышеупомянутое определение службы копирует большую часть поведения службы "getty", в том числе изо всех сил пытается очистить ваш экран(так, как мир хочет, чтобы вы делали ). Но вы можете не захотеть, скажем, TTYReset=yesили возиться с utmpxв такой службе, как ваша, которая на самом деле не является службой «входа» и может не захотеть, чтобы ее экран очищался так агрессивно.

Более того :Отдельное определение службы проще изменить в будущем. Перейти с tty5(, если это неудовлетворительно, )на tty8можно просто с помощью вышеупомянутого шаблона. Просто создайте экземпляр на tty8вместо tty5. Несколько сложнее отменить -выбор набора локальных настроек из getty@tty5.service, а затем повторно -настроить их против getty@tty8.service.

псевдоним autovt@tty5наmy-terminal-ui@tty5

Это логическое продолжение редактирования getty@tty5.service, так как очевидно, чтоautovt@ttyN псевдонимы представляют собой все, что должно быть запущено здесь механизм, который позволяет заменять другие вещи дляgetty@ttyН .

Но он страдает теми же вышеупомянутыми недостатками, что и использование имени autovt@tty5.serviceнапрямую, поскольку он связан с попытками logind не запускать службы входа в систему , что может быть не тем, что вам нужно. На самом деле это то, что должно быть требование-начато здесь пользователем logind.

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

4
27.01.2020, 21:54

Теги

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