Что такое /etc/inittab

@Vlastimil спасибо за вашу расширенную помощь и рекомендации...

Я смог исправить ошибку, удаливgnome-themes-standard-data

sudo apt remove gnome-themes-standard-data

Это помогло, ошибка говорит, что это сломает мою версию gnome -темы -стандартные -данные , если установлена ​​тема adwaita -icon -...

Следовательно, кпечатка была моей версией gnome-themes-standard-data.

Выполнил обновление sudo apt updateи обновил linux mint, несмотря на ряд проблем... в итоге он обновился до Сары, а оттуда я обновился до Сони.

0
05.11.2019, 10:04
3 ответа
  1. Да, при условии, что линии присвоен уникальный идентификатор и сконфигурированная терминальная линия доступна:

    S1:12345:respawn:/sbin/getty -L 115200 ttyS1
    

    откроет терминал на последовательном порту, подключенном к ttyS1.

  2. Строки в inittabне являются последовательными и не связаны с логином. Каждая строка описывает действие, которое должно быть выполнено на заданном наборе уровней выполнения. Таким образом, si::sysinit:/etc/init.d/rcSуказывает, что initдолжен запускать /etc/init.d/rcS, когда он обрабатывает инициализацию системы; это происходит до того, как станет возможным вход в систему. (См. справочную страницу inittab(5)для получения подробной информации ).

    Чтобы назначить разные команды разным gettys на определенных терминалах, вы должны настроить сам gettyвызов, например, изменив loginпрограмму, которую он запускает (параметр -lв большинстве gettyреализации):

    S0:12345:respawn:/sbin/getty -L 115200 -l /bin/my-t0-login ttyS0
    S1:12345:respawn:/sbin/getty -L 115200 -l /bin/my-t1-login ttyS1
    
  3. /etc/init.d/rc 5запускается до того, как становится возможным вход в систему, и программы, которые он запускает, не подключены к терминалу («правильно», что и делает getty— он открывает для вас терминал и подключает к нему запущенные программы ), поэтому при вызове su nobody -c /bin/shоболочка не находит ожидаемую настройку терминала и в результате отключает управление заданиями. Приглашение sh-4.3$— это приглашение по умолчанию в Bash 4.3 при запуске как /bin/sh.

  4. Если предполагается, что ваша программа запускается только после входа пользователя в систему, вы можете подключить ее к последовательности входа, используемой getty; но такая программа будет работать как root. В зависимости от того, что вам нужно,вам, вероятно, лучше использовать сценарий инициализации, а не настройку /etc/inittabили sudoи сценарии запуска оболочки.

0
28.01.2020, 03:08

Вопрос 1:

Да, добавляя больше gettyлиний, вы можете получить больше терминалов параллельно. Только один gettyможет быть связан с одним оконечным устройством одновременно, поэтому возможен только один gettyна последовательный порт. На обычном настольном ПК ядро ​​Linux определяет ряд виртуальных консолей, доступных с помощью комбинации клавиш Control + Alt + FX и соответствующих /dev/ttyXустройства (X = число ). Точная настройка может варьироваться в зависимости от дистрибутива, но обычно в основных дистрибутивах первые 6 или около того устройств /dev/ttyXимеют настроенные для них getty, когда система работает нормально. Вы можете использовать команды openvtи deallocvtдля добавления или удаления виртуальных консолей и запуска процессов (, которые могут быть любыми процессами, не обязательно gettyс )на них.

/dev/tty0является специальным :и относится к той виртуальной консоли, которая выбрана в данный момент. /dev/console— это аналогичное специальное устройство, указывающее на любое устройство TTY, определенное как основная системная консоль уровня ядра -. В настольных системах по умолчанию это фактически псевдоним /dev/tty0, но с помощью параметра загрузки console=вы можете переключить его на последовательный порт. Напр. в некоторых встроенных архитектурах это может быть последовательный порт по умолчанию. Такие утилиты, как xconsole, также могут выступать в качестве дополнительных выходных данных для /dev/console.

В те времена, когда компьютеры были большими много -шкафами в выделенных компьютерных залах, отправка сообщения на /dev/consoleбыла способом связаться с -дежурным системным оператором, физически находящимся рядом с компьютером, что могло быть полезно для запросов, например меняйте ленты или пакеты дисков. В современных системах сообщения, отправляемые специально на /dev/console, обычно являются сообщениями о загрузке/выключении,или, возможно, крайний -канал прибежища для срочных предупреждений об условиях сбоя, которые могут повлиять на доступ к сети или хранилищу или даже привести к сбою ядра :«лицо, отвечающее за физическое оборудование, должно видеть это и обычные файлы журнала непригодны для использования по какой-либо причине».


Вопрос 2:

Боюсь, здесь у вас неправильное представление. Строка sysinitи другие строки /etc/inittabникак не связаны с процессами getty. Каждая команда, выполняемая из inittab, если не указано иное, имеет свои стандартные потоки ввода, вывода и ошибок, связанные с /dev/console.

Строки gettyфактически определяют устройство TTY, которое они будут использовать, а процесс gettyимеет встроенный код, который назначит это устройство TTY для себя и всех своих дочерних процессов, если/пока пользователь не запустит оболочку и решает перенаправить эти потоки другим способом. Это и инициализация настроек устройства TTY являются самой большой частью цели getty:отображения /etc/issueи приглашения для входа в систему, принятия имени пользователя, установки переменной среды TERM и запуска следующего шага входа в систему TTY. процесс (обычно /bin/login, но настраиваемый )фактически является лишь второстепенной частью.

Обратите внимание, что существует соглашение о том, что для устройств TTY поле идентификатора из двух символов -в первом столбце строки inittabдолжно соответствовать имени рассматриваемого устройства TTY после префикса /dev/tty. поэтому /dev/ttyS0получит идентификатор строки inittab S0и так далее. Для вещей, которые вообще не обязательно связаны с каким-либо TTY (или просто выводят экстренные данные в /dev/console при необходимости ), ID может быть любым, который не конфликтует с идентификаторами строк устройства TTY.

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

Если вы настроите строку inittabдля запуска скрипта, вы сможете, например, посмотреть, существует ли конкретное /dev/ttyXвиртуальное консольное устройство. Если это не так, вы можете использовать openvt -c X <command>, чтобы создать виртуальную консоль и запустить на ней команду; если виртуальное консольное устройство уже существует, вы можете просто запустить любую команду, которую вы хотите, со стандартным вводом, выводом и ошибкой, перенаправленной на него. Например, вы можете указать такую ​​строку inittab:

6:345:respawn:/usr/local/sbin/myscript

, а затем /usr/local/sbin/myscriptс чем-то вроде этого (заявление об отказе от ответственности :не тестировалось, у меня сейчас нет под рукой системы с SysVinit, не стесняйтесь редактировать, если вы можете улучшить это):

#!/bin/sh
if [ -c /dev/tty6 ]; then
    exec <some command> </dev/tty6 >/dev/tty6 2>&1
else
    exec openvt -c 6 -w <some command>
fi

respawnв строке inittabгарантирует, что процесс будет автоматически перезапущен, если он по какой-либо причине умрет. 345— это список уровней выполнения SysVinit, на которых должен выполняться этот процесс. Если вам нужно, чтобы он работал на всех обычных уровнях выполнения, введите 12345.

Обратите внимание: это работает, как задумано, только если строка inittab расположена после строки sysinit, поэтому можно считать, что инициализация udevзавершена. Если вы хотите сделать это в начале процесса инициализации, вам, возможно, придется позаботиться о создании фактических узлов устройств для устройств, для которых драйверы уже загружены первыми; после запуска udevон должен автоматически создавать узлы устройств по мере инициализации драйверов устройств.

При использовании последовательного порта команда openvtне применяется.

Так что да, вы определенно можете прикреплять разные команды к разным устройствам TTY. Это помогает, если команды имеют встроенные -средства для этого, подобные gettys, но вы можете сделать это и с помощью сценариев.

(Если вы настроили что-то более сложное, чем простой tail -f, чтобы постоянно просматривать какой-либо журнал в другой -неиспользуемой виртуальной консоли,вы должны прочитать man setsidи посмотреть, применимо ли это к тому, что вы планируете.)


Вопрос 3:

Инициализация сеанса TTY для конкретного пользователя, отличного от -root, — это нечто большее, чем просто запуск оболочки с su.

Сообщения об ошибках

sh: cannot set terminal process group (1618): Inappropriate ioctl for device
sh: no job control in this shell

, вероятно, вызваны тем, что оболочка связана с устройством /dev/console, а не с конкретным устройством TTY. Поскольку /dev/console— это всего лишь псевдоним текущей системной консоли, он не будет иметь полного набора функций ioctl управления TTY, доступных для него.

Если нет сценария входа в систему для присвоения более полезного значения переменной среды PS1, приглашение по умолчанию для /bin/shможет быть просто sh-<version>$.


Вопрос 4:

Да, можно. Вы должны указать «последний сценарий» как строку типаwaitinittabи поместить ее перед строкой getty, соответствующей вашей последовательной линии.

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

0
28.01.2020, 03:08

Только что секунда (долго! )ответ был опубликован. Я должен сказать, что первый объясняет довольно хорошо. На данный момент я хочу прокомментировать третий пункт :. Это вопрос не столько времени, сколько процессов, управляющих «настоящим виртуальным» tty, а не просто «пустышкой консоли».

Прежде чем вы сможете запустить оболочку «с управлением заданиями», вы должны настроить, т. е. открыть ttyN. «Общая» команда — getty. Из этого tty -вы можете запустить оболочку, а не только после этого.

Это похоже на попытку сначала запустить оконный менеджер, а затем xorg, вместо того, чтобы «загрузить» их вместе с xinit. Я думаю. «лидер сессии».


Из-за

xx:12:...:program

и, наоборот,:

aa:1:...:pr_1
bb:1:...:pr_2

...вы получаете отношение N :M (вы также получаете беспорядок, если злоупотребляете --множеством RL, каждый из которых имеет множество разных программ ). Вы можете далеко зайти с этим, но с тех пор различные виды RC -«стандартов» взяли верх. "Ранкомс". С ними inittab выглядит просто, но вся сложность в этих скриптах.

Но ваш inittab выглядит просто и правильно -только последний комментарий и запись "z6"...

Может быть, вашему «су никто» просто нужно «гетти... ttyN» перед/вокруг. suвместо loginи нет респауна. Должен по крайней мере дать другое сообщение об ошибке, чем "неуместно".


Заключение (после прочтения 2-го ответа ):Вам не нужна сложная init.dсистема, необработанный inittab достаточно гибок.Просто нужно правильно понять концепцию и детали.

Вы можете установить три уровня выполнения :один с ttyN, один с ttySN и один RL, который запускает оба. Это параметр загрузки, который вы можете добавить с помощью загрузчика. Уровень запуска "5" в вашем случае только по умолчанию. Вы выбираете ядро, root= и уровень выполнения для инициализации.


Действие «возрождение» — это то, для чего на самом деле был нужен sysvinit. Большего он не делает, а меньшее можно было бы реализовать в скрипте. Но если вы выйдете из (или выйдете из строя )на «последнем» уровне оболочки, вам нужна подстраховка.

sysvinit может даже обнаружить неправильную конфигурацию, выдав ошибку "создание слишком быстро --игнорирование в течение 5 минут...".

0
28.01.2020, 03:08

Теги

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