web-dev-qa-db-ja.com

起動時にバックグラウンドでdhcpcdを起動する方法は?

Arch Linuxで次のことを実行したいと思います。起動時にバックグラウンドでdhcpcdを起動すると同時に、自動的にログインしてXウィンドウサーバーを起動します。

これが私がこれまでに試したことです。まず、次を使用して自動ログインを有効にしました ドロップインスニペット to getty @ tty1:

[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM

また、.bash_profileファイルにexec startxを追加しました。一緒に、これらは起動時に正常にログインし、Xを起動します

次に、systemctlを使用してdhcpcdサービスを有効にしました:Sudo systemctl enable [email protected](enp4s0は私のイーサネットポートです)。これにより、dhcpcdが正常に起動し、ログインします。ただし、接続のセットアップ中、ログインプロンプトは約10秒遅れます。これは、少し面倒です。 X環境が表示されているときに、バックグラウンドでdhcpcd接続を実行したいと思います。

そこで、After=getty@tty1を実行して次のスニペットを作成することにより、dhcpcdサービスファイルにSudo systemctl edit [email protected]を追加しました。

[Unit]
[email protected]

この後、起動時にログイン画面が表示されなくなり、ログを確認すると、systemdが依存関係ループを検出し、gettyを開始しなかったことがわかります。

おそらくこれは、gettyのタイプが「idle」であるためです。これは、ジョブオーダーの最後から開始することを意味します。そこで、gettyサービスファイルにType=simpleを設定しました。ただし、特権のないユーザーは起動時にログインできず、ログインプロンプトが表示されないというエラーが表示されるようになりました。どうすればいいのかわからない。

1つの解決策は、dhcpcdをbash_profileに配置することです。しかし、systemdだけを使用して私が望むことを達成する方法はありますか?将来、この方法で他のサービスを実行したいと思うかもしれません。bash_profileを乱雑にしたくないのです。

1
alligator

Arch Wiki で答えを見つけました。

解決策は、代わりにdhcpcdの次のドロップインスニペットを使用することです。

[Service]
ExecStart=
ExecStart=/usr/bin/dhcpcd -b -q %I

-bフラグはバックグラウンドでdhcpcdを開始します 、-qは出力を「静か」にして、出力が端末を汚染しないようにします(エラーと警告を除く)。

デフォルトでは、dhcpcdのタイプはforkingであり、systemdによって-wフラグを指定して呼び出されます。 -wフラグは、IPを取得するまでフォークしないようにします。また、Type = forkingであるため、バックグラウンドを実行せず、それが発生するまでブートプロセスを続行します。これには数秒かかります。これは、約10秒の起動遅延を説明しています。 -bですぐにバックグラウンド処理することにより、この遅延を防ぎます。

1
alligator