Вместо того, чтобы использовать команду startx
в файле .xinitrc
, возможно, лучше чтобы сообщить Systemd, что вы хотите загрузиться в графический интерфейс, а не в терминал.
Для этого просто выполните следующие действия:
$ sudo yum groupinstall "GNOME Desktop"
$ ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
Затем просто перезагрузитесь.
Последний бит будет связывать целевой уровень запуска 5 как ваш по умолчанию по отношению к Systemd.
Для этого также можно использовать Systemd. Это, пожалуй, лучший метод, поскольку вы управляете состоянием системы напрямую через Systemd и его интерфейсы командной строки.
Вы можете увидеть текущую цель по умолчанию:
$ sudo systemctl get-default
multi-user.target
А затем изменить ее на графическую:
$ sudo systemctl set-default graphical.target
В Systemd цели runlevel5.target и graphical.target идентичны. То же самое с runlevel2.target и multi-user.target.
Runlevel Target Units Description
0 runlevel0.target, poweroff.target Shut down and power off the system.
1 runlevel1.target, rescue.target Set up a rescue shell.
2 runlevel2.target, multi-user.target Set up a non-graphical multi-user system.
3 runlevel3.target, multi-user.target Set up a non-graphical multi-user system.
4 runlevel4.target, multi-user.target Set up a non-graphical multi-user system.
5 runlevel5.target, graphical.target Set up a graphical multi-user system.
6 runlevel6.target, reboot.target Shut down and reboot the system.
Нет. В обоих случаях вы получите новый дескриптор файла, выделенный и сохраненный в newFD
, читая из подстановки процесса. Функциональной разницы нет. Поведение ошибки может слегка различаться между ними, но в этом случае это не должно быть заметно.
Метод 1 может быть немного более прозрачным в отношении времени жизни fd (он не ограничивается только циклом while в любом случае )и помещает источник ближе к тому месту, где он используется. Я, вероятно, предпочел бы написать так для ясности, но практической разницы нет. Дескриптор файла должен быть закрыт после этого в любом случае.
Вы можете написать это в любом стиле, который вы предпочитаете использовать, и оба варианта будут в порядке.
Обратите внимание, что while read
не открывает дескриптор файла :выполняются обычные операции перенаправления оболочки, которые существуют для любой команды с while
или exec
в качестве команды. Цикл while
считается одной составной командой и выполняется внутри вызывающей оболочки. Все обычные вещи, которые могут быть присоединены к команде, также могут быть связаны с циклом while.
Существует некоторое особое поведение для перенаправлений с exec
при перенаправлении стандартного потока ввода-вывода (или другого уже -открытого FD ):он будет постоянно манипулировать текущей средой оболочки, и не только подоболочка, которая запускает реальную команду. Однако это не относится к этой ситуации с {newFD}<...
.
При динамическом распределении нового FD таким образом, FD всегда присваивается родительскому, а не дочернему элементу, иначе переменная будет бесполезной. Это означает, что любая команда будет работать, и даже
: <{newFD} <(...)
делает то же самое, что и exec {newFD}< <(...)
.