Как изменить уровень запуска в systemd?

27

Довольно просто, я пытаюсь изменить уровень запуска. Все, что я нахожу в Интернете, указывает на файл, расположенный в:

/etc/init/rc-sysinit.conf

Здесь я попытался изменить «DEFAULT_RUNLEVEL» на 3 или что-нибудь еще, и это не имеет значения (исходное значение было 2, что также не имело особого смысла). Несмотря ни на что, моя машина загружается полностью, и когда я проверяю команду уровня запуска, я каждый раз вижу «N 5» как результат.

Как мне изменить уровень запуска? Я бы предпочел не отменять это через grub или какой-то другой механизм обхода. И я не ищу, как конкретно отключить X.

Все инструкции, которые я нашел в Интернете, были немного устаревшими, что-то изменилось с 16.04?

gnomed
источник
Итак, вы хотите изменить его вручную после загрузки или автоматически загружаться на другой уровень запуска каждый раз?
Byte Commander
автомат каждый раз. Он был настроен с рабочим столом Ubuntu, но теперь я хочу понизить уровень запуска и поместить его в угол где-нибудь.
gnomed
На самом деле, почему вы хотите изменить уровень запуска? Вы хотите только загрузить интерфейс терминала вместо загрузки рабочего стола? В этом случае вы должны вместо этого изменить стандартные целевые загрузки systemd при загрузке и добавить «текстовую» опцию ядра.
Byte Commander
4
Вероятно, потому что с 15.10 Ubuntu использует systemdвместо того, upstartи этот файл, о котором вы говорите, для upstart. Если вы читаете даже более старые статьи, вы также найдете способы для старых init. Но с помощью systemd, вы можете просто переключаться между графическим интерфейсом и текстовым режимом, используя sudo systemctl start graphical.targetи sudo systemctl start multi-user.target.
Byte Commander
5
Всем рецензентам Это актуальный вопрос! Там IS способ изменить уровень (или нет это называется «уровень выполнения» или «цели») с использованиемsystemctl isolate
Рон

Ответы:

50

Ubuntu 16.04 использует systemd вместо init, и поэтому понятие runlevelsзаменяется термином targets. Таким образом, действительно существует соответствие между уровнями запуска на основе init и целями на основе systemd:

   Mapping between runlevels and systemd targets
   ┌─────────┬───────────────────┐
   │Runlevel │ Target            │
   ├─────────┼───────────────────┤
   │0        │ poweroff.target   │
   ├─────────┼───────────────────┤
   │1        │ rescue.target     │
   ├─────────┼───────────────────┤
   │2, 3, 4  │ multi-user.target │
   ├─────────┼───────────────────┤
   │5        │ graphical.target  │
   ├─────────┼───────────────────┤
   │6        │ reboot.target     │
   └─────────┴───────────────────┘

Теперь, чтобы просто изменить «уровни запуска» в 16.04, вы можете использовать, например, для:

sudo systemctl isolate multi-user.target

Чтобы сделать этот уровень по умолчанию "runlevel", вы можете использовать:

sudo systemctl enable multi-user.target
sudo systemctl set-default multi-user.target

От man systemctl

   isolate NAME
       Start the unit specified on the command line and its dependencies and stop all others. If
       a unit name with no extension is given, an extension of ".target" will be assumed.

       This is similar to changing the runlevel in a traditional init system. The isolate command
       will immediately stop processes that are not enabled in the new unit, possibly including
       the graphical environment or terminal you are currently using

Также посмотрите, man systemd.specialчтобы узнать больше о целях в systemd.

Рон
источник
Привет @ Ron ваш ответ отличный Я сделал это для того, чтобы установить официальный драйвер Nvidia, но теперь мой экран не показывает ничего, кроме синего экрана. Как я могу это исправить ? Заранее спасибо за вашу помощь.
Рафаэль Тубнер
Войдите в режим восстановления из Grub, затем от имени root вернитесь к предыдущему уровню запуска.
LottaLava
Да. Я только собирался прокомментировать, как парням, дающим эти чрезвычайно приятные команды перехода от загрузки графического интерфейса пользователя в текстовый режим, вообще не нужно рассказывать нам о том, как вернуться из текстовой загрузки в загрузку графического интерфейса.
nyxee
Итак, чтобы отметить, что я бегу sudo systemctl set-default multi-user.targetв режиме графического интерфейса пользователя, при перезагрузке у меня появляется пустой экран, что является хорошим признаком того, что графический интерфейс не загружается, поэтому я нажал, Ctrl-Alt-F3чтобы войти в Runlevel 3, сделал то, что мне было нужно (установил NVIDIA- CUDA), запустите sudo systemctl set-default graphical.targetи вернитесь к экрану входа в GUI. Но мне не удалось войти в систему. Это правильный способ вернуться к предыдущему уровню выполнения ?
nyxee
2
@nyxee - Да, sudo systemctl set-default graphical.targetэто верный способ вернуться к среде рабочего стола с графическим интерфейсом. Ошибка входа в систему не связана с переключением между уровнями выполнения - это больше похоже на проблему с циклом загрузки nVidia . Чтобы убедиться в этом, вернитесь к уровню запуска 3, удалите драйверы nVidia и Cuda, установите драйвер nVidia из репозитория, установите для уровня по умолчанию уровень запуска 5 (graphical.target), затем перезагрузите компьютер и посмотрите, сможете ли вы войти в систему.
Энди Тёрфер