Làm cách nào tôi có thể định cấu hình systemd để tự động đăng nhập tôi vào môi trường máy tính để bàn của tôi, tốt nhất là không sử dụng trình quản lý đăng nhập? Tôi đang sử dụng Arch.
Làm cách nào tôi có thể định cấu hình systemd để tự động đăng nhập tôi vào môi trường máy tính để bàn của tôi, tốt nhất là không sử dụng trình quản lý đăng nhập? Tôi đang sử dụng Arch.
Câu trả lời:
Điều này được mô tả trong Arch Wiki :
Tạo một tệp dịch vụ mới tương tự
getty@.service
bằng cách sao chép nó vào/etc/systemd/system/
cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service
Điều này về cơ bản sao chép các getty@.service
tệp đã tồn tại vào một tệp mới autologin@.service
có thể được sửa đổi tự do. Nó được sao chép vào /etc/systemd/system
vì đó là nơi lưu trữ các tệp đơn vị cụ thể theo trang web. /usr/lib/systemd/system
chứa các tệp đơn vị được cung cấp bởi các gói để bạn không nên thay đổi bất cứ điều gì trong đó.
Sau đó, bạn sẽ phải liên kết autologin@.service
với dịch vụ getty cho tty mà bạn muốn tự động nhận, cho extyly cho tty1:
ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
Cho đến nay, đây vẫn giống như getty@.service
tệp thông thường , nhưng phần quan trọng nhất là sửa đổi autologin@.service
để thực sự đăng nhập bạn tự động. Để làm điều đó, bạn chỉ cần thay đổi ExecStart
dòng để đọc
ExecStart=-/sbin/agetty -a USERNAME %I 38400
Sự khác biệt giữa ExecStart
dòng trong getty@.service
và autologin@.service
chỉ là thông báo -a USERNAME
cho agetty đăng nhập người dùng với tên người dùng USERNAME một cách tự động.
Bây giờ bạn chỉ cần yêu cầu systemd tải lại các tệp daemon của nó và bắt đầu dịch vụ:
systemctl daemon-reload
systemctl start getty@tty1.service
(Tôi không chắc dịch vụ có khởi động đúng hay không nếu bạn đã đăng nhập vào tty1, cách an toàn nhất là chỉ cần khởi động lại thay vì khởi động dịch vụ).
Nếu sau đó bạn muốn tự động khởi động X, hãy chèn đoạn mã sau vào ~/.bash_profile
(lấy lại từ wiki ):
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
exec startx
fi
Bạn sẽ phải sửa đổi ~/.xinitrc
để bắt đầu môi trường máy tính để bàn của mình, cách thực hiện tùy thuộc vào DE và có thể được mô tả trong wiki wiki.
File exists
khi thực hiện liên kết tượng trưng
ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
để ghi đè lên nó.
Trực tiếp sửa đổi tệp /etc/systemd/system/getty.target.wants/getty@tty1.service
(là một liên kết tượng trưng đến /lib/systemd/system/getty@service
):
Nối -a/--autologin USERNAME
vào dòng:
ExecStart=-/sbin/agetty --noclear %I $TERM
Vì thế:
ExecStart=-/sbin/agetty -a USERNAME %I $TERM
Bạn cũng có thể xóa -o '-p -- \\u'
(như hiện tại trên bản cài đặt Arch hiện tại) vì điều này sẽ bắt đầu đăng nhập USERNAME
nhưng vẫn yêu cầu mật khẩu.
Sau khi khởi động lại, bạn sẽ đăng nhập tự động.
Ps Thay đổi tên tệp getty@tty1.service
thành tty
bạn muốn đăng nhập.
IMO, Arch Wiki hiện đề xuất một giải pháp đơn giản hơn nhiều:
Chạy trình trợ giúp ( systemctl edit getty@tty1
) hoặc thực hiện những gì tôi đã làm thủ công:
mkdir -p /etc/systemd/system/getty@tty1.service.d/
touch /etc/systemd/system/getty@tty1.service.d/override.conf
Văn bản bạn muốn nhập (theo một trong hai phương thức) là ( đảm bảo thay đổi tên người dùng một cách thích hợp ):
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM
LƯU Ý : Dòng trống là quan trọng! (phải thừa nhận rằng tôi không chắc tại sao ...)
Bây giờ, khởi động lại ( shutdown -r 0
) và một cái gì đó có hiệu lực ... login: username (automatic login)
sẽ xảy ra khi trước đó nó bị chặn chờ nhập tên người dùng / mật khẩu
Sau khi được khởi động lại và tự động đăng nhập, nếu bạn giống tôi và muốn SSH vào hệ thống này ngay bây giờ, có lẽ bạn cần phải chạy:
systemctl enable sshd.service
Cái nào sẽ tạo ra symlink (vd ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'
)
/sbin/agetty
, vì vậy, đáng để kiểm tra /etc/systemd/system/getty.target.wants/getty@tty1.service
tệp gốc trước tiên.