Как называется коммутационная среда на общесистемном терминале?

Какая у вас версия 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);

0
30.12.2016, 18:51
2 ответа

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

Система реализует терминальный вход посредством запуска программы 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 и так далее. Они не используют напрямую физический фреймбуфер и устройства ввода человека, а используют псевдотерминальные устройства.

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

9
28.01.2020, 02:15

Система инициализируется либо старым SysVinit, либо новым systemd. В зависимости от вашего дистрибутива.

В SysVinit есть уровни выполнения. Просто введите runlevel в терминале, чтобы получить номер

  • 0 Power Off
  • 1 / S Однопользовательский режим ( .. для простоты )
  • 2 Multi Пользовательский текст (по умолчанию на основе Debian)
  • 3 Многопользовательский текст (по умолчанию на основе Red Hat)
  • 4 -
  • 5 Многопользовательский + графический интерфейс
  • 6 Перезагрузка

В systemd все по-другому. Вы получаете unknown или ошибку при вводе runlevel

systemctl list-units --type=target

печатает список целей, например:

  • graphical.target
  • multi-user.target
  • ...

] На уровне выполнения 2 или без graphical.target

у вас есть только текстовая консоль.Вы можете переключаться между терминальными сеансами, нажимая CTRL + F [1-7]

на уровне выполнения 5 или graphical.target

OpenBox, KDE независимо от того, что запущено (см. ~ / .xinitrc я полагаю), основанный на X11 / Xorg / Wayland / Mir, и горячие клавиши отображаются по-разному. Ctrl + Alt + F2 по умолчанию открывает tty2.

2
28.01.2020, 02:15

Теги

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