
Я хочу выполнить некоторую команду на специальном tty (например, tty2) при запуске Linux, чтобы каждый раз при перезагрузке системы эти команды выполнялись на этом tty. Я использовалэтотссылку, чтобы сделать это.
Работает отлично, но проблема в том, что при запуске мне нужно войти в нужный tty, а затем выполнить команды. Есть ли способ войти в tty с помощью какой-то команды в начале? Спасибо
решение1
На мой взгляд, более простым решением для запуска программы было бы объединить флаг --autologin
и getty
функцию, которая запускает нужные вам команды из .bashrc
.
Часть 1: автоматический вход в getty
Как вы знаете или не знаете, TTY открываются с помощьюпрограмма gettyкак автозагрузочная служба в /etc/init/
каталоге. Для Ubuntu программа по умолчанию — agetty
, которая имеет --autologin
флаг. Таким образом, мы можем сделать следующее:
В терминале запустите, sudo nano /etc/init/tty1.conf
чтобы открыть файл init для TTY1 (обратите внимание, что TTY1 — это всего лишь пример, вы можете выбрать любой другой). Измените строку
exec /sbin/getty -8 38400 tty1
к
exec /sbin/getty --autologin userName -8 38400 tty1
Замените userName
на свое фактическое имя пользователя.
Часть 2: запуск функции при входе в оболочку
В системах Linux/Unix есть эта милая маленькая программа, tty
которая сообщает, какой терминал вы используете в данный момент. Например, в gnome-terminal она бы сообщила что-то вроде
$ tty
/dev/pts/27
Однако в TTY1 он будет сообщать
$ tty
/dev/tty1
Зная это, мы можем создать функцию в верхней части нашего $HOME/.bashrc
файла
function testTTY
{
isTTY=$(tty | awk '{if ($0~/\/dev\/tty.*/) {print "true"}else{print "false"}}')
if [ $isTTY == "true" ]; then
printf "You are in virtual console\n"
printf "current disk usage is"
df
fi
}
Затем в нижней части .bashrc
сделайте вызов вашей функции, просто как testTTY
. Итак, сначала определите функцию, а потом вызовите ее.
Примечания:
- разместить пользовательские команды между
if [];then ...fi
- Если вам нужен определенный
isTTY
код TTY, измените его на этот:isTTY=$(tty | awk '{if ($0=="/dev/tty1") {print "true"}else{print "false"}}')
решение2
выполните следующие шаги.
Сначала установите mingetty: $ sudo apt-get install mingetty
5.2) Отредактируйте /etc/init/tty1.conf
/* Для установки root в качестве логина по умолчанию */
Изменить: exec /sbin/getty -8 38400 tty1
Кому: exec /sbin/mingetty --autologin root --noclear tty1
/* Для создания обычного пользователя в качестве логина по умолчанию */
exec /bin/login -f abcuser < /dev/tty1 > /dev/tty1 2>&1