ฉันจะล็อกออนอัตโนมัติกับเดสก์ท็อปด้วย systemd ได้อย่างไร


20

ฉันจะกำหนดค่า systemd เพื่อล็อกอินโดยอัตโนมัติในสภาพแวดล้อมเดสก์ท็อปของฉันได้อย่างไรโดยไม่ต้องใช้ตัวจัดการการเข้าสู่ระบบ ฉันกำลังใช้ Arch


คุณใช้ผู้จัดการการเข้าสู่ระบบคนใด? บางอย่าง (GDM, KDM, iirc หรืออาจมากกว่า) รองรับ autologin อยู่แล้วดังนั้นคุณจะต้องเปิดใช้งานบริการสำหรับพวกเขาเท่านั้น
วีแลนด์

ฉันกำลังใช้บางและมันสามารถกำหนดค่าให้ autologin แต่ไม่มีผู้จัดการแสดงขั้นตอนการบู๊ตจะได้เร็วขึ้นและมากขึ้น flickerless :)
fhucho

โอ้ฉันเข้าใจผิดคำถามของคุณ
วีแลนด์

คำตอบ:


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เชื่อมโยงไปยังบริการ getty สำหรับ tty ที่คุณต้องการ autologin สำหรับ examply สำหรับ tty1:

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@.serviceและautologin@.serviceเป็นเพียงสิ่ง-a USERNAMEที่บอก agetty เพื่อเข้าสู่ระบบผู้ใช้ด้วยชื่อผู้ใช้ USERNAME ในโดยอัตโนมัติ

ตอนนี้คุณต้องบอกให้ systemd ทำการโหลดไฟล์ daemon ใหม่และเริ่มบริการ:

systemctl daemon-reload
systemctl start getty@tty1.service

(ฉันไม่แน่ใจว่าบริการจะเริ่มต้นอย่างถูกต้องหรือไม่หากคุณลงชื่อเข้าใช้แล้วใน tty1 วิธีที่ปลอดภัยที่สุดคือสามารถรีบูทได้แทนที่จะรีสตาร์ทเซอร์วิส)

หากคุณต้องการเริ่มต้น X โดยอัตโนมัติให้แทรกข้อมูลต่อไปนี้ลงในของคุณ~/.bash_profile(นำมาจากวิกิอีกครั้ง):

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

คุณจะต้องแก้ไขของคุณ~/.xinitrcเพื่อเริ่มต้นสภาพแวดล้อมเดสก์ท็อปของคุณวิธีการทำเช่นนั้นขึ้นอยู่กับ DE และอาจอธิบายไว้ใน Arch wiki ด้วย


agetty คืออะไร% I?
Edward Anderson

เกิดอะไรขึ้นกับ `ตัวละครสุดท้าย จำเป็นไหม? มันหมายความว่าอะไร?
rien333

@ rien333 มันไม่จำเป็นฉันได้ลบมันออกจากคำตอบ
วีแลนด์

2
ฉันได้รับข้อผิดพลาดFile existsเมื่อฉันทำ symlink
โพสต์ตัวเอง

ใช้ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceเพื่อเขียนทับมัน
Manuel Schmitzberger

5

แก้ไขไฟล์โดยตรง/etc/systemd/system/getty.target.wants/getty@tty1.service(ซึ่งเป็น symlink /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.serviceที่ttyคุณต้องการเข้าสู่ระบบ


หมายเหตุสำหรับความชัดเจน: ถ้าเป็น symlink ให้แทนที่ symlink ด้วยไฟล์ใหม่และแก้ไขไฟล์ใหม่
Edward Anderson

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

สิ่งที่จะสร้าง symlink (เช่นln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service')


บรรทัดว่างก่อนจะล้างรายการ ExecStart ในขณะที่บรรทัดถัดไปจะแนะนำคำสั่ง exec ใหม่ นอกจากนี้ยังมีข้อสังเกตว่าในบางระบบ (อูบุนตู) ความสามารถในการประมวลผลของ agetty นั้นอาจอยู่ใน/sbin/agettyดังนั้นจึงควรตรวจสอบ/etc/systemd/system/getty.target.wants/getty@tty1.serviceไฟล์ต้นฉบับก่อน
แพลตฟอร์ม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.