เอกสารประกอบ: สถาปัตยกรรมของ Linux Session


20

ฉันกำลังมองหาเอกสารภาพรวมที่ดีซึ่งอธิบายถึงกอง daemons และบริการที่เกี่ยวข้องในเซสชัน Linux ที่ทันสมัย แม้ว่าจะได้อ่านเอกสารต่าง ๆ เกี่ยวกับdbusและsystemdฉันยังไม่ได้รับภาพรวม

โดยเฉพาะอย่างยิ่งฉันกำลังมองหาคำตอบสำหรับคำถามเหล่านี้ (ไม่ตอบคำถามพวกเขาควรจะอธิบายเฉพาะเอกสารที่ฉันกำลังมองหา):

  • หลังจากเข้าสู่ระบบกระบวนการใดเป็นรูทของเซสชันของผู้ใช้

  • ควรเริ่มกระบวนการใดและทำไม ฉันกำลังมองหาคำตอบที่ไม่เชื่อเรื่องพระเจ้าบนเดสก์ท็อปไม่ว่า Gnome, KDE, FVWM หรือเชลล์แบบธรรมดาจะเริ่มทำงาน

  • daemons ทั้งหมดนี้มีบทบาทอย่างไร ข้อใดจะวิ่งคนเดียวซึ่งขึ้นอยู่กับคนอื่น ควรเริ่มต้นแบบใดโดยใครทำไมและนานเท่าไร และใครควรดูแลสวนสัตว์แห่งนั้น

ฉันขอเพราะฉันพบว่าฉันมีสวนสัตว์ทั้งภูตทำงานทันทีหลังจากที่บูต: systemd-journald, systemd-udevd, ,dbus-daemon systemd-logindแต่ไม่เพียงพอที่: นอกเหนือจากนี้วิ่งน้ำหนักเบาเป็นพิเศษรูปแบบไฟล์ PDF โปรแกรมดูzathura เพิ่มเติม populates เซสชั่นของฉันกับdbus-launch, dbus-daemon, at-spi2-registrydและที่ยังไม่เปิดตัวหลังอีกat-spi-bus-launcher dbus-daemonไม่เคยมีใครมาก่อนไม่มีผู้ได้รับเชิญ แต่พวกเขาจะอยู่รอบ ๆ บ้านให้ความรู้สึกน่ากลัวจนฉันออกจากระบบ ฉันแน่ใจว่าฉันพลาดบางสิ่งที่นี่ ...

อีกตัวอย่าง: หลังจากเข้าสู่ระบบฉันมีการsystemdทำงานกับผู้ใช้ของฉันโพสต์ แต่ฉันไม่รู้ว่ามันควรจะทำอะไร (ตั้งแต่รุ่น 206 ฉันคิดว่าฉันไม่ควรใช้มันในฐานะผู้จัดการเซสชั่นใช่มั้ย) มันมีกระบวนการลูก(sd-pam)ซึ่งฉันหาเอกสารเกี่ยวกับไม่สำเร็จ

พวกเขาทำอะไร? แนวคิดเบื้องหลังการตั้งค่านี้คืออะไร

ชี้แจงมุมมองของฉัน: ใน“วันเก่า” มันก็มากพอที่จะรู้ว่า loginจะเริ่มเข้าสู่ระบบเปลือกของฉัน ( bashรัน~/.profile) และจากจุดที่ฉันจะยังคงสร้างเซสชั่นขึ้นอยู่กับสถานการณ์ที่อาจจะเปิดตัวหรือscreenstartx


4
คำถามนี้ไม่สามารถตอบได้เพราะทุก distro ทำสิ่งที่เป็นของตนเอง ยิ่งไปกว่านั้นสภาพแวดล้อมเดสก์ท็อปของ KDE และ GNOME นั้นแตกต่างกันอย่างมากซึ่งเกี่ยวข้องกับสิ่งที่เกิดขึ้นหลังจากที่ X Windowing System เริ่มทำงาน แต่ที่แย่กว่านั้นคือ distros เปลี่ยนวิธีการทำ - คุณพูดถึง systemd ซึ่งค่อนข้างใหม่ ตอนนี้ถ้าคุณต้องการคำตอบที่ไม่เชื่อเรื่องพระเจ้านั่นคือ "เคอร์เนล Linux เริ่มต้น init และทุกอย่างอื่นขึ้นอยู่กับวิธีการกำหนดค่า init" คำตอบนี้จะตื้นเท่าที่จะกว้างในขณะที่สำหรับคำตอบที่ลึกซึ้งทุกครั้งคุณจะต้อง จำกัด คำถามของคุณให้แคบลงอย่างน้อยสำหรับรุ่นแจกจ่าย
Thorsten Staerk

1
โปรดแบ่งคำถามของคุณ ตัวอย่างเช่นฉันสามารถบอกให้คุณมองหา gnome-session และ startkde เป็นกระบวนการ "root session" ซึ่งต้องการคำอธิบายเพิ่มเติม
Thorsten Staerk

1
@ thorsten-staerk:“ ไม่สามารถตอบได้เพราะทุก distro ทำสิ่งที่เป็นของตัวเอง” ดังนั้นคุณกำลังบอกว่าฉันไม่สามารถสันนิษฐานได้ว่า deamons ใดกำลังทำงานอยู่ ฉันไม่อยากจะเชื่อเลย ขออภัย แต่การแยกคำถามจะไม่ให้คำตอบที่ฉันต้องการ แต่ฉันจะพยายามใช้ถ้อยคำใหม่“ เดสก์ท็อป - ผู้ไม่เชื่อเรื่องพระเจ้า”: ฉันกำลังมองหาตัวหารร่วมที่ต่ำที่สุดหรือชุดของการเรียกใช้ deamons ขั้นต่ำ พวกเขามีปฏิสัมพันธ์อย่างไรและชุดนี้เปลี่ยนแปลงอย่างไรกับเซสชันประเภทต่าง ๆ (มี dbusd ในเซสชันเทอร์มินัลหรือไม่ผ่าน SSH?)
stefan

1
Linux ทำงานบนอุปกรณ์ที่ไม่มีอะไรนอกจากจอแสดงผล LCD มันยังทำงานบนโทรศัพท์มือถือที่ไม่มี AppStore และไม่มีกล้อง มันยังทำงานบน Samsung Galaxy และบนเมนเฟรม มันสมเหตุสมผล - ใช้ RAM หลายเทราไบต์และสามารถบรรจุลงในหน่วยกิโลไบต์ได้ ฉันกลัวว่าตัวหารที่ใช้กันน้อยที่สุดของเซสชัน Linux คือ Linux และคุณมี "อิสระในการเลือก" ซึ่งบางครั้งก็น่าเกลียดที่จะเลือกสิ่งที่คุณต้องการ สำหรับเดสก์ท็อปฉันจะพยายามแสดงรายการตัวหารร่วมที่ต่ำที่สุด แต่คุณจะถามคำถามเกี่ยวกับ dbus ได้ดีกว่าแทนที่จะเป็น "ทุกอย่าง"
Thorsten Staerk

คำตอบ:


8

ฉันกำลังหลงดังนั้นจากคำถามของคุณที่ผมตอบมันบน linuxintro นี่คือคำตอบที่เหมาะสำหรับคำถามของคุณ:

เมื่อพีซีทั่วไปที่ใช้ Linux เช่น Fedora, SUSE หรือ Ubuntu บูทขึ้นตามขั้นตอนจะเป็นดังนี้:

  1. BIOS รันการตรวจสอบตนเอง
  2. BIOS โหลดบูตเซกเตอร์และดำเนินการ
  3. ดำเนินการ Bootloader เช่นด้วงหรือไลโล
  4. Bootmenu แสดงขึ้น (ไม่บังคับ)
  5. เคอร์เนลถูกโหลด
  6. โหลด RAM ดิสก์เริ่มต้นแล้ว
  7. เคอร์เนลจะถูกดำเนินการ
  8. เคอร์เนลเรียกใช้งาน init
  9. init ดำเนินการขึ้นอยู่กับ distro รุ่นและการกำหนดค่าของคุณ

    • SysV สคริปต์เริ่มต้นหรือ
    • systemd หรือ
    • พุ่งพรวด

ความรู้สึกของทุกโปรแกรมเหล่านี้คือการเริ่มบริการเช่น

  • dbusที่อนุญาตการสื่อสารระหว่างแอปพลิเคชันเพื่อให้แอปพลิเคชันหนึ่งสามารถเรียกใช้ฟังก์ชันจากแอปพลิเคชันอื่นที่กำลังทำงานอยู่ นี่คือสิ่งที่ผู้ใช้ไม่สามารถมองเห็นได้เช่นแอปพลิเคชันที่เรียกตัวจัดการหน้าต่างเพื่อกำหนดหน้าต่างของตัวเองให้อยู่ในโฟกัส
  • เข้าสู่ระบบที่อนุญาตให้ผู้ใช้เข้าสู่ระบบในเทอร์มินัล CTRL_ALT_F * กระบวนการของการเข้าสู่ระบบตามที่เห็นโดย ps -A จะในกรณีที่ systemd เป็น systemd-logind (อาจแตกต่างกันไปตามการกระจาย)
  • udevที่มีชื่อมากมายเช่นสำหรับฉันฉันพบว่ามี ps -A เป็น systemd-udevd มันกำหนดเช่นอุปกรณ์จัดการใน / dev / ไปยังอุปกรณ์ที่คุณเชื่อมต่อเช่นดิสก์ USB
  • cronที่จะดำเนินการคำสั่งตามตารางเวลาใน / etc / crontab และยังมีคุณสมบัติ "@reboot" เพื่อเริ่มคำสั่งในการบูต

10) กระบวนการล็อกอินที่จัดการโดย systemd จะรอการล็อกอินในเทอร์มินัลเสมือนโดยทั่วไปสามารถเข้าถึงได้โดยกด CTRL_ALT_F1

11) โดยปกติแล้วโดยค่าเริ่มต้นกระบวนการเริ่มต้นจะเริ่มต้นตัวจัดการการแสดงผลเช่น kdm (ตัวจัดการการแสดงผล KDE) หรือ xdm

12) ตัวจัดการการแสดงผลจะเริ่มระบบกราฟิก ไม่มีระบบกราฟิก แต่ Xorg (hildon สำหรับอุปกรณ์ฝังตัว)

13) ผู้จัดการการแสดงผลจะแนะนำเซิร์ฟเวอร์ Xorg เพื่อแสดงหน้าจอเข้าสู่ระบบ


ตอนนี้การเริ่มต้นจะเสร็จสมบูรณ์และคอมพิวเตอร์รอให้ผู้ใช้เข้าสู่ระบบ


14) เมื่อผู้ใช้เข้าสู่ระบบจัดการการแสดงผลจะเริ่มสภาพแวดล้อมเดสก์ทอปเช่น KDE, GNOME หรือ XFCE4 กระบวนการรูทสำหรับเซสชัน KDE ของผู้ใช้จะเรียกว่า startkde กระบวนการรูทสำหรับ GNOME จะเรียกว่า gnome-session กระบวนการรูทสำหรับ XFCE4 จะเรียกว่า xfce4-session

15) KDE จะเริ่มต้นแฟ้มที่ปฏิบัติการได้ทั้งหมดจาก ~ / .kde / Autostart และไฟล์ .desktop จาก / etc / xdg / autostart (ดูที่การจัดตารางงาน )

16) เมื่อผู้ใช้เข้าสู่ระบบแบบกราฟิกและคลิกที่ไอคอนเพื่อเปิดคอนโซลโดยทั่วไปจะมีการทุบตี Bash จะทำการรัน. bashrc ก่อน

17) เมื่อผู้ใช้เปิด log in shell หมายความว่าเขาจำเป็นต้องเข้าสู่ระบบด้วยรหัสผ่านหรือรหัสที่ได้รับอนุญาต เขาสามารถทำได้ในคอนโซล CTRL_ALT_F1 หรือโดยการ ssh'ing กับคอมพิวเตอร์เช่น localhost จากนั้นสคริปต์. sh จาก /etc/profile.d และ. bashrc จะถูกเรียกใช้งาน


1
นี่เป็นภาพรวมทั่วไปที่ดีของขั้นตอนในการเริ่มระบบ linux ซอฟต์แวร์เฉพาะ (เช่น grub, lilo, u-boot) มีการเปลี่ยนแปลง แต่ฟังก์ชั่นเหมือนกัน ฉันสงสัยว่าคุณมีความสนใจมากที่สุดในกระบวนการเริ่มต้นดังนั้นมุ่งเน้นที่ขั้นตอน # 8 และ # 9 sysvinit (/ etc / inittab) ค่อนข้างล้าสมัยไปแล้วเพราะ systemd หรือพุ่งพรวด ทั้งสองนี้สามารถเรียกใช้ / ตรวจสอบบริการ sysvinit
dturvene

ไม่มีแอพที่เรียกผ่าน d-bus เพื่อให้ได้หน้าต่างเป็นที่ต้องการ -
Robert Siemer

0

คำตอบคือ 42. Thorsten Staerk อธิบายปัญหาหลักในความคิดเห็นแล้ว

เพื่อช่วยให้คุณได้ภาพรวมที่ดีคุณต้องรู้ว่าซอฟต์แวร์ Linux และ Open Source เขียนและดูแลโดยอาสาสมัครและ บริษัท นับล้าน ดังนั้นจึงไม่ใช่เรื่องง่ายที่จะติดตามการเติบโต

ในอีกด้านหนึ่งมีเอกสารมากมาย: man-pages สำหรับซอฟต์แวร์ทุกชิ้นคำอธิบายที่ดีว่าD-Busคืออะไรรายชื่อผู้รับจดหมายจากนักพัฒนาซอฟต์แวร์ Googleและอื่น ๆ ดังนั้นใช้เวลาหลายปีของเวลาและอ่านเอกสารของแพคเกจที่คุณสนใจ. หากคุณต้องการมันเร็วขึ้นเพียงแค่ถามคำถามที่ดีบางอย่างที่ใช้ระบบปฏิบัติการยูนิกซ์และลินุกซ์

โชคดี.


รู้ทุกอย่างเกี่ยวกับวิธีการใช้งานพาไฟฟ้าปัดบอกฉันไม่เกี่ยวกับวิธีการทำเค้ก “ อ่านเอกสารทั้งหมดของแพ็คเกจที่คุณสนใจ” - นี่เป็นคำตอบที่ไร้ประโยชน์ เอกสารที่คุณพูดถึงบอกฉันว่าสิ่งเหล่านี้ทำอะไร แต่ฉันต้องการที่จะรู้ว่าสิ่งที่พวกเขาใช้สำหรับ “ แค่ถามคำถามที่ดี” - คำถามของฉันเรียบง่ายและตรงไปตรงมา: เอกสารของที่ไหน
ฟาน

1
บางทีคุณอาจต้องเรียนรู้วิธีขอให้ได้คำตอบที่คุณคาดหวัง ในกรณีนี้ฉันต้องการจะชี้ให้คุณเป็นคำถามที่พบบ่อยมีประโยชน์มากวิธีการถามคำถามวิธีที่ชาญฉลาด

0

ก่อนที่ฉันจะให้คำตอบในเวอร์ชันของฉันให้ฉันเริ่มด้วยคำจำกัดความสองสามข้อ

Linux == 'เคอร์เนลระบบปฏิบัติการ "Linux System ==" ระบบบางชนิดที่สร้างขึ้นรอบ ๆ เคอร์เนล Linux "เซสชันบนระบบ Linux ==" ชุดโปรแกรมผู้ใช้ที่เกี่ยวข้องบางชุดทำงานบนระบบ Linux "

ยิ่งคุณอยู่ห่างจากเคอร์เนลยิ่ง "ระบบ" ที่มีโอกาสน้อยกว่าจะมีอะไรที่เหมือนกัน ซึ่งหมายความว่าไม่มีคำจำกัดความที่สมเหตุสมผลของ "Modern Linux Session"

ตรงไปตรงมาความคาดหวังที่ว่าควรมีเอกสารระบบที่ครอบคลุมบางประเภทที่ให้องค์ประกอบทั้งหมดแก่คุณนั่นคือความคาดหวังที่จะไม่เกิดขึ้นในพื้นที่ส่วนใหญ่ของโลกโอเพนซอร์ส นักพัฒนาซอฟต์แวร์โอเพ่นซอร์สกำลังเขียนโปรแกรมเพื่อแก้ไข (หรือแก้ไขอีกครั้ง) ปัญหาเฉพาะที่พวกเขาสนใจ - ดังนั้นพวกเขาจะทำเอกสารที่เป็นส่วนหนึ่งของมัน - ถ้าเป็นเช่นนั้น! :-)

คุณอาจโชคดีกว่าด้วยคู่มือที่มีให้กับลินุกซ์การแจกแจงเชิงพาณิชย์ แต่ด้วยลักษณะอนุรักษ์นิยมของคนส่วนใหญ่คุณสามารถยืนยันได้ว่าการเผยแพร่ของพวกเขาไม่ใช่ "ทันสมัย"!

คำแนะนำที่สำคัญที่ฉันให้คือความรู้สึกโดยทั่วไปของระบบยูนิกซ์ / ลินุกซ์นั้นเป็นไปตามลำดับขั้น ฉันเคยบอกคนว่าฉันชอบระบบ nix เพราะฉันสามารถเริ่มต้นด้วย init และจากนั้นทำความเข้าใจทุกสิ่งที่เกิดขึ้นในระบบ Systemd และเพื่อนมีการเปลี่ยนแปลงเล็กน้อย แต่หลักการพื้นฐานเหมือนกัน - เริ่มต้นที่ด้านบนและทำงานลง - "โปรแกรมที่ทำขึ้นเซสชั่น" โดยทั่วไปคือผู้ที่เริ่มต้นจากจุดที่คุณเข้าสู่ทายาท ดังนั้นหากคุณ ssh คุณอาจจะได้รับสิ่งที่เปลือกเริ่มต้นของคุณเป็นวิธีที่ ssh ทำงาน หากคุณเข้าสู่ระบบผ่านอินเทอร์เฟซแบบกราฟิกคุณจะได้รับสิ่งที่เริ่มต้นโดยผู้จัดการการเข้าสู่ระบบของคุณเพราะนั่นคือวิธีการที่ผู้จัดการการเข้าสู่ระบบของคุณทำงาน

เฟรมเวิร์กของเดสก์ท็อปจำนวนมากทำให้สิ่งนี้ทำได้ยากขึ้นเล็กน้อยโดยการรันผู้ใช้หรือระดับบริการของ daemons - และบางครั้งสิ่งเหล่านี้จะเริ่มตามความต้องการโดยเมื่อโปรแกรมแรกที่ต้องการเริ่ม - ดูที่ตัวเลือกบรรทัดคำสั่งของ โปรแกรมที่คุณกำลังเรียกใช้มีตัวเลือกที่ค่อนข้างน่าจะหยุดพฤติกรรมนี้และเรียกใช้แอปพลิเคชันในโหมด "เปลือย"

โชคไม่ดีที่นี่หมายความว่า "การอ่านเอกสารของแต่ละโปรแกรม" เป็นวิธีเดียวที่จะเข้าใจได้ทั้งหมดและไม่มี "ชุดขั้นต่ำ daemons" สำหรับเซสชัน - มีวิธีการแจกจ่ายที่กำหนดให้ วิธีการเข้าสู่ระบบ / การเข้าถึงและเฉพาะการกระจายเดสก์ทอปและวิธีการเข้าสู่ระบบที่เฉพาะเจาะจง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.