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を乱雑にしたくないのです。
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ですぐにバックグラウンド処理することにより、この遅延を防ぎます。