首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在后台启动dhcpcd?

如何在后台启动dhcpcd?
EN

Unix & Linux用户
提问于 2019-12-07 23:34:03
回答 1查看 1.8K关注 0票数 1

我想在Arch上完成以下工作:在引导背景中启动dhcpcd,同时自动登录并启动X窗口服务器。

到目前为止我已经尝试过了。首先,我使用以下滴进片段对getty@tty1 1启用了自动登录:

代码语言:javascript
复制
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM

我还将exec startx添加到.bash_profile文件中。在一起,这些成功地将我登录到引导并启动X

接下来,我使用systemctl:sudo systemctl enable dhcpcd@enp4s0.service (enp4s0是我的以太网端口)启用dhcpcd服务。这成功地启动dhcpcd,然后登录我。但是,在建立连接时,登录提示符会延迟大约10秒,这有点烦人。我希望dhcpcd连接发生在后台,而我是一个X环境。

因此,通过运行After=getty@tty1并创建以下代码段,我将sudo systemctl edit dhcpcd@enp4s0.service添加到dhcpcd服务文件中:

代码语言:javascript
复制
[Unit]
After=getty@tty1.service

在此之后,我将不再在引导时获得登录屏幕,通过检查日志可以发现,systemd检测到了依赖项循环,并且从未启动getty。

这大概是因为getty的类型为“空闲”,这意味着它从作业顺序的最后开始。因此,我在getty服务文件中设置了Type=simple。但是,我现在收到一个错误,即不允许非特权用户在启动时登录,并且永远不能进入登录提示。我不知道该怎么做。

我意识到一个解决方案就是将dhcpcd放在我的bash_profile中。但是,是否有任何方法可以单独使用systemd来实现我想要的呢?今后,我可能希望以这种方式运行其他服务,而且我也不希望把我的bash_profile搞得一团糟。

EN

回答 1

Unix & Linux用户

发布于 2019-12-08 22:09:21

我在Arch Wiki上找到了答案。

解决方案是为dhcpcd使用下面的代码片段。

代码语言:javascript
复制
[Service]
ExecStart=
ExecStart=/usr/bin/dhcpcd -b -q %I

-b标志在后台启动dhcpcd。和-q使它“安静”,这样它的输出就不会污染终端(除了错误和警告)。

默认情况下,dhcpcd具有forking类型,并由systemd使用-w标志进行调用。-w标志阻止它分叉,直到它获得一个IP,并且因为它有Type=forking,所以它不会备份自己并继续引导进程,直到这一过程发生,这需要几秒钟。这解释了~10秒的引导延迟。通过立即用-b进行回线接地,我们可以防止这种延迟。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/556113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档