systemdでデスクトップに自動ログインするにはどうすればよいですか?


20

できればログインマネージャを使用せずに、デスクトップ環境に自動的にログインするようにsystemdを設定するにはどうすればよいですか?私はArchを使用しています。


どのログインマネージャーを使用していますか?一部(GDM、KDM、iircなど)はすでに自動ログインをサポートしているため、それらに対してサービスを有効にするだけで済みます。
ヴィーランド

私は現在SLiMを使用しており、自動ログインするように構成できますが、ディスプレイマネージャーがなければ、ブートプロセスはより速く、よりちらつきが
なくなります

ああ、私はあなたの質問を読み違えました。
ウィーランド

回答:


22

これはArch Wikiで説明されています:

次のようにgetty@.serviceコピーして、新しいサービスファイルを作成します。/etc/systemd/system/

cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service

これは基本的に、既存のgetty@.serviceファイルautologin@.serviceを新しいファイルにコピーし、自由に変更できます。/etc/systemd/systemサイト固有のユニットファイルが保存される場所であるため、コピーされます。/usr/lib/systemd/systemパッケージによって提供されるユニットファイルが含まれているので、そこに何も変更しないでください。

次にautologin@.service、tty1のように、自動ログインするttyのgettyサービスにシンボリックリンクする必要があります。

ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service

これまでは、これは通常のgetty@.serviceファイルと同じですが、最も重要な部分は、autologin@.service実際に自動的にログインするように変更することです。そのためには、次のExecStart行を変更するだけです

ExecStart=-/sbin/agetty -a USERNAME %I 38400

違いExecStartの行getty@.serviceautologin@.serviceあるだけで-a USERNAME、自動的にユーザー名をUSERNAMEをユーザにログインするためにagettyではを伝えています。

これで、systemdにデーモンファイルをリロードしてサービスを開始するように指示するだけで済みます。

systemctl daemon-reload
systemctl start getty@tty1.service

(tty1に既にログインしている場合にサービスが適切に開始するかどうかはわかりませんが、最も安全な方法は、サービスを開始する代わりに再起動することです。

その後、自動的にXを起動する場合は、次のスニペットをに挿入します~/.bash_profilewikiから再度取得します)。

if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
    exec startx
fi

~/.xinitrcデスクトップ環境を起動するには、変更する必要があります。その方法はDEに依存し、おそらくArch wikiでも説明されています。


agetty arg%Iとは何ですか?
エドワードアンダーソン

最後に `文字がありますか?それは必要ですか?どういう意味ですか?
rien333

@ rien333不要です。答えから削除しました。
ヴィーランド

2
File existsシンボリックリンクを実行するとエラーが発生します
Self

ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service上書きに使用します。
マヌエルシュミッツバーガー

5

ファイルを直接変更します/etc/systemd/system/getty.target.wants/getty@tty1.service(これはへのシンボリックリンクです/lib/systemd/system/getty@service):

-a/--autologin USERNAME行に追加します。

ExecStart=-/sbin/agetty --noclear %I $TERM

したがって:

ExecStart=-/sbin/agetty -a USERNAME %I $TERM

また-o '-p -- \\u'、現在のArchインストールに存在するものを削除することもできUSERNAMEます。これは、ログインを開始しますが、パスワードを要求するためです。

再起動後、自動的にログインされます。

Psの変更、ファイル名getty@tty1.servicettyあなたがにログインします。


わかりやすくするために注意してください:シンボリックリンクの場合は、シンボリックリンクを新しいファイルに置き換え、その新しいファイルを編集します。
エドワードアンダーソン

1

IMO、Arch Wikiは現在、はるかに単純なソリューションを推奨しています。

ヘルパー(systemctl edit getty@tty1)を実行するか、手動で行ったことを実行します。

mkdir -p /etc/systemd/system/getty@tty1.service.d/
touch /etc/systemd/system/getty@tty1.service.d/override.conf

(どちらの方法でも)入力するテキストは(ユーザー名を適切に変更するようにしてください):

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

:空の行は重要です!(確かに私は理由がわかりません...)

ここで、再起動(shutdown -r 0... login: username (automatic login)すると、以前にユーザー名/パスワードの入力を待機していた場所で効果が発生します


再起動して自動ログインしたら、あなたが私のようで、このシステムにSSHで接続したい場合は、おそらく次を実行する必要があります。

systemctl enable sshd.service

シンボリックリンクを作成します(例ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'


空の行は最初にExecStartエントリをクリアし、次の行は新しいexecコマンドを導入します。また、一部のシステム(Ubuntu)ではagetty実行可能ファイルがにある可能性がある/sbin/agettyため、最初に元の/etc/systemd/system/getty.target.wants/getty@tty1.serviceファイルを確認する価値があります。
プラットホーム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.