Làm thế nào tôi có thể tự động truy cập vào máy tính để bàn với systemd?


20

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.


Bạn đang sử dụng trình quản lý đăng nhập nào? Một số (GDM, KDM, iirc, có thể nhiều hơn) đã hỗ trợ autologin nên bạn chỉ cần kích hoạt dịch vụ cho họ.
Wieland

Tôi hiện đang sử dụng SLiM và nó có thể được định cấu hình để tự động nhận, nhưng không có trình quản lý hiển thị, quá trình khởi động sẽ nhanh hơn và không nhấp nháy hơn :)
fhucho

Ồ, tôi đọc sai câu hỏi của bạn.
Wieland

Câu trả lời:


22

Đ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@.servicebằ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@.servicetệp đã tồn tại vào một tệp mới autologin@.servicecó thể được sửa đổi tự do. Nó được sao chép vào /etc/systemd/systemvì đó là nơi lưu trữ các tệp đơn vị cụ thể theo trang web. /usr/lib/systemd/systemchứ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@.servicevớ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@.servicetệ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 ExecStartdòng để đọc

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

Sự khác biệt giữa ExecStartdòng trong getty@.serviceautologin@.servicechỉ là thông báo -a USERNAMEcho 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.


Cuộc tranh luận% I là gì?
Edward Anderson

Có chuyện gì với `charachter ở cuối? Có cần thiết không? Nó có nghĩa là gì?
rien333

@ rien333 Không cần thiết, tôi đã xóa câu trả lời.
Wieland

2
Tôi gặp lỗi File existskhi thực hiện liên kết tượng trưng
Đăng tự

sử dụng ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceđể ghi đè lên nó.
Manuel Schmitzberger

5

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 USERNAMEvà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 USERNAMEnhư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.servicethành ttybạn muốn đăng nhập.


Lưu ý cho rõ ràng: nếu đó là một liên kết tượng trưng, ​​hãy thay thế liên kết tượng trưng bằng một tệp mới và chỉnh sửa tệp mới đó.
Edward Anderson

1

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


Dòng trống trước tiên sẽ xóa mục ExecStart, trong khi dòng tiếp theo sẽ giới thiệu lệnh exec mới. Cũng đáng lưu ý rằng trên một số hệ thống (Ubuntu), tệp thực thi agetty có thể được đặt trong đó /sbin/agetty, vì vậy, đáng để kiểm tra /etc/systemd/system/getty.target.wants/getty@tty1.servicetệp gốc trước tiên.
platforma
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.