Какая у вас версия busybox? Согласно https://git.busybox.net/busybox/tree/shell/ash.c, если копаться в exec
, можно встретить в строке 9352 или около того следующий код который, по-видимому, поддерживает exec [-a customname]...
execcmd(int argc UNUSED_PARAM, char **argv)
{
optionarg = NULL;
while (nextopt("a:") != '\0')
/* nextopt() sets optionarg to "-a ARGV0" */;
argv = argptr;
if (argv[0]) {
char *prog;
iflag = 0; /* exit on error */
mflag = 0;
optschanged();
/* We should set up signals for "exec CMD"
* the same way as for "CMD" without "exec".
* But optschanged->setinteractive->setsignal
* still thought we are a root shell. Therefore, for example,
* SIGQUIT is still set to IGN. Fix it:
*/
shlvl++;
setsignal(SIGQUIT);
/*setsignal(SIGTERM); - unnecessary because of iflag=0 */
/*setsignal(SIGTSTP); - unnecessary because of mflag=0 */
/*setsignal(SIGTTOU); - unnecessary because of mflag=0 */
prog = argv[0];
if (optionarg)
argv[0] = optionarg;
shellexec(prog, argv, pathval(), 0);
Они являются виртуальными терминальными устройствами ядра, мультиплексированными на физический фреймбуфер и устройства ввода человека программой эмулятора терминала, встроенной в само ядро. Для прикладных программ, работающих поверх ядра, они выглядят как любые другие терминальные устройства, например, последовательное терминальное устройство. (У них есть дисциплина линии, но нет управления модемом.)
Система реализует терминальный вход посредством запуска программы getty
(или эквивалентной) и программы login
, которые принимают учетные данные пользователя и вызывают сессии входа.
Программа X-сервер также должна использовать физический фреймбуфер и устройства ввода человека. Она должна договориться об их совместном использовании с эмулятором терминала ядра. Для этого она выделяет один виртуальный терминал и говорит ядру отключить его от эмулятора терминала ядра.
Вот почему кажется, что X-сервер "работает" на определенном терминале. Когда эмулятор терминала ядра видит аккорд горячей клавиши для переключения на выделенный виртуальный терминал, он передает управление фреймбуфером и устройствами ввода данных X-серверу. Когда X-сервер видит аккорд горячей клавиши для переключения на другой виртуальный терминал, X-сервер передает управление обратно.
Эти аккорды горячих клавиш не обязательно симметричны. На одной из моих систем аккорд горячей клавиши, реализуемый программой эмуляции терминала ядра для переключения на виртуальный терминал №2, - Alt+F2, в то время как аккорд горячей клавиши, реализуемый X-сервером для того же действия, - Ctrl+Alt+F2.
Когда дело доходит до графического входа, менеджер дисплеев обрабатывает запуск X-серверов с помощью greeter программ. Конечно, вы просто запускаете X-сервер напрямую и не используете диспетчер отображения. После проверки подлинности учетных данных пользователя, менеджер рабочего стола отображает окружение рабочего стола, которое состоит из набора клиентских X-приложений различной степени сложности. Для сложных настольных сред существует целый набор серверных программ, связанных между собой через настольную шину. (На одной из моих систем так называемый "маленький и легкий" редактор GNOME требует наличия брокера D-BUS и девяти других серверных программ.)
Некоторые из этих клиентских программ X могут быть другими эмуляторами терминала, эмуляторами пользовательского пространства, такими как LXTerminal, Unicode RXVT, GNOME Terminal, Terminate, roxterm, evilvte, xterm и так далее. Они не используют напрямую физический фреймбуфер и устройства ввода человека, а используют псевдотерминальные устройства.
Система инициализируется либо старым SysVinit, либо новым systemd. В зависимости от вашего дистрибутива.
В SysVinit есть уровни выполнения. Просто введите runlevel
в терминале, чтобы получить номер
В systemd все по-другому. Вы получаете unknown
или ошибку при вводе runlevel
systemctl list-units --type=target
печатает список целей, например:
] На уровне выполнения 2 или без graphical.target
у вас есть только текстовая консоль.Вы можете переключаться между терминальными сеансами, нажимая CTRL + F [1-7]
на уровне выполнения 5 или graphical.target
OpenBox, KDE независимо от того, что запущено (см. ~ / .xinitrc
я полагаю), основанный на X11 / Xorg / Wayland / Mir, и горячие клавиши отображаются по-разному. Ctrl + Alt + F2 по умолчанию открывает tty2.