web-dev-qa-db-ja.com

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

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

20
fhucho

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

[email protected]にコピーして、/etc/systemd/system/と同様の新しいサービスファイルを作成します。

cp /usr/lib/systemd/system/[email protected] /etc/systemd/system/[email protected]

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

次に、その[email protected]を、自動ログインするttyのgettyサービスにシンボリックリンクする必要があります。

ln -s /etc/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected]

これまでは、これは通常の[email protected]ファイルと同じですが、最も重要な部分は[email protected]を変更して実際に自動的にログインすることです。そのためには、ExecStart行を読み取るように変更するだけです

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

[email protected]ExecStart行と[email protected]の違いは、agettyにユーザー名USERNAMEで自動的にログインするように指示する-a USERNAMEのみです。

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

systemctl daemon-reload
systemctl start [email protected]

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

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

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

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

23
Wieland

ファイル/etc/systemd/system/getty.target.wants/[email protected]/lib/systemd/system/getty@serviceへのシンボリックリンク)を直接変更します。

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

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

したがって:

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

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

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

P.s。ファイル名[email protected]をログインしたいttyに変更します。

5
Zac

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

ヘルパー(_systemctl edit getty@tty1_)を実行するか、手動で行った操作を実行します。

_mkdir -p /etc/systemd/system/[email protected]/
touch /etc/systemd/system/[email protected]/override.conf
_

(どちらかの方法で)入力したいテキストは(必ず変更してくださいusername適切です) :

_[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'_)

1
jakebrinkmann